【数字信号处理含matlab代码】第八篇:窗函数法设计前置——理想低通冲激响应
第八篇窗函数法设计前置——理想低通冲激响应在前七篇中我们深入探讨了滤波器分析与结构转换。但从现在起我们将进入滤波器设计的领域。工程中最常用的 FIR 设计方法之一是窗函数法——它从一个理想的频率特性出发通过逆傅里叶变换得到无限长的冲激响应再用窗函数截断。而ideal_lp.m正是计算理想低通滤波器冲激响应的核心工具。本篇将详细推导理想低通的数学表达式解析代码中的eps防除零技巧并演示如何与窗函数结合快速设计一个实用的 FIR 低通滤波器。1. 理想低通滤波器的频域定义一个理想低通滤波器ILPF的频率响应为H d ( e j ω ) { 1 , ∣ ω ∣ ≤ ω c 0 , ω c ∣ ω ∣ ≤ π H_d(e^{j\omega}) \begin{cases} 1, |\omega| \le \omega_c \\ 0, \omega_c |\omega| \le \pi \end{cases}Hd​(ejω){1,0,​∣ω∣≤ωc​ωc​∣ω∣≤π​其中ω c \omega_cωc​是截止频率弧度/样本。其对应的单位冲激响应h d ( n ) h_d(n)hd​(n)通过对H d ( e j ω ) H_d(e^{j\omega})Hd​(ejω)做逆离散时间傅里叶变换IDTFT得到h d ( n ) 1 2 π ∫ − π π H d ( e j ω ) e j ω n d ω 1 2 π ∫ − ω c ω c e j ω n d ω h_d(n) \frac{1}{2\pi} \int_{-\pi}^{\pi} H_d(e^{j\omega}) e^{j\omega n} d\omega \frac{1}{2\pi} \int_{-\omega_c}^{\omega_c} e^{j\omega n} d\omegahd​(n)2π1​∫−ππ​Hd​(ejω)ejωndω2π1​∫−ωc​ωc​​ejωndω直接积分可得h d ( n ) sin ⁡ ( ω c n ) π n , − ∞ n ∞ h_d(n) \frac{\sin(\omega_c n)}{\pi n}, \quad -\infty n \inftyhd​(n)πnsin(ωc​n)​,−∞n∞当n 0 n 0n0时利用极限lim ⁡ n → 0 sin ⁡ ( ω c n ) π n ω c π \lim_{n\to0} \frac{\sin(\omega_c n)}{\pi n} \frac{\omega_c}{\pi}n→0lim​πnsin(ωc​n)​πωc​​。因此理想低通冲激响应是一个无限长、非因果的序列以n 0 n0n0为中心呈偶对称。这正是窗函数法的出发点用有限长的窗函数截断这个无限序列并移位使其因果化。2.ideal_lp.m代码精解该函数接受截止频率wc和滤波器长度M通常为奇数返回长度为M的理想低通冲激响应hd。functionhdideal_lp(wc,M)% Ideal Lowpass filter computation% 输入wc - 截止频率弧度/样本% M - 滤波器长度样本数% 输出hd - 理想冲激响应序列alpha(M-1)/2;n[0:(M-1)];mn-alphaeps;hdsin(wc*m)./(pi*m);逐行解析alpha (M-1)/2群延迟即对称中心的位置。对于长度为M的因果滤波器冲激响应必须移位alpha个样本才能变成因果。n [0:(M-1)]生成索引向量 0 到 M-1。m n - alpha eps这是最关键的一步。m实际上代表n − α n - \alphan−α即移位后的自变量。加上epsMATLAB 的浮点相对精度约 2.22e-16是为了避免除零当n alpha时m恰好为 0若不处理sin(wc*m)/(pi*m)将产生0/0的 NaN。加上微小的eps后m不再精确为零而是eps此时sin(wc*eps)/(pi*eps)≈wc/pi得到正确的极限值。这个技巧非常优雅无需显式的条件判断。hd sin(wc * m) ./(pi * m)直接计算理想冲激响应。注意使用./进行逐元素除法。注意得到的hd是已移位的因果序列其最大值在n alpha处即hd(alpha1)且关于该点偶对称。这个序列可以直接作为窗函数法设计的理想原型。3. 与窗函数法结合——一个完整的设计示例假设我们要设计一个 31 阶M31低通 FIR 滤波器截止频率0.4 π 0.4\pi0.4π使用汉明窗。wc0.4*pi;% 截止频率M31;% 滤波器长度hdideal_lp(wc,M);% 理想冲激响应winhamming(M);% 汉明窗行向量hhd.*win;% 加窗截断得到实际滤波器系数% 绘制幅度响应[Hr,w,a,L]hr_type1(h);% 因为 M 为奇数且偶对称plot(w/pi,20*log10(abs(Hr)/max(abs(Hr))));grid;xlabel(\omega/\pi);ylabel(归一化幅度 (dB));title(31阶汉明窗设计低通滤波器);你会得到一个通带平坦、阻带衰减约 50 dB 的低通滤波器。改变窗函数如汉宁窗、布莱克曼窗可以调整阻带衰减和过渡带宽度。4. 工程注意事项M的选择通常取奇数以保证 Type-1 对称性这样可设计任意类型的滤波器包括高通。若取偶数将得到 Type-2其在高频处有固有零点无法实现高通。截止频率wc必须满足0 w c π 0 wc \pi0wcπ。若wc pi则退化为全通但实际很少使用。吉布斯现象直接截断会在通带和阻带交界处产生振荡吉布斯现象窗函数的作用就是平滑截断边缘抑制振荡以牺牲过渡带宽度换取更大的阻带衰减。归一化增益加窗后通带增益会略有下降因为窗函数在中心处不为 1。通常无需额外补偿因为freqz_m会归一化显示。5.ideal_lp的通用性虽然该函数名为ideal_lp理想低通但它实际上可以生成任意截止频率的低通原型。若需要设计高通、带通或带阻可通过频率变换如用wc和pi的关系组合多个低通原型但通常直接用fir1等高级函数更方便。ideal_lp更多用于教学和理解窗函数法的底层机理。6. 本讲小结我们推导了理想低通滤波器的冲激响应公式理解了其无限长和非因果的特性。解析了ideal_lp.m中利用eps避免除零的优雅实现。通过一个完整的设计示例演示了从理想原型到实际 FIR 滤波器的完整流程。讨论了窗函数法中的设计权衡过渡带 vs 阻带衰减。掌握ideal_lp后您就已经掌握了 FIR 滤波器设计的核心基础。后续我们将转向更复杂的语音信号预处理和端点检测但 FIR 设计始终是信号处理的重要基石。所有代码均已打包点击下方链接免费获取下载链接下篇预告语音信号预处理——多项式趋势项消除。我们将走进polydetrend.m学习如何用最小二乘拟合去除语音中的基线漂移为后续特征提取如 LPC、MFCC提供干净信号。敬请期待