如何用[b,a]=butter(N,Wn)画图
时间: 2024-05-28 19:09:43 浏览: 149
要画出butter函数的图像,可以按照以下步骤进行操作:
1. 导入必要的库和模块,包括numpy、scipy、matplotplib等
2. 设置函数的参数,其中N代表滤波器的阶数,Wn是归一化截止频率
3. 使用butter函数生成数字Butterworth滤波器的系数
4. 将生成的滤波器系数代入freqz函数,绘制其幅度和相位响应曲线
5. 最后使用plot函数绘制幅度响应和相位响应的图像
具体代码如下:
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
# 设置滤波器的参数
N = 6 # 滤波器的阶数
Wn = 0.3 # 归一化截止频率
# 生成Butterworth数字滤波器的系数
b, a = signal.butter(N, Wn, 'lowpass')
# 绘制滤波器的频率响应曲线
w, h = signal.freqz(b, a)
plt.plot(w / np.pi, 20 * np.log10(abs(h)))
plt.title("Butterworth lowpass filter frequency response")
plt.xlabel("Normalized frequency(*π)")
plt.ylabel("Gain(dB)")
plt.xlim(0, 1)
plt.ylim(min(20 * np.log10(abs(h))) - 10, 5)
plt.axvline(Wn, color='green')
plt.show()
# 绘制滤波器的相位响应曲线
plt.plot(w / np.pi, np.arctan2(np.imag(h), np.real(h)))
plt.title("Butterworth lowpass filter phase response")
plt.xlabel("Normalized frequency(*π)")
plt.ylabel("Phase(rad)")
plt.xlim(0, 1)
plt.ylim(-np.pi / 2, np.pi / 2)
plt.axvline(Wn, color='green')
plt.show()
阅读全文