用python设计一个截止频率150hz的三阶fir滤波器
时间: 2023-05-23 21:04:37 浏览: 256
首先,需要导入必要的库:
```
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
```
然后,定义截止频率和采样频率:
```
fc = 150 # 截止频率为150hz
fs = 1000 # 采样频率为1000hz
```
接下来,使用`signal.firwin()`函数计算出三阶FIR滤波器的系数值:
```
numtaps = 3 # 滤波器阶数为3
coeff = signal.firwin(numtaps, fc/(fs/2), pass_zero='lowpass')
```
其中,`numtaps`表示滤波器的阶数,`fc/(fs/2)`表示归一化的截止频率,`'lowpass'`表示低通滤波器。
最后,使用`signal.freqz()`函数画出滤波器的频率响应:
```
w, h = signal.freqz(coeff)
fig, ax = plt.subplots()
ax.plot(w/np.pi*(fs/2), 20*np.log10(abs(h)))
ax.set(xlabel='Frequency (Hz)', ylabel='Magnitude (dB)',
title='Frequency Response')
ax.axvline(x=fc, color='red', linestyle='--')
ax.grid()
plt.show()
```
完整代码如下:
```
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
fc = 150 # 截止频率为150hz
fs = 1000 # 采样频率为1000hz
numtaps = 3 # 滤波器阶数为3
coeff = signal.firwin(numtaps, fc/(fs/2), pass_zero='lowpass')
w, h = signal.freqz(coeff)
fig, ax = plt.subplots()
ax.plot(w/np.pi*(fs/2), 20*np.log10(abs(h)))
ax.set(xlabel='Frequency (Hz)', ylabel='Magnitude (dB)',
title='Frequency Response')
ax.axvline(x=fc, color='red', linestyle='--')
ax.grid()
plt.show()
```