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


Python SciPy signal.iirdesign用法及代碼示例


本文簡要介紹 python 語言中 scipy.signal.iirdesign 的用法。

用法:

scipy.signal.iirdesign(wp, ws, gpass, gstop, analog=False, ftype='ellip', output='ba', fs=None)#

完整的 IIR 數字和模擬濾波器設計。

給定通帶和阻帶頻率和增益,為給定的基本類型構建最小階的模擬或數字 IIR 濾波器。以分子、分母 (‘ba’)、pole-zero (‘zpk’) 或二階部分 (‘sos’) 形式返回輸出。

參數

wp, ws 浮點數或數組,形狀 (2,)

通帶和阻帶邊頻率。可能的值是標量(用於低通和高通濾波器)或範圍(用於帶通和帶阻濾波器)。對於數字濾波器,它們的單位與 fs 相同。默認情況下,fs 為 2 half-cycles/sample,因此這些從 0 歸一化為 1,其中 1 是奈奎斯特頻率。例如:

  • Lowpass: wp = 0.2, ws = 0.3

  • Highpass: wp = 0.3, ws = 0.2

  • Bandpass: wp = [0.2, 0.5], ws = [0.1, 0.6]

  • Bandstop: wp = [0.1, 0.6], ws = [0.2, 0.5]

對於模擬濾波器,wp 和 ws 是角頻率(例如,rad/s)。請注意,對於帶通和帶阻濾波器,通帶必須嚴格位於阻帶內,反之亦然。

gpass 浮點數

通帶中的最大損耗 (dB)。

gstop 浮點數

阻帶中的最小衰減 (dB)。

analog 布爾型,可選

如果為 True,則返回模擬濾波器,否則返回數字濾波器。

ftype str,可選

要設計的 IIR 濾波器類型:

  • Butterworth : ‘butter’

  • Chebyshev I : ‘cheby1’

  • Chebyshev II : ‘cheby2’

  • Cauer/elliptic: ‘ellip’

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 中添加的。

例子

>>> import numpy as np
>>> 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(True)
>>> 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(True)
>>> 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))
scipy-signal-iirdesign-1.png

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.iirdesign。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。