2013-04-05 41 views
0

我有一個信號s [n]和一個帶通濾波器,可以濾除信號的非常低和很高的頻率分量。我想將信號存儲到一個Matlab數組中並通過過濾器。連接信號上的濾波系統的線性

但是,我不能在MATLAB中存儲s [n],因爲分配的內存不足以包含如此長的信號。我決定將信號分成N段,並將每段通過該帶通濾波器,最後在濾波後組合它們。

我想知道這種方法是否有任何線性問題。如果這是無效的,那麼是否有其他方法可以實現我想要的?謝謝。

+0

通常涉及的長度是多少? – 2013-04-05 19:53:42

回答

1

如果使用則可以使用convolution FIR濾波器:

x = rand(1000,1) 
b = fir1(100, 0.5) 
y1 = zeros(1100, 1) 
% compute the response using the first 400 points of x 
y1(1:500) = conv(x(1:400),b) 
% compute the response using the last 600 points of x 
y1(401:1100) = y1(401:1100) + conv(x(401:1000),b) 
% compute the whole response just to compare 
y2 = conv(x,b) 

注意CONV的長度(A,B)是長度(a)+ lenght(B) - 1

但是總的迴應將與您的方法持平,您可能會遇到相同的內存問題。

0

Overlap-add和overlap-save是在進行FFT快速卷積時處理數據的分段窗口的方法,但是也應該與使用(有限)FIR濾波器內核的分段直接線性卷積一起使用。

在進行IIR過濾時,您需要跨段限制保存並恢復內部過濾器狀態。

如果你不這樣做,那麼你通常會在塊邊界處進行短暫點擊。