scipy.signal.

freqz_zpk#

scipy.signal.freqz_zpk(z, p, k, worN=512, whole=False, fs=6.283185307179586)[原始碼]#

計算 ZPK 形式的數位濾波器之頻率響應。

給定數位濾波器的零點、極點和增益,計算其頻率響應

\(H(z)=k \prod_i (z - Z[i]) / \prod_j (z - P[j])\)

其中 \(k\)增益\(Z\)零點,而 \(P\)極點

參數:
zarray_like

線性濾波器的零點

parray_like

線性濾波器的極點

kscalar

線性濾波器的增益

worN{None, int, array_like}, 選項性

若為單一整數,則計算該數量的頻率(預設值為 N=512)。

若為類陣列 (array_like),則計算給定頻率的響應。這些頻率的單位與 fs 相同。

wholebool, 選項性

通常,頻率是從 0 到奈奎斯特頻率 fs/2(單位圓的上半部)計算。如果 whole 為 True,則計算從 0 到 fs 的頻率。如果 w 是類陣列,則忽略此參數。

fsfloat, 選項性

數位系統的取樣頻率。預設值為 2*pi 弧度/樣本(因此 w 從 0 到 pi)。

在 1.2.0 版本中新增。

返回:
wndarray

h 的計算頻率,單位與 fs 相同。依預設,w 正規化到範圍 [0, pi)(弧度/樣本)。

hndarray

頻率響應,為複數。

另請參閱

freqs

計算 TF 形式的類比濾波器之頻率響應

freqs_zpk

計算 ZPK 形式的類比濾波器之頻率響應

freqz

計算 TF 形式的數位濾波器之頻率響應

註解

在 0.19.0 版本中新增。

範例

設計一個 4 階數位巴特沃斯濾波器,在取樣率為 1000 Hz 的系統中,截止頻率為 100 Hz,並繪製頻率響應

>>> import numpy as np
>>> from scipy import signal
>>> z, p, k = signal.butter(4, 100, output='zpk', fs=1000)
>>> w, h = signal.freqz_zpk(z, p, k, fs=1000)
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(1, 1, 1)
>>> ax1.set_title('Digital filter frequency response')
>>> ax1.plot(w, 20 * np.log10(abs(h)), 'b')
>>> ax1.set_ylabel('Amplitude [dB]', color='b')
>>> ax1.set_xlabel('Frequency [Hz]')
>>> ax1.grid(True)
>>> ax2 = ax1.twinx()
>>> phase = np.unwrap(np.angle(h))
>>> ax2.plot(w, phase, 'g')
>>> ax2.set_ylabel('Phase [rad]', color='g')
>>> plt.axis('tight')
>>> plt.show()
../../_images/scipy-signal-freqz_zpk-1.png