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。如果给定,则返回参数 wh 都传递给了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()
../../_images/scipy-signal-freqs-1.png