在模拟电路(如 Sigma-Delta ADC 或高阶运放)设计中,计算输出总噪声功率的定义式为
Pout=∫0∞Sin⋅∣H(jω)∣2dω
为了利用复变函数的强大工具,我们利用 ∣H(jω)∣2 是偶函数的特性,将积分范围扩展到全实数轴,并引入复频率 s=jω
NEB (rad/s)=∫0∞∣H(jω)∣2dω=2j1∫−j∞j∞H(s)H(−s)ds=2j1∮CH(s)H(−s)ds
极点是使传递函数分母为 0 的点 s=p,决定了电路的固有频率和稳定性。留数是函数在极点处“留下的数值”。如果将函数 F(s) 进行部分分式展开:
F(s)=s−p1A+s−p2B+…
其中 A,B 分别是 F(s) 在极点 p1,p2 处的留数。对于噪声功率积分,留数通常是复数。但由于共轭极点的存在,左半平面所有留数之和最终一定是实数。
留数定理指出,一个解析函数在闭合曲线内的积分,等于该曲线内所有孤立极点处的留数之和的 2πj 倍
- 构造被积函数:F(s)=H(s)⋅H(−s)
- 筛选极点:找出 F(s) 在左半平面 (LHP) 的所有极点。注意 H(−s) 会引入右半平面的对称极点,计算时需剔除。
- 计算留数和:利用留数定理,总噪声功率简化为:
Pout=21⋅(2πj)⋅∑Res[F(s),pLHP]
手动进行部分分式展开非常繁琐,可以使用导数法快速求解一阶极点的留数。若 F(s)=D(s)N(s),且 s=p 是分母的一个根,则该点留数为:
Res(p)=D′(p)N(p)
保持分子不变,对分母求导,然后将极点数值代入 s 即可
需要注意的是
- 传递函数 H(s) 必须是严格真分式(分母阶数 > 分子阶数),否则高频噪声积分不收敛。
- 如果电路在 DC 处有无穷大增益(如理想积分器),在 s=0 处存在极点,此时总噪声功率在物理上发散,无法定义 NEB
- 所有 H(s) 的极点必须位于左半平面,保证稳定性
ClearAll["Gloabal`*"]
(*定义万能等效噪声带宽函数 (单位:Hz)*)
SolveENB[H_, sVar_] := Module[{tf, den, poles, integrand},
(*1. 整理传递函数*)
tf = Together[H];
den = Denominator[tf];
(*2. 自动求出系统极点 (分母的根)*)
poles = sVar /. Solve[den == 0, sVar];
(*3. 构造 H(s)*H(-s),利用留数定理求积分*)
(*0 到 inf 的积分等于 1/2*(全平面留数之和)*)
integrand = tf*(tf /. sVar -> -sVar);
(*4. 计算所有极点的留数之和,除以 2 得到 ENB*)
FullSimplify[Total[Residue[integrand, {sVar, #}] & /@ poles]/2]
]
(* 示例用法:假设你有一个三阶传递函数 myH *)
(* myResult = SolveENB[myH, s] *)