[信号与系统]FIR滤波器的几种常见窗口法计算方法

FIR滤波器的几种常见窗口法计算方法

1. 矩形窗口(Rectangular Window)

矩形窗口直接截断理想脉冲响应,无额外的平滑效果。它简单但会引入较大的旁瓣效应。

w n = 1 , 0 ≤ n ≤ N − 1 wn = 1, \quad 0 \le n \le N-1 wn=1,0≤n≤N−1

2. 汉宁窗口(Hanning Window)

汉宁窗口使用平滑的余弦函数,有效减少旁瓣效应。

w n = 0.5 ( 1 − cos ⁡ ( 2 π n N − 1 ) ) , 0 ≤ n ≤ N − 1 wn = 0.5 \left(1 - \cos\left(\frac{2\pi n}{N-1}\right)\right), \quad 0 \le n \le N-1 wn=0.5(1−cos(N−12πn)),0≤n≤N−1

3. 汉明窗口(Hamming Window)

汉明窗口是汉宁窗口的变种,进一步减少旁瓣效应,适用于大多数实际应用。

w n = 0.54 − 0.46 cos ⁡ ( 2 π n N − 1 ) , 0 ≤ n ≤ N − 1 wn = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right), \quad 0 \le n \le N-1 wn=0.54−0.46cos(N−12πn),0≤n≤N−1

4. 布莱克曼窗口(Blackman Window)

布莱克曼窗口具有更好的旁瓣抑制效果,适用于需要高频率分辨率的情况。

w n = 0.42 − 0.5 cos ⁡ ( 2 π n N − 1 ) + 0.08 cos ⁡ ( 4 π n N − 1 ) , 0 ≤ n ≤ N − 1 wn = 0.42 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right) + 0.08 \cos\left(\frac{4\pi n}{N-1}\right), \quad 0 \le n \le N-1 wn=0.42−0.5cos(N−12πn)+0.08cos(N−14πn),0≤n≤N−1

5. 凯撒窗口(Kaiser Window)

凯撒窗口具有可调参数 β \beta β,通过调整 β \beta β 可以在主瓣宽度和旁瓣抑制之间进行权衡。

w n = I 0 ( π β 1 − ( 2 n N − 1 − 1 ) 2 ) I 0 ( π β ) , 0 ≤ n ≤ N − 1 wn = \frac{I_0\left(\pi \beta \sqrt{1 - \left(\frac{2n}{N-1} - 1\right)^2}\right)}{I_0(\pi \beta)}, \quad 0 \le n \le N-1 wn=I0(πβ)I0(πβ1−(N−12n−1)2 ),0≤n≤N−1

其中 I 0 I_0 I0 是零阶修正贝塞尔函数, β \beta β 为窗口的形状参数。

应用窗口函数设计FIR滤波器的步骤

  1. 定义理想脉冲响应

假设我们设计一个理想的低通滤波器,其理想的脉冲响应为:

h d n = sin ⁡ ( 2 π f c ( n − N − 1 2 ) ) π ( n − N − 1 2 ) , n ≠ N − 1 2 h_dn = \frac{\sin\left(2\pi f_c \left(n - \frac{N-1}{2}\right)\right)}{\pi \left(n - \frac{N-1}{2}\right)}, \quad n \neq \frac{N-1}{2} hdn=π(n−2N−1)sin(2πfc(n−2N−1)),n=2N−1

当 n = N − 1 2 n = \frac{N-1}{2} n=2N−1 时,

h d N − 1 2 = 2 f c h_d\left\\frac{N-1}{2}\\right = 2 f_c hd2N−1=2fc

  1. 选择窗口函数

选择适当的窗口函数 w n wn wn。

  1. 应用窗口函数

将窗口函数应用到理想的脉冲响应上:

h n = h d n ⋅ w n , 0 ≤ n ≤ N − 1 hn = h_dn \cdot wn, \quad 0 \le n \le N-1 hn=hdn⋅wn,0≤n≤N−1

示例

假设我们使用汉明窗口设计一个低通FIR滤波器:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 定义滤波器参数
N = 51  # 滤波器长度
fc = 0.25  # 归一化截止频率(f_c = f_c_actual / f_s)

# 理想脉冲响应
n = np.arange(N)
hd = np.sinc(2 * fc * (n - (N - 1) / 2))

# 汉明窗口
w = 0.54 - 0.46 * np.cos(2 * np.pi * n / (N - 1))

# 应用窗口函数
h = hd * w

# 频率响应
H = np.fft.fft(h, 1024)
H = np.fft.fftshift(H)  # 移动零频到中心
H_dB = 20 * np.log10(np.abs(H))

# 绘制时域和频域响应
plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)
plt.stem(n, h, use_line_collection=True)
plt.title('时域脉冲响应')
plt.xlabel('样本点')
plt.ylabel('幅度')

plt.subplot(2, 1, 2)
f = np.linspace(-0.5, 0.5, len(H))
plt.plot(f, H_dB)
plt.title('频域响应')
plt.xlabel('归一化频率')
plt.ylabel('幅度 (dB)')
plt.grid()
plt.show()
相关推荐
阿尔泰科技官方14 小时前
多机箱异地采集—如何实现数据对齐?阿尔泰科技授时同步实战方案!
科技·数据采集·信号处理·工业自动化·仪器仪表·工控机·机箱
这张生成的图像能检测吗1 天前
(论文速读)ClassBD:让盲反卷积与故障分类器协同学习的抗噪轴承诊断方法
分类·信号处理·故障诊断·去噪
福芯微电子有限公司nfc5 天前
国产收音芯片 FSV4755:多波段调谐与高集成设计,赋能多种音频终端
网络协议·网络安全·音视频·信息与通信·信号处理
搞科研的小刘选手6 天前
【见刊检索快 | 重庆线上线下同步】第五届信号处理、计算机网络与通信国际学术会议(SPCNC 2026)
计算机网络·信号处理·通信·学术会议·会议推荐·重庆
星夜离尘567 天前
MATLAB 采样混叠实验 20 Hz 和 80 Hz 为什么会得到相同数据
matlab·数据采集·信号处理·采样定理·混叠
lisw057 天前
当生物阻抗遇上生物力学:EIM技术实现肌肉状态精准感知
驱动开发·信号处理
搞科研的小刘选手8 天前
【IEEE出版 | 西安石油大学+中海油服主办 | 北京举办】第八届智能控制、测量与信号处理国际学术会议(ICMSP 2026)
信号处理·测量·智能控制·学术会议·北京·会议推荐
会议咨询9 天前
2026年智能检测、信号处理与大数据国际会议(ISPBD 2026)
大数据·信号处理·智能检测
慧都小项9 天前
SimPCB Lite 1.1:过孔也能做频域分析了
信号处理·pcb工艺·过孔·simpcb lite·s 参数
YFJ_mily9 天前
11.10最终投稿截止|SPIC2026第四届信号处理与智能计算|连续两届EI&Scopus双检索 IEEE官方收录
人工智能·信号处理·智能计算·rdlink研发家·往届会议历史·沈阳理工大学主办·广东工业大学主办