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