窗函数实现的FIR滤波器 代码
时间: 2023-10-26 14:56:06 浏览: 45
你可以使用窗函数来设计FIR滤波器。下面是一个使用矩形窗函数的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def fir_filter(input_signal, cutoff_freq, num_taps):
# 计算滤波器的理想频率响应
freq_response = np.zeros(num_taps)
freq_response[:int(cutoff_freq)] = 1
# 应用窗函数
window = np.ones(num_taps)
filtered_spectrum = freq_response * window
# 执行频域滤波
output_signal = np.convolve(input_signal, filtered_spectrum, mode='same')
return output_signal
# 生成输入信号
t = np.linspace(0, 1, 1000)
input_signal = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 20 * t)
# 设置滤波器参数
cutoff_freq = 15 # 截止频率
num_taps = 51 # 窗函数长度
# 执行滤波
output_signal = fir_filter(input_signal, cutoff_freq, num_taps)
# 绘制结果
plt.figure(figsize=(10, 4))
plt.plot(t, input_signal, label='Input Signal')
plt.plot(t, output_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.grid(True)
plt.show()
```
在这个例子中,我们使用了矩形窗函数作为窗口。你可以通过改变`cutoff_freq`和`num_taps`来调整滤波器的截止频率和窗口长度。另外,你也可以尝试使用其他类型的窗函数,如汉宁窗、汉明窗等来实现不同的滤波效果。