用Python写一段N阶归一化巴特沃斯滤波器的传递函数,要求有输出图片
时间: 2024-09-21 18:10:45 浏览: 39
在Python中,我们可以使用numpy库来计算巴特沃斯滤波器的传递函数,并使用matplotlib库生成图像。首先,我们需要安装这两个库,如果你还没有安装,可以使用以下命令:
```bash
pip install numpy matplotlib
```
然后,下面是一个简单的示例,展示如何编写一个N阶巴特沃斯低通滤波器的传递函数并绘制其Bode图:
```python
import numpy as np
import matplotlib.pyplot as plt
def butterworth_filter(order, cutoff_frequency, fs=1.0):
nyquist = 0.5 * fs
normal_cutoff = cutoff_frequency / nyquist
b, a = signal.butter(order, normal_cutoff, 'low', analog=False)
return b, a
def transfer_function(b, a):
w, h = signal.freqz(b, a, worN=8000) # 频率范围较广有助于可视化
return w, h
# 示例:N=4阶,截止频率为0.5
order = 4
cutoff_frequency = 0.5
fs = 1 # 可视化频率范围通常设为采样频率
b, a = butterworth_filter(order, cutoff_frequency)
w, h = transfer_function(b, a)
fig, axs = plt.subplots(nrows=2, sharex=True)
axs[0].plot(w, 20 * np.log10(abs(h)), label=f'order={order}')
axs[0].set_ylabel('Magnitude [dB]')
axs[0].grid(True)
axs[0].legend()
axs[1].semilogx(w, np.rad2deg(np.angle(h)))
axs[1].set_ylabel('Phase [degrees]')
axs[1].set_xlabel('Frequency [rad/sample]')
axs[1].grid(True)
axs[1].margins(0.1, 0.1)
plt.show()
阅读全文