用python编写一段程序设计一个截止频率为 50的二阶巴特沃斯低通滤波器,中心化显示该滤波器,
时间: 2023-05-19 12:06:35 浏览: 200
以下是用 Python 编写的设计一个截止频率为 50 的二阶巴特沃斯低通滤波器的代码:
```python
from scipy.signal import butter, freqz
import matplotlib.pyplot as plt
import numpy as np
# 设计滤波器
def butter_lowpass(cutoff, fs, order=2):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='low', analog=False)
return b, a
# 画出滤波器的频率响应
def plot_filter(b, a, fs):
w, h = freqz(b, a, worN=8000)
plt.subplot(2, 1, 1)
plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
plt.plot(cutoff, 0.5*np.sqrt(2), 'ko')
plt.axvline(cutoff, color='k')
plt.xlim(0, 0.5*fs)
plt.title("Lowpass Filter Frequency Response")
plt.xlabel('Frequency [Hz]')
plt.grid()
plt.subplot(2, 1, 2)
plt.plot(0.5*fs*w/np.pi, np.angle(h), 'g')
plt.axvline(cutoff, color='k')
plt.xlim(0, 0.5*fs)
plt.title("Lowpass Filter Phase Response")
plt.xlabel('Frequency [Hz]')
plt.ylabel('Phase [radians]')
plt.grid()
plt.subplots_adjust(hspace=0.5)
plt.show()
# 设定参数
fs = 1000.0
cutoff = 50.0
order = 2
# 设计滤波器
b, a = butter_lowpass(cutoff, fs, order)
# 画出滤波器的频率响应
plot_filter(b, a, fs)
```
运行上述代码后,会得到一个中心化显示的二阶巴特沃斯低通滤波器的频率响应图。
阅读全文