2013-05-03 94 views
0

我使用這個過濾器的Python:帶通濾波器不尊重截止

def bandpass_firwin(ntaps, lowcut, highcut, fs, window='hamming'): 
    nyq = 0.5 * fs 
    taps = firwin(ntaps, [lowcut, highcut], nyq=nyq, pass_zero=False, 
        window=window, scale=False) 

在我的ntaps = 128;低切= 0.7; highcut = 4; fs = 61

我過濾我的信號,其中有61個樣本以61 Hz採樣(因此它的長度爲10秒)。

當我看這已經被過濾通過該帶通濾波器的信號的頻譜,我看到:

enter image description here

在此光譜中的PEEK是在0.61赫茲。這不在0.7到4赫茲的範圍內。

這怎麼可能? &我該如何預防?

+0

我無法重現您的結果。我使用你的代碼得到了一個非常好的帶通濾波器。你怎麼生成這個陰謀? – 2013-05-03 09:21:08

+0

哦,這是你的過濾數據。 – 2013-05-03 09:23:47

+0

是的,它已經被捲入。 taps_hamming = bandpass_firwin(ntaps,0.7%,4,FS = FS) Ynew3 = np.convolve(Ynew2,taps_hamming, 「相同」) – Ojtwist 2013-05-03 09:25:55

回答

0

你的過濾器並不神奇 - 對帶寬有內在的限制。如果您確實需要緊急切斷,請嘗試使用更多的水龍頭。

儘管您使用的點擊越多,您就越需要考慮邊緣效應以及您如何處理它們(因爲邊緣假設會越來越深入地侵入數據塊)。也許你想要在邊緣平滑滾動?或者鏡像和重複的數據?也許你可以完全忽略它...

另一種卷積技術是通過簡單地乘以所需的頻譜直接在頻域進行濾波。這強加了你的信號重複的邊緣假設,儘管你可以通過擴展你的信號來改變它,只要你認爲合適。如果您想知道等效FIR濾波器的支持,請使用窗口的IFFT,您可以看到時間塊的開始會在開始時拖入多少。

+0

我不認爲任何邊緣效應對我來說都很重要。我只需要0.7赫茲和4赫茲之間的峯值頻率。 – Ojtwist 2013-05-03 09:47:05

+0

峯值頻率是您的最終目標嗎?你是否也需要濾波後的信號?如果您確實不需要濾波信號,則可以在未濾波信號的頻譜中找到0.7 Hz和4 Hz之間的峯值。 – 2013-05-03 10:23:58

+0

@Ojtwist,所以我給了你一個解決方案......你應該*知道邊緣效應的影響,因爲它們可以相當明顯。同樣,我也贊同沃倫的評論。 – 2013-05-03 11:09:28