Matlab 滤波器与 smoothdata

标签 matlab matlab-figure smoothing

我没有找到 filter 函数似乎输出与 smoothdata 函数不同的内容的原因。它们都应该使用移动平均值实现 5 的 windowSize 平滑。精通这些功能的人可以解释发生了什么吗?

这是 > link <在文档中,下面的代码改编自那里,添加了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

情节第一部分存在一些不一致之处:

%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

最佳答案

window parameter for smoothdata ,如果是标量,则产生一个以原点为中心的窗口。 filter 实现因果过滤器,这意味着它采用 windowSize 先前样本的平均值。因此,这两个结果之间的差异是 windowSize/2 样本的偏移。您可以在情节中清楚地看到这种转变。使用两个参数来模拟filter的结果:

y2 = smoothdata(x,'movmean',[windowSize-1,0])

smooth function还实现了移动平均,第二个参数是窗口大小。您在此使用 100,而不是 windowSize,后者的值为 5。因此,该结果是 20 倍以上值的平均值。使用正确的窗口大小复制结果:

y3 = smooth(x,windowSize);

我认为y3将被移动。 filter 结果,就像问题中的 y2 一样。

关于Matlab 滤波器与 smoothdata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50707331/

相关文章:

arrays - 如何合并两个元胞数组的数据?

python - 反向传播的扩展

matlab - 是否可以绘制混淆矩阵的子图?

R ggplot2 geom_smooth 不添加负值

r - 如何使用 R 中的加权(调查)数据制作漂亮的无边界地理专题/热图,可能对点观测使用空间平滑

matlab - 根据输入在matlab中实现的异常行为算法

matlab - 带 fft 的点积

matlab - 从 Matlab 输出高分辨率全图图形

matlab - 如何在 Matlab 绘图中插入两个 X 轴

python - 如何在Python中绘制平滑线?