计算模拟滤波器的频率响应。
给定模拟滤波器的 M 阶分子 b 和 N 阶分母 a,计算其频率响应
b[0]*(jw)**M + b[1]*(jw)**(M-1) + ... + b[M]
H(w) = ----------------------------------------------
a[0]*(jw)**N + a[1]*(jw)**(N-1) + ... + a[N]
参数:
barray_like线性滤波器的分子。
aarray_like线性滤波器分母。
worN{None, int, array_like}, 可选如果为 None,则在响应曲线的有趣部分(由极点零位位置确定)周围以 200 个频率计算。如果为单个整数,则以该频率计算。否则,以 worN 中给出的角频率(如 rad/s)计算响应。
plotcallable, 可选一个带有两个参数的可调用对象。如果给出,则返回参数 w 和 h 传递给 plot。这对于在 freqs 内部绘制频率响应非常有用。
返回:
wndarray计算出 h 的角频率。
hndarray频率响应。
另请参见
freqz计算数字滤波器的频率响应。
注
使用 Matplotlib 的“绘图”函数作为 callable 的plot 会产生意外的结果,它会绘制复传递函数的实部,而不是大小。尝试lambda w, h: plot(w, abs(h)).
示例
在您的浏览器中尝试!
>>> from scipy.signal import freqs, iirfilter
>>> import numpy as np
>>> b, a = iirfilter(4, [1, 10], 1, 60, analog=True, ftype='cheby1')
>>> w, h = freqs(b, a, worN=np.logspace(-1, 2, 1000))
>>> import matplotlib.pyplot as plt
>>> plt.semilogx(w, 20 * np.log10(abs(h)))
>>> plt.xlabel('Frequency')
>>> plt.ylabel('Amplitude response [dB]')
>>> plt.grid(True)
>>> plt.show()
返回在新表中打开