scipy.signal.

雙線性#

scipy.signal.bilinear(b, a, fs=1.0)[source]#

使用雙線性轉換,從類比濾波器返回數位 IIR 濾波器。

使用塔斯廷轉換方法,將一組極點和零點從類比 s 平面轉換到數位 z 平面,此方法將 2*fs*(z-1) / (z+1) 替換為 s,以保持頻率響應的形狀。

參數:
barray_like (類陣列)

類比濾波器傳遞函數的分子。

aarray_like (類陣列)

類比濾波器傳遞函數的分母。

fsfloat (浮點數)

取樣率,以一般頻率(例如,赫茲)。此函數中不進行預先扭曲。

返回:
bndarray (多維陣列)

轉換後的數位濾波器傳遞函數的分子。

andarray (多維陣列)

轉換後的數位濾波器傳遞函數的分母。

範例

>>> from scipy import signal
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> fs = 100
>>> bf = 2 * np.pi * np.array([7, 13])
>>> filts = signal.lti(*signal.butter(4, bf, btype='bandpass',
...                                   analog=True))
>>> filtz = signal.lti(*signal.bilinear(filts.num, filts.den, fs))
>>> wz, hz = signal.freqz(filtz.num, filtz.den)
>>> ws, hs = signal.freqs(filts.num, filts.den, worN=fs*wz)
>>> plt.semilogx(wz*fs/(2*np.pi), 20*np.log10(np.abs(hz).clip(1e-15)),
...              label=r'$|H_z(e^{j \omega})|$')
>>> plt.semilogx(wz*fs/(2*np.pi), 20*np.log10(np.abs(hs).clip(1e-15)),
...              label=r'$|H(j \omega)|$')
>>> plt.legend()
>>> plt.xlabel('Frequency [Hz]')
>>> plt.ylabel('Amplitude [dB]')
>>> plt.grid(True)
../../_images/scipy-signal-bilinear-1.png