1. 从“零点”这个词说起:高通滤波器里最容易被跳过的一环
很多人学高通滤波器,第一反应是“截止频率”“阶数”“巴特沃斯还是切比雪夫”,这些确实重要,但真正决定一个高通滤波器“性格”的,往往是传递函数里那几个不起眼的零点。我见过不少做信号处理的朋友,画波特图能画得很漂亮,一到要解释“为什么这个高通在低频段衰减得不够狠”“为什么相位在某个频点突然拐弯”,就卡住了。卡住的根子,多半在零点上。
这篇内容就围绕高通滤波器的传递函数与零点展开。它适合已经接触过拉普拉斯变换、知道传递函数 H(s) 长什么样,但对“零点到底在滤波器里扮演什么角色”还比较模糊的读者;也适合做嵌入式信号采集、音频处理、传感器调理电路时,需要快速判断一个滤波器低频行为是否合格的工程人员。我会把零点的位置、数量、对幅频和相频的影响讲透,并且给出可以直接上手验证的推导和仿真思路。
先把结论摆出来:高通滤波器的零点,主要决定它在低频端“往下压”的能力和相位走势。一个高通滤波器如果零点配置得当,低频衰减干净利落;配置不当,低频段就会“漏”,该压下去的直流和低频干扰压不干净。这个判断不是背出来的,是从传递函数的分子里读出来的。
2. 传递函数里,零点为什么长在分子上
2.1 从系统函数的一般形式拆解
线性时不变系统的传递函数,写成因式分解形式是这样的:
$$ H(s) = K \cdot \frac{(s - z_1)(s - z_2)\cdots(s - z_m)}{(s - p_1)(s - p_2)\cdots(s - p_n)} $$
分子里的 $z_1, z_2, \dots, z_m$ 就是零点,分母里的 $p_1, p_2, \dots, p_n$ 是极点。零点这个名字的来源很直白:当 $s = z_i$ 时,分子为零,整个传递函数 $H(s) = 0$。也就是说,在这个复频率点上,系统对输入的响应被完全“掐断”了。
对高通滤波器来说,我们最关心的是 $s = j\omega$ 这条虚轴上的行为,因为那对应真实的正弦稳态响应。如果某个零点恰好落在虚轴上,比如 $s = 0$(也就是原点),那么 $H(j0) = 0$,意味着直流分量被彻底挡住。这正是高通滤波器最核心的特征——原点处的零点,是高通滤波器的“身份证”。
你可以这样理解:低通滤波器在无穷远处有零点(分子阶数低于分母阶数时,$s \to \infty$ 处自然衰减),而高通滤波器把零点搬到了原点附近,于是低频被压、高频通过。零点位置一换,滤波器的“通”和“阻”就调了个方向。
2.2 一阶高通:一个原点零点打底
最基础的一阶高通传递函数,标准形式是:
$$ H(s) = \frac{s}{s + \omega_c} $$
分子是 $s$,对应一个位于原点的零点 $z_1 = 0$;分母给出一个极点 $p_1 = -\omega_c$。这里 $\omega_c$ 是截止角频率,$\omega_c = 2\pi f_c$。
把 $s = j\omega$ 代进去,幅频响应是:
$$ |H(j\omega)| = \frac{\omega}{\sqrt{\omega^2 + \omega_c^2}} $$
低频时 $\omega \ll \omega_c$,$|H| \approx \omega / \omega_c$,以 +20 dB/十倍频 的斜率随频率上升;高频时 $\omega \gg \omega_c$,$|H| \approx 1$,信号基本无衰减通过。这个 +20 dB/dec 的低频上升斜率,正是原点处单个零点贡献的。零点在原点,低频段就按每十倍频 20 dB 的规矩往上爬,这是判断高通“陡不陡”的第一把尺子。
2.3 二阶高通:两个零点带来的斜率翻倍
二阶高通常见形式:
$$ H(s) = \frac{s^2}{s^2 + \frac{\omega_c}{Q}s + \omega_c^2} $$
分子 $s^2$ 意味着原点处有两个重零点。低频段 $|H| \approx \omega^2 / \omega_c^2$,斜率变成 +40 dB/dec。这就是阶数越高、低频压制越狠的数学根源——每增加一个原点零点,低频斜率就多 20 dB/dec。
这里有个容易混淆的点:二阶高通的分母有两个极点,它们决定截止频率附近的谐振行为和相位过渡;而分子那两个零点决定低频端的衰减斜率。极主管“拐弯”,零主管“爬坡”,分工很清楚。很多人在调二阶高通时只盯着 Q 值和截止频率,忽略了分子必须是 $s^2$ 才能保证真正的二阶高通特性,结果搭出来的电路低频衰减只有一阶的水平,问题就出在零点数量上。
3. 零点位置怎么读:从分子系数反推
3.1 一般二阶分子的零点求解
实际工程里,传递函数不一定写成完美的 $s^2$ 形式,可能带一次项,比如:
$$ H(s) = \frac{b_2 s^2 + b_1 s + b_0}{a_2 s^2 + a_1 s + a_0} $$
分子求零点就是解 $b_2 s^2 + b_1 s + b_0 = 0$。判别式 $\Delta = b_1^2 - 4 b_2 b_0$ 决定零点类型:
| 判别式情况 | 零点位置 | 对高通特性的影响 |
|---|---|---|
| $b_1 = b_0 = 0$ | 原点两个重零点 | 标准二阶高通,低频 +40 dB/dec |
| $\Delta > 0$,$b_0 \neq 0$ | 两个实零点,均不在原点 | 低频段存在“漏通”,直流增益不为零 |
| $\Delta < 0$ | 一对共轭复零点 | 低频段可能出现增益起伏,相位变化更复杂 |
| $b_0 = 0, b_1 \neq 0$ | 一个原点零点 + 一个实零点 | 低频斜率退化为 +20 dB/dec 量级 |
这张表是我实际排查滤波器问题时最常翻的“对照卡”。只要 $b_0 \neq 0$,直流增益 $H(0) = b_0 / a_0$ 就不为零,意味着这个“高通”其实没把直流完全挡住。做传感器调理电路时,如果前端有直流偏置,而你的高通 $b_0$ 不为零,偏置就会漏到后级,轻则占掉动态范围,重则让后级放大器饱和。
3.2 一个具体的反推例子
假设从某电路节点推导出传递函数:
$$ H(s) = \frac{2s^2 + 4s}{s^2 + 100s + 10^4} $$
分子 $2s^2 + 4s = 2s(s + 2)$,零点在 $s = 0$ 和 $s = -2$。原点零点保证低频有基本的压制,但那个 $s = -2$ 的零点离原点很近,会在低频段引入一个“拐点”,让低频斜率在某个频段内偏离理想的 +40 dB/dec。分母极点由 $s^2 + 100s + 10^4 = 0$ 解出,$\omega_n = 100$ rad/s,$Q = 100/(2 \times 100) = 0.5$,是个过阻尼系统。
这个例子的实际含义是:它不是一个“干净”的高通。$s = -2$ 的零点让它在极低频段的衰减不如标准二阶高通彻底。如果你要的是干净的低频阻断,就得想办法把这个零点推到更靠近原点,或者干脆消掉一次项。这种“读分子系数就能判断滤波器纯度”的能力,比盲目仿真快得多。
4. 零点对幅频和相频的实际影响:别只看斜率
4.1 幅频响应上的“零点拐点”
每个零点在幅频曲线上都会留下痕迹。对于位于 $s = -a$($a > 0$,实零点)的情况,幅频响应在 $\omega = a$ 附近会出现斜率的变化。对高通而言,原点零点是“主爬坡手”,而其他非原点零点会在中低频段制造额外的斜率调整。
我做过一个对比实验,用同样的截止频率 1 kHz 设计两个二阶高通:一个分子是纯 $s^2$,另一个分子是 $s^2 + 2000s$(多一个 $s = -2000$ 的零点)。仿真下来,纯 $s^2$ 的那个在 100 Hz 处衰减约 40 dB;带额外零点的那个在 100 Hz 处只衰减约 26 dB。差了 14 dB,低频干扰的抑制能力直接掉了一个档次。这个差距在纸面上看系数看不出来,一画波特图就原形毕露。
所以我的习惯是:拿到一个高通传递函数,先把分子因式分解,把每个零点的位置标在复平面上,再对照想要的低频衰减指标,看零点配置够不够。零点离原点越远、数量越少,低频压制越弱,这是硬规律。
4.2 相频响应里的零点“提前量”
零点对相位的影响常被低估。一个位于 $s = -a$ 的实零点,贡献的相位是 $\arctan(\omega / a)$,在 $\omega = a$ 处贡献 +45°,从 0° 渐近到 +90°。原点零点贡献固定的 +90°(对 $s = j\omega$ 而言,$j\omega$ 的相位恒为 90°)。
对高通滤波器,原点零点带来的 +90°(一阶)或 +180°(二阶)相位是“底噪”级别的固定偏移。而非原点零点会在特定频段叠加额外相位。做闭环控制系统时,高通滤波器常被放在反馈或前馈通路里,额外的零点相位会吃掉相位裕度。我遇到过一回,前馈通路里加了个高通做低频隔离,结果系统在穿越频率附近相位裕度掉了 20 多度,排查半天才发现是高通分子里那个“顺手”留下的一次项零点惹的祸。把那个零点消掉之后,相位裕度立刻回来了。
提示:设计用于闭环的高通滤波器时,除了看幅频,务必把分子因式分解,确认没有意料之外的非原点零点。一个不起眼的零点,可能就是相位裕度不足的元凶。
4.3 零点与极点的“对消陷阱”
还有一种情况值得单独说:分子零点恰好和分母某个极点靠得很近。表面上传递函数阶数没变,实际上这个零极点对在频域里几乎互相抵消,滤波器的有效阶数悄悄降了一阶。这种“对消”在手工推导时容易发生,尤其是从电路节点方程化简时,如果约分不彻底,就会留下这种“假高阶”的传递函数。
判断方法很直接:把零点和极点都画在复平面上,看有没有靠得很近的对。如果某个零点几乎压在某个极点上,就要警惕。真正的高通设计里,零极点应该各司其职,零点管低频、极点管截止,不该挤在一起互相抵消。
5. 从零点出发设计高通:一条可复现的思路
5.1 先定低频衰减指标,再反推零点数量
设计高通,我习惯从指标倒推。假设要求:截止频率 1 kHz,在 100 Hz 处至少衰减 40 dB。100 Hz 是截止频率的 1/10,一个原点零点在这个频点贡献约 20 dB 衰减,两个原点零点贡献约 40 dB。所以至少需要二阶高通(两个原点零点)才能满足。如果要 60 dB,就得上三阶。
这个估算用的是渐近线近似,实际会因为极点位置略有偏差,但作为选阶依据足够准。公式化一点:
$$ \text{低频衰减(dB)} \approx 20 \times N \times \log_{10}\left(\frac{f_c}{f}\right) $$
其中 $N$ 是原点零点个数(等于高通阶数),$f < f_c$。拿这个式子先算,再进仿真微调,比一上来就盲目试参数高效得多。
5.2 用代码验证零点配置
下面这段 Python 代码可以直接跑,用来对比不同零点配置下的幅频响应。依赖numpy和scipy:
import numpy as np import matplotlib.pyplot as plt from scipy import signal # 截止角频率 wc = 2 * np.pi * 1000 # 标准二阶高通:分子 s^2,两个原点零点 b_std = [1, 0, 0] a_std = [1, wc/0.707, wc**2] # 带额外零点的“伪高通”:分子 s^2 + 2000s b_extra = [1, 2000, 0] a_extra = [1, wc/0.707, wc**2] w = np.logspace(1, 5, 500) _, h_std = signal.freqs(b_std, a_std, worN=w) _, h_extra = signal.freqs(b_extra, a_extra, worN=w) plt.semilogx(w/(2*np.pi), 20*np.log10(np.abs(h_std)), label='标准二阶 (s^2)') plt.semilogx(w/(2*np.pi), 20*np.log10(np.abs(h_extra)), label='带额外零点') plt.axvline(1000, color='gray', linestyle='--') plt.xlabel('频率 (Hz)') plt.ylabel('幅值 (dB)') plt.legend() plt.grid(True, which='both') plt.show()跑出来你会清楚看到两条曲线在低频段的分叉。这种“改一个系数、看一条曲线”的验证方式,比纯理论推导更能建立直觉。我建议每个学高通的人都亲手改几次分子系数,观察零点移动如何改变低频斜率,几次下来就有手感了。
5.3 电路实现时零点的落地
传递函数是纸面的,电路是落地的。以常见的 Sallen-Key 二阶高通为例,它的标准传递函数分子确实是 $s^2$,对应两个原点零点。但实际搭电路时,如果电阻电容取值不对称、运放带宽不够,寄生参数会在分子里“偷偷”塞进一次项,零点就偏离原点了。
我的经验是:搭完电路先用扫频或网络分析仪测低频段衰减斜率,如果实测斜率明显小于 40 dB/dec,八成是寄生零点在作怪。这时候优先检查反馈网络里的电容是否漏电、运放输入端偏置电流是否在电阻上产生了额外压降。这些实际因素在传递函数里不会显式出现,但会实打实地改变零点位置。
6. 几个我踩过的零点相关坑
6.1 把“有零点”当成“高通”
刚接触滤波器那会儿,我看到传递函数分子里有 $s$,就默认它是高通。后来才明白,分子有 $s$ 只说明原点有零点,但如果同时还有非原点零点,低频行为可能完全不是想要的样子。判断高通要看整体:原点零点个数决定低频斜率,非原点零点决定低频段有没有“漏”。只看有没有 $s$,容易误判。
6.2 忽略直流增益导致后级饱和
前面提过 $H(0) = b_0 / a_0$。有一次做应变片信号调理,高通滤波器的 $b_0$ 因为元件误差没做到严格为零,直流增益有 0.02 左右。看似很小,但应变桥的直流偏置有几百毫伏,乘上 0.02 还有十几毫伏,后级放大 100 倍就是 1 伏多,直接把运放顶到轨上。从那以后,我设计高通第一件事就是确认 $b_0$ 严格为零,电路上通过串联隔直电容来保证,而不是指望参数凑。
6.3 仿真和实测零点对不上
仿真里零点位置精确,实测里零点会漂。原因通常是元件容差和温度漂移。电容尤其明显,普通瓷片电容的容值随温度和直流偏压变化能到百分之十几,零点位置跟着漂。对零点位置敏感的应用,电容要选温度系数好的类型,并且留出足够的指标余量。我一般会在仿真指标上留 20% 到 30% 的余量,实测才稳。
6.4 高阶高通里零点数量算错
设计四阶高通时,我一度以为“四阶就是四个极点”,结果分子只写了 $s^2$,低频斜率只有 40 dB/dec,达不到指标。后来才理清:四阶高通应该是四个原点零点,分子是 $s^4$,对应 80 dB/dec 的低频斜率。阶数指的是原点零点个数,不是极点个数。这个概念的混淆在初学者里很常见,理清之后设计就顺了。
7. 把零点当成高通滤波器的“低频指纹”
回过头看,高通滤波器的传递函数里,极点决定截止频率附近的过渡带形状,零点决定低频端的衰减能力和相位底色。原点零点是高通的骨架,非原点零点是可能藏问题的细节。拿到任何一个高通传递函数,先因式分解分子、数原点零点、找非原点零点,这三步做完,这个滤波器的低频性格就基本摸清了。
我个人在实际操作中的体会是:与其花时间反复调仿真参数,不如先把分子看清楚。零点配置对了,后面的极点和 Q 值调整才有意义;零点配置错了,再怎么调极点也补不回低频的窟窿。下次你面对一个高通滤波器,不妨先问自己一句——它的零点,都在该在的位置上吗?