python设计一个FIR滤波器
时间: 2024-05-13 15:19:24 浏览: 11
以下是一个基本的 Python FIR 滤波器的实现示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设计一个低通滤波器
def lowpass_fir_filter(num_taps, cutoff_hz, sampling_rate_hz):
# 计算归一化截止频率
cutoff_norm = cutoff_hz / (sampling_rate_hz / 2)
# 计算滤波器系数
coefficients = np.zeros(num_taps)
for i in range(num_taps):
if i == num_taps // 2:
coefficients[i] = cutoff_norm
else:
coefficients[i] = np.sin(2 * np.pi * cutoff_norm * (i - num_taps // 2)) / (np.pi * (i - num_taps // 2))
# 返回滤波器系数
return coefficients
# 测试滤波器响应
num_taps = 101
cutoff_hz = 1000
sampling_rate_hz = 8000
filter_coeffs = lowpass_fir_filter(num_taps, cutoff_hz, sampling_rate_hz)
# 绘制滤波器系数
plt.figure()
plt.stem(filter_coeffs)
plt.title('Filter Coefficients')
plt.xlabel('Tap')
plt.ylabel('Coefficient')
plt.grid(True)
# 绘制滤波器频率响应
w, h = np.freqz(filter_coeffs)
f = w * sampling_rate_hz / (2 * np.pi)
plt.figure()
plt.plot(f, np.abs(h))
plt.title('Frequency Response')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.grid(True)
plt.show()
```
在这个示例中,我们定义了一个名为 `lowpass_fir_filter` 的函数,该函数使用给定的采样率、截止频率和滤波器长度计算 FIR 滤波器系数。我们还使用 `num_taps` 参数指定滤波器长度,使用 `cutoff_hz` 参数指定滤波器的截止频率,使用 `sampling_rate_hz` 参数指定采样率。
在测试滤波器响应时,我们使用 `filter_coeffs` 变量获取滤波器系数,并将其绘制在图表中。我们还使用 `np.freqz` 函数计算滤波器的频率响应,并将其绘制在另一个图表中。
运行代码后,您应该能够看到滤波器系数和频率响应的图表,以及 FIR 滤波器的基本实现。