news 2026/9/8 0:08:55

从ABCD矩阵到EET:电路传递函数推导的两种高效路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从ABCD矩阵到EET:电路传递函数推导的两种高效路径

调试一个硬件问题:在运放反馈回路里多并联了一个电容,理论上只增加一个极点,可仿真曲线却显示相位提前了,手算怎么都对不上。后来才意识到,新增电容不止影响极点,还悄悄引入了一个零点,而手工重推整条传递函数太容易漏掉这一项。

这类问题在模拟电路、电源环路和滤波器设计中几乎天天遇到。你当然可以把原理图丢给SPICE跑一遍,但仿真只能告诉你“结果不对”,不能告诉你“为什么不对、哪个元件决定的”。此时需要两条经典分析路径:一条是用ABCD传输矩阵,把多级网络变成矩阵乘法,适合从零开始严谨推导;另一条是Middlebrook提出的额外元素定理EET,针对“在已有电路上增加一个元件”的场景,用一张分式修正因子直接估计新增元件的影响。

这篇文章就围绕这两个方法展开。我们先讲清楚它们分别解决什么问题,再用同一个RC网络分别用两种方法推一遍,最后用Python Sympy做符号验证。读完你可以做到:遇到级联网络能快速搭出ABCD矩阵;遇到“多加一个电容/电阻到底有什么影响”这类问题,能先用EET估算,而不是盲目重推整条公式。

1. 为什么要把 ABCD 方法和 EET 放在一起讲

很多教材把ABCD矩阵放在“二端口网络”章节,把EET放在“反馈放大器”章节,两章之间没有任何交叉引用。结果就是读者学会了两个孤立工具,遇到真实项目却不知道该怎么选。

选择标准其实很朴素:关键看你要回答的问题属于“结构”还是“增量”。

如果问题是“这个由五级组成的网络,总传递函数是多少”,这就是结构问题。网络可以拆成一级一级的单元,每一级用一个ABCD矩阵描述,最后把矩阵乘起来。ABCD方法的长处是:级联顺序清晰、不会丢项、边界条件明确,特别适合做从零开始的符号推导。

如果问题是“我在某一级上额外并联了一个电容,传递函数会怎么变”,这就是增量问题。你要的不是从头再推一遍,而是在已经算好的基准传递函数上,乘以一个修正因子。EET解决的正是这个:它可以把新增元件的影响,拆成“端口空载阻抗”和“输出置零阻抗”两个可测量的量,然后用一个分式完成修正。

一个容易忽略的事实是:EET不是近似公式,而是精确公式。很多人误以为这类“工程设计方法”一定有牺牲精度的假设,实际上EET在理想线性网络下是严格的。之所以看起来像近似,是因为工程师拿到结果后经常会进一步忽略高阶小项,那是使用层面的选择,不是定理本身的问题。

所以,把ABCD和EET放在一起讲,本质上是在教你两种分析习惯:ABCD训练你“拆结构”,EET训练你“算增量”。这两种习惯,恰恰是纯靠仿真器很难培养出来的。

2. 基础概念与核心原理

2.1 先从二端口网络说起

在分析任何电路方法前,先看一个基础模型:二端口网络。

一个线性网络如果对外只有两个端口,就可以用四个参数描述它的外部行为。ABCD矩阵(也常叫传输矩阵)是其中常用的一种,定义如下:

V1 = A * V2 - B * I2 I1 = C * V2 - D * I2

这里需要特别注意符号约定。在上述写法中,端口2的电流方向是“从网络流出”的方向。不同教材可能把I2方向定义成相反方向,导致B、D项出现符号差异。使用任何资料时,第一件事就是确认它的电流方向约定,否则级联结果会出现系统性错误。

A、B、C、D四个参数有明确的物理含义:

参数含义典型计算方法
A输出端开路时,V1与V2之比(无量纲)V1/V2,I2=0
B输出端短路时,V1与(-I2)之比(阻抗量纲)V1/(-I2),V2=0
C输出端开路时,I1与V2之比(导纳量纲)I1/V2,I2=0
D输出端短路时,I1与(-I2)之比(无量纲)I1/(-I2),V2=0

实际计算中,你并不需要每次都从端口条件推A/B/C/D。常用基本单元矩阵可以直接查表:

串联阻抗Z: [ 1 Z ] [ 0 1 ] 并联导纳Y: [ 1 0 ] [ Y 1 ]

有了这两个基本单元,很多常见电路都能通过级联组合得到。

2.2 级联计算的核心性质

ABCD矩阵最重要的性质就是级联乘法。如果网络由N个子网络依次级联,那么整个网络的ABCD矩阵等于各子网络矩阵按信号流动方向依次相乘:

[ A B ] = [ A1 B1 ] * [ A2 B2 ] * ... * [ An Bn ] [ C D ] [ C1 D1 ] [ C2 D2 ] [ Cn Dn ]

