离散滤波器Bode图结果异常,请求排查问题原因
问题分析与解决方案
核心问题1:设计逻辑与代码实现不匹配
你描述的设计是“一个滤波器乘以0.5,另一个进行z^-1延迟”,但代码中实际实现的是:
- 对FIR1做z^-1延迟(
H_1 = FIR1 * tf(1, [1 0], Ts)) - 对FIR2做0.5倍缩放(
H_2 = 0.5 * FIR2)
如果你的设计意图是对FIR2延迟、对FIR1缩放,那么代码的操作对象完全搞反了,这会直接导致传递函数和Bode图与预期不符。
核心问题2:手动计算传递函数时的阶数对齐错误
两个FIR滤波器的抽头数不同,延迟操作后需要严格对齐z的负幂次:
- FIR1是6抽头,乘以z-1后,所有项延迟1个采样,传递函数的z0项为0,z-1到z-6项对应原FIR1的z0到z-5系数
- FIR2是7抽头,缩放后保留完整的z0到z-6项
相减时必须逐一对齐同幂次的系数:
H_diff(z) = (H1_z0 - H2_z0) + (H1_z-1 - H2_z-1)z^-1 + ... + (H1_z-6 - H2_z-6)z^-6
如果手动计算时忽略了H_1的z0项为0,或者没有对齐每个z-k的系数,就会得到错误的传递函数。
验证与调试方法
在Matlab中直接打印H_diff的分子系数,和手动计算结果对比:
disp('H_diff的分子系数(z^0到z^-6):'); disp(H_diff.num{1});
通过对比可以快速定位系数对齐的问题,也能验证设计逻辑是否和代码一致。
内容的提问来源于stack exchange,提问作者hajo
相关产品推荐
相关产品推荐

