fir数字滤波器窗口函数
时间: 2023-12-13 20:04:37 浏览: 35
FIR数字滤波器是一种常见的数字滤波器,窗口函数是一种常用的设计FIR数字滤波器的方法。窗口函数可以将理想低通滤波器的频率响应变换为有限长度的实际滤波器的频率响应。常用的窗口函数有矩形窗、汉宁窗、海明窗等。
窗口函数法设计FIR数字滤波器的原理和方法如下:
1. 确定滤波器的阶数N和截止频率fc。
2. 根据截止频率fc和采样频率fs计算出归一化截止频率Wc=2πfc/fs。
3. 根据窗口函数的类型选择合适的窗口函数,并计算出窗口函数的系数。
4. 根据窗口函数的系数和滤波器的阶数N计算出滤波器的系数。
5. 对滤波器的系数进行归一化处理,使得滤波器的幅频响应在截止频率处为-3dB。
线性相位FIR数字滤波器具有相位响应为线性函数的特性,可以保持信号的相位不变。窗口长度对滤波器特性的影响主要表现在窗口长度越长,滤波器的频率响应越接近于理想低通滤波器,但是窗口长度过长会导致滤波器的延迟时间增加。
下面是一个使用汉宁窗设计FIR数字滤波器的Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设计FIR数字滤波器
N = 51 # 滤波器阶数
fc = 1000 # 截止频率
fs = 8000 # 采样频率
Wc = 2 * np.pi * fc / fs # 归一化截止频率
h = np.zeros(N)
for n in range(N):
if n == (N-1)/2:
h[n] = Wc / np.pi
else:
h[n] = np.sin(Wc*(n-(N-1)/2)) / (np.pi*(n-(N-1)/2))
h[n] = h[n] * 0.5 * (1 - np.cos(2*np.pi*n/(N-1))) # 汉宁窗
# 绘制滤波器的幅频响应
w, H = signal.freqz(h)
plt.plot(w/np.pi*fs/2, 20*np.log10(np.abs(H)))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude (dB)')
plt.title('Frequency Response')
plt.show()
```