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
頻率響應,為複數。
註解
在 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()