小编典典

MATLAB的filtfilt()算法[关闭]

algorithm

我正尝试用另一种语言重现冗长的MATLAB代码,该语言没有内置等效项,即无相滤波器filtfilt()。我正在尝试通过简单的过滤(或卷积)操作来重新广播该函数,以便可以轻松地重现它。我知道此过滤操作等效于正向过滤,然后是反向过滤,但是我发现数据边缘存在细微差异。特别:

data = [1 1 1 2 2 3 5 7 1 1 1 1 1];
ker = [2 1 1];

a = filtfilt(ker,1,data)

b = fliplr( filter( ker, 1, fliplr( filter(ker, 1, data) ) ) )

% a =
%
%   16   18   21   29   39   57   66   68   42   28   16   16   16
%
% b =
%
%   11   16   21   29   39   57   66   68   42   28   16   12    8

我曾尝试在一个或两个过滤操作之前在数据的一端或两端用零填充。我认为我可能会遗漏一些明显的东西,但找不到它。


阅读 556

收藏
2020-07-28

共1个答案

小编典典

filtfilt算法匹配过滤器上的初始条件,以最大程度地减少(从doc filtfilt)的开始和结束瞬变。如果您键入edit filtfilt,则可以看到代码-
有一个函数getCoeffsAndInitialConditions(b,a,Npts)可以向您显示此代码的详细信息。

2020-07-28