2013-04-05 44 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过滤时,您需要跨段限制保存并恢复内部过滤器状态。

如果你不这样做,那么你通常会在块边界处进行短暂点击。