scipy.signal.
bilinear_zpk#
- scipy.signal.bilinear_zpk(z, p, k, fs)[源]#
使用双线性变换,从模拟滤波器返回一个数字IIR滤波器。
使用Tustin方法将一组零点和极点从模拟s平面转换到数字z平面,该方法将
2*fs*(z-1) / (z+1)
代替s
,同时保持频率响应的形状。- 参数:
- z类数组
模拟滤波器传递函数的零点。
- p类数组
模拟滤波器传递函数的极点。
- k浮点数
模拟滤波器传递函数的系统增益。
- fs浮点数
采样率,作为普通频率(例如,赫兹)。此函数不进行预校准。
- 返回:
- zndarray
转换后的数字滤波器传递函数的零点。
- pndarray
转换后的数字滤波器传递函数的极点。
- k浮点数
转换后的数字滤波器的系统增益。
备注
在 1.1.0 版本中新增。
示例
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt
>>> fs = 100 >>> bf = 2 * np.pi * np.array([7, 13]) >>> filts = signal.lti(*signal.butter(4, bf, btype='bandpass', analog=True, ... output='zpk')) >>> filtz = signal.lti(*signal.bilinear_zpk(filts.zeros, filts.poles, ... filts.gain, fs)) >>> wz, hz = signal.freqz_zpk(filtz.zeros, filtz.poles, filtz.gain) >>> ws, hs = signal.freqs_zpk(filts.zeros, filts.poles, filts.gain, ... 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)