scipy.signal.iirdesign¶
- scipy.signal.iirdesign(wp, ws, gpass, gstop, analog=False, ftype='ellip', output='ba', fs=None)[源代码]¶
- 完整的红外数字和模拟过滤设计。 - 给定通带和阻带的频率和增益,为给定的基本类型构造最低阶的模拟或数字IR过滤。以分子、分母(‘ba’)、零极点(‘zpk’)或二阶分段(‘sos’)形式返回输出。 - 参数
- wp、ws类似浮点或数组的形状(2,)
- 通带和阻带边缘频率。可能的值是标量(对于低通滤波器和高通滤波器)或范围(对于带通滤波器和带阻滤波器)。对于数字滤波器,它们的单位与 fs 。默认情况下, fs 为2个半周期/采样,因此这些值从0归一化到1,其中1是奈奎斯特频率。例如: - 低通:wp=0.2,ws=0.3 
- 高通:wp=0.3,ws=0.2 
- 带通:WP= [0.2,0.5] ,ws= [0.1,0.6] 
- 带阻:WP= [0.1,0.6] ,ws= [0.2,0.5] 
 - 对于模拟滤波器, wp 和 ws 角频率(例如,rad/s)。请注意,对于带通滤波器和带阻滤波器,通带必须严格位于阻带内,反之亦然。 
- gpass浮动
- 通带内的最大损耗(DB)。 
- gstop浮动
- 阻带内的最小衰减(DB)。 
- analog布尔值,可选
- 如果为True,则返回模拟过滤,否则返回数字过滤。 
- ftype字符串,可选
- 要设计的IIR过滤的类型: - 巴特沃斯:“黄油” 
- 契比雪夫1:“契比1” 
- 契比雪夫2:“契比2” 
- 考尔/椭圆形:“椭圆” 
- 贝塞尔/汤姆森:“贝塞尔” 
 
- output{‘ba’,‘zpk’,‘sos’},可选
- 过滤输出形式: - 二阶部分(推荐):‘SOS’ 
- 分子/分母(默认值):‘BA’ 
- 零极点:‘zpk’ 
 - 一般而言,推荐使用二阶截面(‘SOS’)形式,因为推导分子/分母形式(‘ba’)的系数会受到数值不稳定性的影响。出于向后兼容的原因,默认形式是分子/分母形式(‘ba’),其中‘ba’中的‘b’和‘a’是指使用的系数的常用名称。 - 注意:使用二阶截面形式(‘SOS’)有时会带来额外的计算成本:因此,对于数据密集型的使用案例,建议还研究分子/分母形式(‘ba’)。 
- fs浮动,可选
- 数字系统的采样频率。 - 1.2.0 新版功能. 
 
- 退货
- b, andarray,ndarray
- 分子 (b )和分母 (a )过滤的多项式。仅在以下情况下返回 - output='ba'。
- z、p、kndarray,ndarray,浮动
- 过滤传递函数的零点、极点和系统增益。仅在以下情况下返回 - output='zpk'。
- sosndarray
- IIR过滤的二次截面表示。仅在以下情况下返回 - output=='sos'。
 
 - 参见 - 注意事项 - 这个 - 'sos'0.16.0中增加了输出参数。- 示例 - >>> from scipy import signal >>> import matplotlib.pyplot as plt >>> import matplotlib.ticker - >>> wp = 0.2 >>> ws = 0.3 >>> gpass = 1 >>> gstop = 40 - >>> system = signal.iirdesign(wp, ws, gpass, gstop) >>> w, h = signal.freqz(*system) - >>> fig, ax1 = plt.subplots() >>> 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 [rad/sample]') >>> ax1.grid() >>> ax1.set_ylim([-120, 20]) >>> ax2 = ax1.twinx() >>> angles = np.unwrap(np.angle(h)) >>> ax2.plot(w, angles, 'g') >>> ax2.set_ylabel('Angle (radians)', color='g') >>> ax2.grid() >>> ax2.axis('tight') >>> ax2.set_ylim([-6, 1]) >>> nticks = 8 >>> ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks)) >>> ax2.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks)) 