scipy.signal.

firwin2#

scipy.signal.firwin2(numtaps, freq, gain, *, nfreqs=None, window='hamming', antisymmetric=False, fs=None)[原始碼]#

使用視窗方法的 FIR 濾波器設計。

從給定的頻率 freq 和對應的增益 gain,此函數構建具有線性相位且(近似)給定頻率響應的 FIR 濾波器。

參數:
numtapsint

FIR 濾波器中的抽頭數量。numtaps 必須小於 nfreqs

freqarray_like,1-D

頻率取樣點。通常為 0.0 到 1.0,其中 1.0 為奈奎斯特頻率。奈奎斯特頻率是 fs 的一半。freq 中的值必須為非遞減。一個值可以重複一次以實現不連續性。freq 中的第一個值必須為 0,最後一個值必須為 fs/2。值 0 和 fs/2 不得重複。

gainarray_like

頻率取樣點的濾波器增益。根據濾波器類型,會應用某些增益值約束,請參閱「注意事項」以了解詳細資訊。

nfreqsint,optional

用於構建濾波器的內插網格大小。為了獲得最有效率的行為,這應該是 2 的冪次方加 1(例如,129、257 等)。預設值比不小於 numtaps 的最小 2 的冪次方多 1。nfreqs 必須大於 numtaps

windowstring 或 (string, float) 或 float,或 None,optional

要使用的視窗函數。預設值為“hamming”。請參閱 scipy.signal.get_window 以取得完整可能值列表。如果為 None,則不套用視窗函數。

antisymmetricbool,optional

結果脈衝響應是否為對稱/反對稱。請參閱「注意事項」以了解更多詳細資訊。

fsfloat,optional

訊號的取樣頻率。cutoff 中的每個頻率都必須介於 0 和 fs/2 之間。預設值為 2。

返回:
tapsndarray

FIR 濾波器的濾波器係數,為長度為 numtaps 的 1-D 陣列。

注意事項

從給定的一組頻率和增益,在頻域中構建所需的響應。將逆 FFT 應用於所需的響應,以建立相關的卷積核,並傳回此核心的前 numtaps 個係數,並按 window 縮放。

FIR 濾波器將具有線性相位。濾波器的類型由 'numtaps' 的值和 antisymmetric 旗標決定。有四種可能的組合

  • 奇數 numtapsantisymmetric 為 False,產生 I 型濾波器

  • 偶數 numtapsantisymmetric 為 False,產生 II 型濾波器

  • 奇數 numtapsantisymmetric 為 True,產生 III 型濾波器

  • 偶數 numtapsantisymmetric 為 True,產生 IV 型濾波器

除了 I 型濾波器之外,所有濾波器的幅度響應都受以下約束

  • II 型 – 在奈奎斯特頻率處為零

  • III 型 – 在零頻率和奈奎斯特頻率處為零

  • IV 型 – 在零頻率處為零

在 0.9.0 版本中新增。

參考文獻

[1]

Oppenheim, A. V. 和 Schafer, R. W.,“Discrete-Time Signal Processing”,Prentice-Hall,Englewood Cliffs,New Jersey (1989)。 (例如,請參閱第 7.4 節。)

[2]

Smith, Steven W.,“The Scientist and Engineer’s Guide to Digital Signal Processing”,第 17 章。http://www.dspguide.com/ch17/1.htm

範例

一個低通 FIR 濾波器,其響應在 [0.0, 0.5] 上為 1,並在 [0.5, 1.0] 上從 1 線性遞減到 0

>>> from scipy import signal
>>> taps = signal.firwin2(150, [0.0, 0.5, 1.0], [1.0, 1.0, 0.0])
>>> print(taps[72:78])
[-0.02286961 -0.06362756  0.57310236  0.57310236 -0.06362756 -0.02286961]