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


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


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

用法:

scipy.signal.firwin(numtaps, cutoff, *, width=None, window='hamming', pass_zero=True, scale=True, nyq=<object object>, fs=None)#

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

該函數計算有限脈衝響應濾波器的係數。濾波器將具有線性相位;如果 numtaps 為奇數則為 Type I,如果 numtaps 為偶數則為 Type II。

II 型濾波器在奈奎斯特頻率處始終具有零響應,因此如果使用 numtaps 偶數調用 firwin 並且具有右端位於奈奎斯特頻率的通帶,則會引發 ValueError 異常。

參數

numtaps int

濾波器的長度(係數的數量,即濾波器階數 + 1)。如果通帶包括奈奎斯特頻率,則 numtaps 必須是奇數。

cutoff 浮點數或一維 數組

濾波器的截止頻率(以與 fs 相同的單位表示)或一組截止頻率(即頻帶邊)。在後一種情況下,截止頻率應該是正的,並且在 0 和 fs/2 之間單調增加。值 0 和 fs/2 不得包含在截止值中。

width 浮點數或無,可選

如果 width 不是 None,則假定它是用於 Kaiser FIR 濾波器設計的過渡區域的近似寬度(以與 fs 相同的單位表示)。在這種情況下,window 參數將被忽略。

window 字符串或字符串和參數值的元組,可選

想要使用的窗口。有關窗口和所需參數的列表,請參見 scipy.signal.get_window

pass_zero {真,假,‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’},可選

如果為 True,則頻率 0(即 “DC gain”)處的增益為 1。如果為 False,則直流增益為 0。也可以是所需濾波器類型的字符串參數(相當於 IIR 設計函數中的 btype )。

scale 布爾型,可選

設置為 True 以縮放係數,以便頻率響應在某個頻率處完全一致。該頻率是:

  • 0 (DC) 如果第一個通帶從 0 開始(即 pass_zero 為真)

  • fs/2(奈奎斯特頻率),如果第一個通帶以 fs/2 結束(即濾波器是單頻帶高通濾波器);否則為第一通帶中心

nyq 浮點數,可選,已棄用

這就是奈奎斯特頻率。每個截止頻率必須在 0 和 nyq 之間。默認值為 1。

fs 浮點數,可選

信號的采樣頻率。每個頻率在隔斷必須介於 0 和fs/2。默認值為 2。

返回

h (numtaps,) ndarray

長度係數 numtaps FIR 濾波器。

拋出

ValueError

如果有任何值隔斷小於或等於 0 或大於或等於fs/2,如果值在隔斷不是嚴格單調遞增的,或者如果小數點是偶數,但通帶包括奈奎斯特頻率。

例子

Low-pass 從 0 到 f:

>>> from scipy import signal
>>> numtaps = 3
>>> f = 0.1
>>> signal.firwin(numtaps, f)
array([ 0.06799017,  0.86401967,  0.06799017])

使用特定的窗口函數:

>>> signal.firwin(numtaps, f, window='nuttall')
array([  3.56607041e-04,   9.99286786e-01,   3.56607041e-04])

High-pass(‘stop’ 從 0 到 f):

>>> signal.firwin(numtaps, f, pass_zero=False)
array([-0.00859313,  0.98281375, -0.00859313])

Band-pass:

>>> f1, f2 = 0.1, 0.2
>>> signal.firwin(numtaps, [f1, f2], pass_zero=False)
array([ 0.06301614,  0.88770441,  0.06301614])

Band-stop:

>>> signal.firwin(numtaps, [f1, f2])
array([-0.00801395,  1.0160279 , -0.00801395])

多頻段(通帶為 [0, f1]、[f2, f3] 和 [f4, 1]):

>>> f3, f4 = 0.3, 0.4
>>> signal.firwin(numtaps, [f1, f2, f3, f4])
array([-0.01376344,  1.02752689, -0.01376344])

多頻段(通帶為 [f1, f2] 和 [f3,f4]):

>>> signal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False)
array([ 0.04890915,  0.91284326,  0.04890915])

相關用法


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