python實現濾波器

2021-09-25 13:12:40 字數 2016 閱讀 5648

在使用python進行訊號處理過程中,利用 scipy.signal.filtfilt()可以快速幫助實現訊號的濾波。

1.函式的介紹

(1).濾波函式

scipy.signal.filtfilt(b, a, x, axis=-1, padtype=『odd』, padlen=none, method=『pad』, irlen=none)

輸入引數:

b: 濾波器的分子係數向量

a: 濾波器的分母係數向量

x: 要過濾的資料陣列。(array型)

axis: 指定要過濾的資料陣列x的軸

padtype: 必須是「奇數」、「偶數」、「常數」或「無」。這決定了用於過濾器應用的填充訊號的擴充套件型別。

padlen:在應用濾波器之前在軸兩端延伸x的元素數目。此值必須小於要濾波元素個數- 1。(int型或none)

method:確定處理訊號邊緣的方法。當method為「pad」時,填充訊號;填充型別padtype和padlen決定,irlen被忽略。當method為「gust」時,使用古斯塔夫森方法,而忽略padtype和padlen。

irlen:當method為「gust」時,irlen指定濾波器的脈衝響應的長度。如果irlen是none,則脈衝響應的任何部分都被忽略。對於長訊號,指定irlen可以顯著改善濾波器的效能。(int型或none)

輸出引數:

y:濾波後的資料陣列

(2).濾波器建構函式(僅介紹butterworth濾波器)

scipy.signal.butter(n, wn, btype=『low』, analog=false, output=『ba』)

輸入引數:

n:濾波器的階數

wn:歸一化截止頻率。計算公式wn=2*截止頻率/取樣頻率。(注意:根據取樣定理,取樣頻率要大於兩倍的訊號本身最大的頻率,才能還原訊號。截止頻率一定小於訊號本身最大的頻率,所以wn一定在0和1之間)。當構造帶通濾波器或者帶阻濾波器時,wn為長度為2的列表。

btype : 濾波器型別,

output : 輸出型別,

輸出引數:

b,a: iir濾波器的分子(b)和分母(a)多項式係數向量。output=『ba』

z,p,k: iir濾波器傳遞函式的零點、極點和系統增益. output= 『zpk』

sos: iir濾波器的二階截面表示。output= 『sos』

2.函式的使用

訊號濾波中最常用的無非低通濾波、高通濾波和帶通濾波。下面簡單介紹這三種濾波的使用過程:

(1).高通濾波

#這裡假設取樣頻率為1000hz,訊號本身最大的頻率為500hz,要濾除10hz以下頻率成分,即截至頻率為10hz,則wn=2*10/1000=0.02

from scipy import signal

b, a = signal.butter(8, 0.02, 『highpass』)

filteddata = signal.filtfilt(b, a, data)#data為要過濾的訊號

(2).低通濾波

#這裡假設取樣頻率為1000hz,訊號本身最大的頻率為500hz,要濾除10hz以上頻率成分,即截至頻率為10hz,則wn=2*10/1000=0.02

from scipy import signal

b, a = signal.butter(8, 0.02, 『lowpass』)

filteddata = signal.filtfilt(b, a, data) #data為要過濾的訊號

(3).帶通濾波

#這裡假設取樣頻率為1000hz,訊號本身最大的頻率為500hz,要濾除10hz以下和400hz以上頻率成分,即截至頻率為10hz和400hz,則wn1=210/1000=0.02,wn2=2400/1000=0.8。wn=[0.02,0.8]

from scipy import signal

b, a = signal.butter(8, [0.02,0.8], 『bandpass』)

filteddata = signal.filtfilt(b, a, data) #data為要過濾的訊號

濾波器實現

基於matlab內建函式的fir設計。功能 設計標準頻率響應的基於窗函式的fir濾波器。語法 說明 fir1函式可以實現加窗線形相位fir數字濾波器設計,它可以設計出標準的低通 高通 帶通和帶阻濾波器.當wn w1 w2 時,fir1函式可得到帶通濾波器,其通帶為w1 w w2.在設計高通和帶阻濾波...

Python 卡爾曼濾波器實現

去年我們在設計一款新產品的時候,由於選用定製開發的乙個soc器件,導致我們在用adc讀取經由這個soc晶元放大後的訊號時,出現了極其不穩定的情況。正常情況下adc讀取出來的訊號應當為一條平穩的直線,而現實上讀取出來的訊號確上下波動極其大,遠遠超出了我們理論計算水平。雖然後來通過大量的研究分析,得出時...

論高通濾波器,帶阻濾波器,陷波濾波器

首先,對一副影象進行如下二維傅利葉變換。我們將u 0和v 0帶上式,我們可以得到如下式子。根據上式,可以到f 0,0 的值是非常大的。這裡,我們將 f 0,0 稱為直流分量,直流分量比其他的成分要大好幾個數量級。所以,這也就是傅利葉譜為什麼需要使用對數變換才能看清楚的原因。這裡,對於高通濾波器而言,...