在模拟电路设计(如 Sigma-Delta ADC 或带补偿的运算放大器)中,经常需要计算系统的总噪声功率或噪声等效带宽 (NEB)。其数学本质是求解如下积分:
Pout=∫0∞Sin⋅∣H(jω)∣2dω
传统的 复变函数留数法 (NEB-Calculation-Residue-Theorem) 需要对传递函数的分母进行因式分解,当系统阶数 n≥5 时,若无数值解,手动计算几乎不可能。为了解决这一痛点,这里介绍一种更高级的 Hurwitz 行列式法。该方法极其巧妙地绕过了复杂的求根过程,直接利用传递函数分母的系数来构建线性方程组,非常适合高阶系统的工程设计与代码算法实现。
在运用此方法前,必须确保你的系统传递函数 H(s) 满足以下物理与数学条件:
- 稳定性(极点在左半平面):传递函数 H(s) 的分母多项式的所有根必须位于复平面的左半平面,保证系统是稳定的。
- 收敛性(分子阶数小于分母阶数):分子的阶数必须严格小于分母的阶数(即 m≤n−1),否则高频噪声积分在数学上不收敛,物理上总噪声也会发散。在真实的物理世界中,由于寄生电容等储能元件的“惯性”,输出永远追不上无限快的输入变化,因此真实系统的分母阶数永远会比分子阶数高。
首先,将 n 阶传递函数 H(s) 整理成标准的严格真分式多项式形式:
H(s)=ansn+an−1sn−1+⋯+a1s+a0bn−1sn−1+⋯+b1s+b0
在真实的物理系统中,分子的阶数确实必须严格小于分母的阶数,否则你不仅无法使用这套数学方法,电路在物理上也是不成立的
- 如果分子阶数 = 分母阶数:当频率 ω→∞ 时,传递函数 H(jω) 会趋近于一个常数(增益)。此时 ∣H(jω)∣2 在无限远的频率处依然有值,那么从 0 到 ∞ 的积分结果就是无穷大。这意味着这个电路会放大无限宽的频谱,产生无穷大的噪声功率,这在数学上没有意义。
- 如果分子阶数 < 分母阶数:当 ω→∞ 时,H(jω)→0。只有这样,功率谱曲线才会随着频率升高而“掉下来”,围成的面积(积分值)才是有限的 。
在真实系统中,分子和分母的阶数关系是由系统的能量存储元件(电容、电感)决定的。
- 分母阶数(n):代表了系统中独立储能元件的数量。每一个电容或电感通常都会为分母贡献一阶 s。
- 分子阶数(m):代表了信号传输的“零点”路径。
这是该方法的核心步骤,你需要用分母系数 ai 填入一个 n×n 的方阵。其填充规律是按照“奇偶交替”和“下标递减”进行的:
- 第一行:从 an−1 开始,向右递减下标减 2(例如:an−1,an−3,an−5…)。
- 第二行:从 an 开始,向右递减下标减 2(例如:an,an−2,an−4…)。
- 后续行:从第三行开始,每一行都是上一行向右平移(错一位),且下标整体减 1。
- 越界补零:下标如果超出范围(大于 n 或小于 0)的项直接填 0。
示例:5 阶系统 (n=5) 的矩阵构建 按照规则,第一行从 a4 开始,第二行从 a5 开始,构建出的 5×5 行列式 Δ5 如下:
Δ5=⎣⎢⎢⎢⎢⎢⎡a4a5000a2a3a4a50a0a1a2a3a400a0a1a20000a0⎦⎥⎥⎥⎥⎥⎤
无论奇数阶还是偶数阶,行列式一定是 n×n 阶, 盯紧这两点:
- 左上角第一个元素:永远是 an−1(最高阶的下面那个系数)。
- 右下角最后一个元素:永远是 a0(常数项)。
接下来,通过解一个线性方程组来求出一组解向量中的 c0。方程组的标准形式为:
Δn×⎣⎢⎢⎢⎢⎢⎡cn−1……c1c0⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡gn−1……g1g0⎦⎥⎥⎥⎥⎥⎤
我们现在要解决的是方程 Δn⋅c=g 中的右侧项 g。这里的 c=[cn−1,cn−2,…,c0]T 是我们要求解的未知数,而 g 是由传递函数分子系数 bi 组成的常数列。假设分子是 B(s)=bn−1sn−1+⋯+b0,我们需要计算:
g(s)=B(s)⋅B(−s)
计算出的 g(s) 会是一个只有偶次方项的多项式(因为奇次方项在相乘后会互相抵消或合并成偶次方)。我们可以把它写成:
g(s)=gn−1s2(n−1)+gn−2s2(n−2)+⋯+g1s2+g0
注意: 这里的下标 gi 对应的是 s2i 项的前缀系数。
尽管该方程组会解出 cn−1 到 c0 多个值,但对于最终的积分结果,只需要提取最后一个解 c0。可以直接以下公式求解
c0=det(Δn)det(Δc0)
在数学和线性代数中,det 是 Determinant 的缩写,中文翻译为 “行列式” 运算 。
- Matlab/Octave:
det(Matrix)
- Python (NumPy):
np.linalg.det(Matrix)
- Excel:
MDETERM(单元格区域)
假设原始的 Hurwitz 矩阵 Δ3 是
Δ3=⎣⎢⎡a2a30a0a1a200a0⎦⎥⎤
如果你要解 c0,你需要构造分子矩阵 Δc0。注意看最后一列的变化:
Δc0=⎣⎢⎡a2a30a0a1a2g2g1g0⎦⎥⎤
- 分母 det(Δ3):计算左边那个 3×3 矩阵的值。
- 分子 det(Δc0):计算右边那个替换了最后一列后的 3×3 矩阵的值 。
无论系统阶数多高,一旦你解出了线性方程组,最终的噪声功率积分值 In 只取决于方程组解出的 c0 以及分母的最高阶系数 an。 代入以下终极计算公式:
In=∫0∞∣H(jω)∣2dω=2⋅an(−1)n−1⋅c0
符号调整避坑指南: 公式中的 (−1)n−1 是推导过程中的“神来之笔”,需要根据阶数 n 的奇偶性调整符号
该方法的数学雏形最早可追溯至 1947 年 出版的控制理论奠基之作:《Theory of Servomechanisms》 ,作者Hubert M. James, Nathaniel B. Nichols, 和 Ralph S. Phillips;该书属于著名的 MIT 辐射实验室系列(Radiation Laboratory Series) 第 25 卷;在二战后对火控系统和雷达自动追踪系统的研究中,作者们需要计算随机噪声通过线性系统后的总功率 。他们首次利用复变函数留数定理,将常用的低阶系统功率积分整理成了代数表格,这在老牌电机工程教材中常被称为 JNP 积分表法。
虽然 James 等人提出了查表法,但真正将其演变为一套通用的、无需因式分解的代数算法(即你现在学习的方法 A),则归功于 1957 年 出版的经典文献:《Analytical Design of Linear Feedback Controls》;作者是 G. C. Newton, Jr., L. A. Gould, 和 J. F. Kaiser;核心章节为该书的附录 E (Appendix E)。
Newton 等人发现,原本复杂的复平面围道积分可以转化为求解一组线性方程组 。他们巧妙地引入了用于判定系统稳定性的 Hurwitz 行列式(Hurwitz Determinant) 作为系数矩阵 。他们给出了从 n=1 到 n=10 的完整代数通解形式,使得工程师只需提取传递函数的系数即可直接套用公式,彻底避开了求极点的困境 。
来自于 BeiYangMan
《任意阶传递函数模平方的广义积分v2.docx》,BeiYangMan