scipy.signal.

freqs#

scipy.signal.freqs(b, a, worN=200, plot=None)[source]#

計算類比濾波器的頻率響應。

給定類比濾波器的 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}, optional

如果為 None,則在響應曲線的有趣部分(由極點-零點位置決定)周圍的 200 個頻率處計算。如果為單個整數,則在該數量的頻率處計算。否則,在 worN 中給定的角頻率(例如,rad/s)處計算響應。

plotcallable, optional

一個接受兩個參數的可調用物件。如果給定,則返回參數 wh 會傳遞給 plot。用於在 freqs 內部繪製頻率響應。

返回:
wndarray

計算 h 的角頻率。

hndarray

頻率響應。

參見

freqz

計算數位濾波器的頻率響應。

筆記

使用 Matplotlib 的 “plot” 函數作為 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 [rad/s]')
>>> plt.ylabel('Amplitude response [dB]')
>>> plt.grid(True)
>>> plt.show()
../../_images/scipy-signal-freqs-1.png