scipy.signal.freqs¶
- scipy.signal.freqs(b, a, worN=200, plot=None)[源代码]¶
计算模拟过滤的频率响应。
给定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},可选
如果没有,则在响应曲线的有趣部分(由零极点位置确定)周围计算200个频率。如果是单个整数,则以如此多的频率进行计算。否则,以中给出的角频率(例如,rad/s)计算响应 worN 。
- plot可调用,可选
接受两个参数的Callable。如果给定,则返回参数 w 和 h 都传递给了Plot。对于绘制内部的频率响应非常有用
freqs
。
- 退货
- wndarray
它所处的角频率 h 是经过计算的。
- hndarray
频率响应。
参见
freqz
计算数字过滤的频率响应。
注意事项
使用Matplotlib的“Plot”函数作为 plot 会产生意想不到的结果,这将绘制复数传递函数的实部,而不是幅值。试试看
lambda w, h: plot(w, abs(h))
。示例
>>> from scipy.signal import freqs, iirfilter
>>> 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() >>> plt.show()