我编写了一个简单的代码,该代码执行3点移动平均平滑算法。它旨在遵循与此处所述Matlab的smooth(...)函数相同的基本算法。
但是,我的代码结果与Matlab的结果有很大不同。Matlab的3点滤波器似乎执行了更加主动的平滑处理。
这是使用我的代码(红色)和Matlab函数(蓝色)平滑后的嘈杂数据的比较:

这是我以函数形式编写的代码:
function [NewSignal] = smoothing(signal)
NewSignal = signal;
for i = 2 : length(signal)-1
NewSignal(i,:) = (NewSignal(i,:)+NewSignal(i-1,:)+NewSignal(i+1,:))./3;
end
end
Run Code Online (Sandbox Code Playgroud)
Matlab的功能如下:
signal = smooth(time, signal, 3, 'moving');
据我了解,Matlab的功能以相同的方式工作。它会将3个相邻箱平均为一个箱。因此,我期望两种算法都能产生相同的结果。
那么,出现差异的原因是什么?我如何调整代码以产生相同的结果?
编辑:
我的样本数据可以在这里找到。可以使用以下命令访问它:
M = csvread('DS0009.csv');
time = M(:,1);
signal = M(:,2);
Run Code Online (Sandbox Code Playgroud)
这是使用rinkert校正的新结果(红色曲线):
matlab ×1