當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。