我设计了一个一阶数字低通滤波器(butter),想看看它等效的连续域表现,于是用了d2c把它转回S域画伯德图。但结果很奇怪:高频衰减稳定在了-25dB不再下降,相位竟然从-90°硬生生回升到了0°。按道理来说,如果高频部分没有对应的零点,模拟巴特沃斯在高频本该衰减到负无穷,相位恒定-90°,这凭空多出来的“折返”是哪来的?
代码块
fs = 5000; % 采样频率
fc = 100; % 截止频率
[b,a] = butter(1, fc/(fs/2)); % 默认双线性变换设计数字滤波器
B = tf(b, a, 1/fs); % 建立离散传递函数
B_s = d2c(B); % 默认ZOH法转连续域(罪魁祸首)
P = bodeoptions; % 修正点:正确的函数名
P.FreqUnits = 'Hz'; % 设置横坐标单位为Hz
bode(B_s, P);
复制成功

问题出现在MATLAB的d2c函数上面,d2c 的 ZOH 不是“还原”,而是“拟合。
butter设计数字滤波器默认采用双线性变换。这个变换会把模拟域无穷远处的零点,压缩映射到数字域的奈奎斯特频率(z=−1)。所以,数字滤波器分子上天然就带着一个 零点。当我们把S域变换到Z域的时候,我们使用如下公式近似。
将模拟一阶低通 代入上式,必然得到:
即在 (奈奎斯特频率2500Hz 处)存在一个离散零点。现在,d2c 的 ZOH 逆变换公式对于一个真实的一阶连续系统
离散化后,其分子形式只能是:
注意:这里没有常数项。
d2c 拿着变换出来假的 (既有
又有
)去反推,发现用一阶连续系统根本无法在数学上产生这个结构。为了强行完成矩阵运算,它的算法被迫将系统升阶为 2 阶,并在连续域 s 平面引入了一个“负实数零点”。


正是这个强行配平出来的连续域有限零点,在高频区提供了 +90°的超前相位。此时相位的折返和频率的斜率拉平也就不难理解了。所以这个有限零点只存在于 d2c 的数学等价的连续模型中,物理世界绝对没有。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删