矩阵乘法不满足交换律,所以级联顺序绝不能搞反。最简单的检查办法:先串联一个阻抗Z,再并联一个导纳Y,和先并联Y再串联Z是完全不同的电路,乘出来的矩阵自然也不同。

当输出端空载时,I2 = 0,由第一个方程可以得到:

V2 / V1 = 1 / A

这是ABCD方法里最常用的结论:空载电压传递函数等于A参数的倒数。如果输出端接了负载,就不能只取1/A,需要把负载阻抗纳入完整的两端口方程再求解。工程中许多错误的来源,就是强行把带负载情况套用空载公式。

2.3 额外元素定理EET的基本思想

额外元素定理(Extra Element Theorem,EET)由R. D. Middlebrook在设计导向分析中提出。这个定理处理的问题非常聚焦:已知一个网络在没有某个元件时的传递函数,如何快速得到加入该元件后的传递函数。

设额外元件阻抗为Z,基准传递函数为G0,那么EET公式为:

G = G0 * (1 + Zn / Z) / (1 + Zd / Z)

其中:

  • Z:额外元件阻抗,例如电容C对应Z = 1/(sC);
  • Zd:输入端信号置零、输出端保持自然状态时,从额外元件端口看入的阻抗;
  • Zn:输入端信号置零、输出端被强制为零(null)时,从额外元件端口看入的阻抗;
  • G0:额外元件处于“基准状态”时的传递函数。

这里容易产生一个疑问:G0到底是把额外元件短路还是开路?答案取决于哪种状态构成一个合理的基准网络。对于并联在节点上的电容,基准状态通常是开路;对于串联在支路中的电容,基准状态通常是短路。判断标准很简单:哪种状态下剩下的网络仍然能正常工作,就用哪种状态作为基准。

2.4 EET为什么对工程师特别有价值

EET的价值不在于替代全推导,而在于把“新增元件的影响”拆解成两个可理解的部分。

观察分式修正因子:

(1 + Zn / Z) / (1 + Zd / Z)

如果Zn远小于Z,那么分子接近1,新增元件主要影响极点;如果Zn不等于零,分子会随频率变化,意味着还会产生新的零点。更进一步,通过比较Zn和Zd,你能快速判断:新增元件产生的零点和极点谁在高频、谁在低频,对相位裕度整体是友好还是危险。

这种能力是仿真器给不了的。仿真器能告诉你最终曲线,但给不了你“如果把电阻R2减小十倍,零点往哪个方向移动”这类缩放直觉。

3. 环境准备与前置条件

本文的符号推导使用Python和Sympy完成。Sympy是Python的符号计算库,可以在不依赖商业EDA的情况下完成矩阵运算、公式化简和断言验证,非常适合用来验证手推过程。

建议环境:

  • Python 3.8 或更高版本;
  • Sympy 1.12 或更高版本;
  • 数值绘图部分使用 NumPy、Matplotlib 和 SciPy。

准备命令:

pip install sympy numpy scipy matplotlib

安装完成后,验证Sympy是否可用:

import sympy as sp print(sp.__version__)

如果你没有Python环境,也可以完全按第4、5节的手推流程在纸上完成推导。本文的代码主要用于验证,不是唯一的执行路径。核心方法本身不依赖任何特定工具链。

4. 用 ABCD 矩阵推导传递函数:主示例

4.1 示例电路与端口定义

我们用下面这个电路贯穿全文:信号源Vin经过串联电阻R1,到达输出节点Vout;Vout节点对地接电阻R2;同时在Vout节点对地接一个电容C,输出端空载。

按照级联思路,这个网络可以拆成三个级联单元:

  1. 串联阻抗R1;
  2. 并联导纳1/R2;
  3. 并联导纳sC。

注意,这里的端口2是Vout节点与地之间;输出端空载意味着I2 = 0。

4.2 写出三个基本单元的ABCD矩阵

串联阻抗R1对应的矩阵:

M1 = [ 1 R1 ] [ 0 1 ]

并联电阻R2对应的矩阵,其中Y2 = 1/R2:

M2 = [ 1 0 ] [ Y2 1 ]

并联电容C对应的矩阵,其中YC = sC:

M3 = [ 1 0 ] [ YC 1 ]

4.3 级联矩阵相乘

总矩阵为:

M = M1 * M2 * M3

先做前两步乘法。M1乘以M2后,第一行第一列元素为:

A_temp = 1 + R1 * Y2

再乘以M3,由于M3的第一行第一列是1,第一行第二列是0,所以总A参数保持不变:

A_total = 1 + R1 / R2 + s * C * R1

因此空载传递函数为:

Vout / Vin = 1 / A_total = 1 / (1 + R1/R2 + s*C*R1)

为了更直观,分子分母同乘R2:

Vout / Vin = R2 / (R1 + R2 + s*C*R1*R2)

这个结果是后面所有对照的基准。

4.4 从公式读出物理意义

