1. 初识freqz:数字滤波器的"听诊器"
第一次接触数字滤波器设计时,我常常困惑:怎么知道设计的滤波器真的能满足要求?就像医生需要听诊器判断患者健康状况,freqz就是我们检验滤波器性能的"听诊器"。这个看似简单的函数,能直观展示滤波器在不同频率下的"反应灵敏度"。
举个生活化的例子,设计低通滤波器就像制作一个声音过滤器,希望保留朋友说话声(低频)而屏蔽空调噪音(高频)。用freqz绘制出的幅频响应曲线,能清晰看到哪些频率被保留、哪些被抑制。去年做语音降噪项目时,通过反复调整滤波器参数并用freqz验证,最终将背景噪音衰减了15dB,效果堪比专业降噪耳机。
freqz的核心功能是计算并可视化数字滤波器的复频率响应,输出包括:
- 幅频特性:展示信号各频率成分的增益变化
- 相频特性:反映各频率成分的相位偏移
- 群延迟:表征不同频率成分的时间延迟差异(需结合grpdelay函数)
matlab复制% 最简调用示例:查看FIR滤波器响应
b = fir1(30, 0.6); % 设计30阶低通FIR滤波器
freqz(b, 1); % 绘制频率响应
执行这段代码会弹出两个窗口:上部分显示幅度(dB)随归一化频率的变化,下部分显示相位响应。我第一次使用时,发现截止频率处的3dB衰减点与设计参数完全吻合,这种理论到实践的直观验证令人印象深刻。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 参数全解析:解锁freqz的六种武器
2.1 输入参数的七十二变
freqz最强大的地方在于其参数组合的灵活性。根据不同的设计阶段和需求,可以选择五种输入形式:
-
传统系数对(b,a)
适用于直接知道传递函数系数的情况。比如设计Butterworth滤波器时:matlab复制[b,a] = butter(4, 0.3); % 4阶,截止频率0.3π [h,w] = freqz(b,a); -
二阶节矩阵(sos)
数值稳定性更好的形式,特别适合高阶IIR滤波器。我曾用这个形式解决过8阶切比雪夫滤波器的数值溢出问题:matlab复制[z,p,k] = cheby1(8,1,0.4); [sos,g] = zp2sos(z,p,k);
