当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy signal.iirfilter用法及代码示例


本文简要介绍 python 语言中 scipy.signal.iirfilter 的用法。

用法:

scipy.signal.iirfilter(N, Wn, rp=None, rs=None, btype='band', analog=False, ftype='butter', output='ba', fs=None)#

IIR 数字和模拟滤波器设计给定顺序和临界点。

设计Nth-order 数字或模拟滤波器并返回滤波器系数。

参数

N int

过滤器的顺序。

Wn array_like

给出临界频率的标量或长度为 2 的序列。

对于数字滤波器,Wn 的单位与 fs 相同。默认情况下,fs 为 2 half-cycles/sample,因此这些从 0 归一化为 1,其中 1 是奈奎斯特频率。 (因此 Wn 在 half-cycles /样本中。)

对于模拟滤波器,Wn 是角频率(例如,rad/s)。

当 Wn 是长度为 2 的序列时,Wn[0] 必须小于 Wn[1]

rp 浮点数,可选

对于切比雪夫和椭圆滤波器,提供通带中的最大纹波。 (D b)

rs 浮点数,可选

对于切比雪夫和椭圆滤波器,在阻带中提供最小衰减。 (D b)

btype {‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’},可选

过滤器的类型。默认为‘bandpass’。

analog 布尔型,可选

如果为 True,则返回模拟滤波器,否则返回数字滤波器。

ftype str,可选

要设计的 IIR 滤波器类型:

  • Butterworth : ‘butter’

  • Chebyshev I : ‘cheby1’

  • Chebyshev II : ‘cheby2’

  • Cauer/elliptic: ‘ellip’

  • Bessel/Thomson: ‘bessel’

output {‘ba’, ‘zpk’, ‘sos’},可选

输出的过滤形式:

  • second-order sections (recommended): ‘sos’

  • numerator/denominator (default) : ‘ba’

  • pole-zero : ‘zpk’

一般来说,建议使用二阶部分 (‘sos’) 形式,因为推断分子/分母形式 (‘ba’) 的系数会遇到数值不稳定的问题。出于向后兼容性的原因,默认形式是分子/分母形式 (‘ba’),其中 ‘ba’ 中的 ‘b’ 和 ‘a’ 指的是所用系数的常用名称。

注意:使用二阶截面形式 (‘sos’) 有时会产生额外的计算成本:对于 data-intense 用例,因此建议还研究分子/分母形式 (‘ba’)。

fs 浮点数,可选

数字系统的采样频率。

返回

b, a 数组,数组

分子 (b) 和分母 (a) IIR 滤波器的多项式。仅在以下情况下返回output='ba'.

z, p, k ndarray,ndarray,浮点数

IIR 滤波器传递函数的零点、极点和系统增益。仅在 output='zpk' 时返回。

sos ndarray

IIR 滤波器的二阶截面表示。仅在 output='sos' 时返回。

注意

'sos' 输出参数是在 0.16.0 中添加的。

例子

生成从 50 Hz 到 200 Hz 的 17th-order Chebyshev II 模拟带通滤波器并绘制频率响应:

>>> import numpy as np
>>> from scipy import signal
>>> import matplotlib.pyplot as plt
>>> b, a = signal.iirfilter(17, [2*np.pi*50, 2*np.pi*200], rs=60,
...                         btype='band', analog=True, ftype='cheby2')
>>> w, h = signal.freqs(b, a, 1000)
>>> fig = plt.figure()
>>> ax = fig.add_subplot(1, 1, 1)
>>> ax.semilogx(w / (2*np.pi), 20 * np.log10(np.maximum(abs(h), 1e-5)))
>>> ax.set_title('Chebyshev Type II bandpass frequency response')
>>> ax.set_xlabel('Frequency [Hz]')
>>> ax.set_ylabel('Amplitude [dB]')
>>> ax.axis((10, 1000, -100, 10))
>>> ax.grid(which='both', axis='both')
>>> plt.show()
scipy-signal-iirfilter-1_00_00.png

在采样率为 2000 Hz 的系统中创建具有相同属性的数字滤波器,并绘制频率响应。 (需要实现二阶部分以确保该阶滤波器的稳定性):

>>> sos = signal.iirfilter(17, [50, 200], rs=60, btype='band',
...                        analog=False, ftype='cheby2', fs=2000,
...                        output='sos')
>>> w, h = signal.sosfreqz(sos, 2000, fs=2000)
>>> fig = plt.figure()
>>> ax = fig.add_subplot(1, 1, 1)
>>> ax.semilogx(w, 20 * np.log10(np.maximum(abs(h), 1e-5)))
>>> ax.set_title('Chebyshev Type II bandpass frequency response')
>>> ax.set_xlabel('Frequency [Hz]')
>>> ax.set_ylabel('Amplitude [dB]')
>>> ax.axis((10, 1000, -100, 10))
>>> ax.grid(which='both', axis='both')
>>> plt.show()
scipy-signal-iirfilter-1_01_00.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.iirfilter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。