观察分母表达式,当频率为0时,G = R2 / (R1 + R2),正是电阻分压比。随着频率升高,sC项逐渐占据主导,增益以20dB/dec的斜率下降,因此这是一个单极点低通网络。极点频率为:

fp = 1 / (2 * pi * (R1 // R2) * C)

其中R1 // R2 = R1 * R2 / (R1 + R2)。这个结果在ABCD推导中是一步步自然得到的。你可以发现,ABCD方法虽然机械,但只要矩阵写对、乘法顺序对,就不容易漏项。

5. 用 EET 快速评估额外元件影响

5.1 把电容C当作额外元件

还是那个电路,换一种视角。假设你已经设计好了电阻分压器R1和R2,现在想评估“往Vout节点加一个电容C到底有多大影响”。

基准网络是去掉电容C后的电阻分压器,因此基准传递函数:

G0 = R2 / (R1 + R2)

额外元件阻抗:

Z = 1 / (s*C)

接下来需要求两个端口阻抗:Zd和Zn。

5.2 求输入置零、输出自由时的Zd

Zd的定义是:输入端Vin置零(接地),输出端保持自然空载状态,从电容端口看入的阻抗。

从Vout节点向左边看,Vin接地,所以Vout经过R1到地;向右边看,Vout经过R2到地。两条并联路径,因此:

Zd = R1 // R2 = R1 * R2 / (R1 + R2)

5.3 求输入置零、输出置零时的Zn

Zn的定义是:输入置零,同时输出被强制为0(null),从电容端口看入的阻抗。

在主示例中,输出就是Vout节点本身。要让输出为0,必须让Vout节点等于0V。此时从电容端口看进去,相当于端口被一个理想0V电源钳位,因此:

Zn = 0

这个例子中Zn恰好为0,确实比较特殊。它说明:当额外元件直接接在输出节点上时,新增元件不会引入新零点,只会在原极点基础上叠加极点。

很多初学者第一次算Zn时会怀疑:输出置零不就是输出端接地吗?为什么还要单独求一个阻抗?这里的微妙之处在于,这个0V不是外部短路实现的,而是“让输出为零”的约束条件反向决定的端口状态。在无源网络中它常常退化成接地,但在有源网络中,输出置零往往需要额外的受控源配合,不能简单接地处理。

5.4 代入EET公式

由于Zn = 0,

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 8:46:04

目前手机自动化有一半时间空闲

目前效率太高了:5小时可以完成一轮循环,这样高速手机和低速手机都有这个速度。这个空闲用来干什么?当然是添加自动任务了如果用手机来发布视频???不好,因为手机处理速度慢。而且脚本修改起来好麻烦。还有什…

作者头像 李华
网站建设 2026/9/5 10:07:37

数据安全: 115页数据资产管理、 体系建设【附全文阅读】

这份 115 页数据安全与数据资产管理体系建设 PPT,是数据中台、数据治理、数据安全、数据资产管理类项目核心标准化推介素材,适配企业数字化转型、数据平台建设、数据合规咨询类投标与宣讲。文档完整覆盖从数据中台建设到数据安全保障的全链路方法论&…

作者头像 李华
网站建设 2026/9/6 10:15:21

老视频高清修复实战:FFmpeg+Real-ESRGAN从拆帧到封装

刷老视频的时候,最让人难受的往往不是舞台不够炸,而是画面糊成一团。最近常看到 SHINee《Replay(姐姐真漂亮)》的经典舞台被反复提起,其中“没接到麦”这个名场面更是被粉丝们反复回看。可是老舞台片源如果来自当年的电…

作者头像 李华
网站建设 2026/9/6 7:36:10

Spring AI 学习篇

大模型&#xff1a;DeepSeek、阿里云百炼、ollama下面以DeepSeek为例&#xff0c;进行学习一、快速使用1.添加依赖在pom.xml添加<dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-deep…

作者头像 李华
网站建设 2026/9/6 9:02:59

PlugClaw实战:基于OpenClaw的AI代理硬件部署与Skill扩展指南

当业务需要把 OpenClaw 这样的个人 AI 代理真正跑起来时&#xff0c;很多朋友会卡在环境安装、依赖兼容、模型配置这些环节。折腾半天还没看到 Agent 回复一句话&#xff0c;体验非常劝退。本文围绕 PlugClaw 这套基于原生安卓系统的 OpenClaw 硬件方案&#xff0c;完整讲解它的…

作者头像 李华
网站建设 2026/9/7 22:13:57

tensor_of_ice 项目调研:从命名歧义到驱动与仿真器验证的通用方法

tensor_of_ice 这个名字&#xff0c;第一眼很容易被当成一个深度学习相关的小工具&#xff0c;因为“tensor”在技术圈里几乎就是张量运算的代名词。但真正去查资料时会发现&#xff0c;这个项目直接可用的介绍不多&#xff0c;甚至会被一起检索到“ice 1000仿真器驱动”这类明…

作者头像 李华