1

我在 MATLAB 中使用 FIR 滤波器来过滤信号。在下图中,将我的过滤器应用于顶部图会创建底部图:

在此处输入图像描述

这样做的效果是成功地对数据进行低通滤波,但将所有内容都移动了 500 毫秒。

这是我用来低通过滤数据的例程:

% (Start with any vector called 'inputData')

samplingRate = 1000;
filterLength = 1000;
filterCutOff = 90;

filterType = fir1(filterLength , filterCutOff/(samplingRate/2), 'low'); % define the low pass filter
inputData = filter(filterType,1,inputData); % filter the data

我知道我的数据的 500 毫秒移位与过滤器长度的一半(1000 毫秒)有关,但为什么会发生这种情况,我做错了什么?我知道我可以只删除过滤数据的前 500 毫秒,但我也丢失了最后 500 毫秒的数据。

请注意,此示例需要信号处理工具箱

4

2 回答 2

0

如果您不想要延迟,则需要使用 IIR 滤波器零相位延迟(使用filtfilt)。

您不能毫不拖延地获得 FIR。也就是说,您需要选择最适合您情况的过滤器……</p>

有关过滤器的更多信息,请使用:

Mitra,SK 数字信号处理:基于计算机的方法,第 2 版。麦格劳希尔学院

当然,您可以根据需要选择最新版本。

于 2013-07-05T18:37:42.680 回答
0

如果你想避免延迟,你可以更换

inputData = filter(filterType,1,inputData);

inputData = conv(filterType, inputData, 'same');

但是,您的信号将不再同步,您必须考虑延迟等于代码其他部分中滤波器长度的一半。

于 2013-07-05T12:02:10.920 回答