MATLAB的filtfilt()算法[关闭]

我正尝试用另一种语言重现冗长的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

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

回答:

filtfilt算法匹配过滤器上的初始条件,以最大程度地减少(从doc filtfilt)的开始和结束瞬变。如果您键入edit

filtfilt,则可以看到代码-

有一个函数getCoeffsAndInitialConditions(b,a,Npts)可以向您显示此代码的详细信息。

以上是 MATLAB的filtfilt()算法[关闭] 的全部内容, 来源链接: utcz.com/qa/406607.html

回到顶部