0

我有一个信号 s[n] 和一个带通滤波器,它可以滤除信号中非常低和非常高的频率分量。我想将信号存储到 Matlab 数组中并通过滤波器。

但是,我无法将 s[n] 存储在 Matlab 中,因为分配的内存不足以包含如此长的信号。我决定将信号分成 N 段,然后将每个段通过那个带通滤波器,最后在滤波后将它们组装起来。

我想知道这种方法是否存在任何线性问题。如果这无效,那么还有其他方法可以实现我想要的吗?谢谢。

4

2 回答 2

1

如果您使用的是 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) 的长度是 length(a) + lenght(b) - 1

但是总响应将具有与您的方法相同的长度,您可能会遇到相同的内存问题。

于 2013-04-06T00:14:02.127 回答
0

重叠相加和重叠保存是在进行 FFT 快速卷积时处理分段数据窗口的方法,但也应与具有(有限)FIR 滤波器内核的分段直接线性卷积一起使用。

在进行 IIR 滤波时,需要跨段边界保存和恢复内部滤波器状态。

如果您不执行上述操作,那么您通常会在块边界处出现短暂的点击。

于 2013-04-07T03:15:56.000 回答