python 写一个fir低通滤波器
时间: 2023-07-01 15:19:53 浏览: 237
好的,以下是一个用 Python 编写的 FIR 低通滤波器的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 设计 FIR 低通滤波器
def fir_filter(num_taps, cutoff_freq, fs):
nyquist_freq = 0.5 * fs
normalized_cutoff_freq = cutoff_freq / nyquist_freq
h = np.zeros(num_taps)
for i in range(num_taps):
if i == (num_taps - 1) // 2:
h[i] = 2 * normalized_cutoff_freq
else:
h[i] = np.sin(2 * np.pi * normalized_cutoff_freq * (i - (num_taps - 1) / 2)) / (np.pi * (i - (num_taps - 1) / 2))
h[i] *= 0.54 - 0.46 * np.cos(2 * np.pi * i / (num_taps - 1))
return h
# 生成信号
fs = 1000
t = np.arange(0, 1, 1 / fs)
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 150 * t)
# 设计 FIR 低通滤波器,截止频率为 80 Hz
num_taps = 101
cutoff_freq = 80
h = fir_filter(num_taps, cutoff_freq, fs)
# 进行滤波
y = np.convolve(x, h, mode='same')
# 绘制结果
plt.figure()
plt.plot(t, x, label='原始信号')
plt.plot(t, y, label='滤波后信号')
plt.xlabel('时间 (秒)')
plt.ylabel('幅值')
plt.legend()
plt.show()
```
这个代码使用了 `numpy` 和 `matplotlib` 这两个库,先定义了一个 `fir_filter` 的函数,用于生成 FIR 低通滤波器的系数。然后定义了一个信号,对这个信号进行滤波,最后将结果绘制出来。
阅读全文