Я не нахожу причину, по которой функция filter
, похоже, выводит что-то отличное от функции smoothdata
.Они оба должны реализовать сглаживание окна 5
с использованием скользящей средней .Может кто-то разбирается в этих функциях объяснить, что происходит?
Вот ссылка> <на документацию, адаптированный оттуда код, добавленный <code>smoothdata (и для дополнительной загадки, функция smooth
, которая тоже не та):
% from documentation
t = linspace(-pi,pi,100);
rng default %initialize random number generator
x = sin(t) + 0.25*rand(size(t));
windowSize = 5;
b = (1/windowSize)*ones(1,windowSize);
a = 1;
y = filter(b,a,x);
%this is added for this example, you need >Matlab 2017a to run this
y2=smoothdata(x,'movmean',windowSize)
%y3=smooth(x,100); %bug in the code (obsolete)
y3=smooth(x,windowSize);
%now plot data
figure;
plot(t,x)
hold on
plot(t,y)
plot(t,y2)
plot(t,y3)
legend('Input Data','Filtered Data','smoothdata','smooth')
%show obvious parts of plot
xlim([0 3]);
ylim([0 1.25]);
Вот что я получу в качестве вывода:
![WTF](https://i.stack.imgur.com/Lu4N4.png)
Вот некоторые несоответствия в первой части графика:
%this is added for this example, you need >Matlab 2017a to run this
y2 = smoothdata(x,'movmean',[windowSize-1,0]);
y3 = smoothdata(padarray(x,[0 2]),'movmean',[windowSize-1,0]);
%now plot data
figure(1); clf;
plot(t,x)
hold on
plot(t(1:10),y(1:10))
plot(t(1:10),y2(1:10))
plot(t(1:10),y3(1:10))
legend('Input Data','Filtered Data','smoothdata',['padded ' char(10) 'smoothdata'])
%show obvious parts of plot
xlim([-3.1784 -2.3858]);
![WTF2](https://i.stack.imgur.com/WJh2I.png)