计算移动平均数
我需要在for循环内计算数据序列上的移动平均数。我必须得到N = 9天的移动平均数。我正在计算的阵列是365个值(M)的4个序列,它们本身就是另一组数据的平均值。我想绘制我的数据与一个阴谋的移动平均值的平均值。计算移动平均数
我用Google搜索了一下关于移动平均和“转化”命令,发现这点我尝试在我的代码:实现东西
hold on
for ii=1:4;
M=mean(C{ii},2)
wts = [1/24;repmat(1/12,11,1);1/24];
Ms=conv(M,wts,'valid')
plot(M)
plot(Ms,'r')
end
hold off
所以基本上,我计算我的平均值,并用(错误绘制它)移动平均线。我从mathworks网站上选择了“wts”值,所以这是不正确的。 (来源:http://www.mathworks.nl/help/econ/moving-average-trend-estimation.html)但我的问题是,我不明白这个“wts”是什么。谁能解释一下?如果它与值的权重有关:在这种情况下无效。所有的值都加权相同。
如果我这样做完全是错误的,我能得到一些帮助呢?
我最诚挚的感谢。
使用CONV是实现移动平均一个很好的方式。在你使用的代码中,wts是你衡量每个值的权重(正如你猜测的那样)。该矢量的总和应该总是等于1。如果你想均匀加权每个值,做一个大小为N移动过滤器,那么你会想这样做
N = 7;
wts = ones(N,1)/N;
sum(wts) % result = 1
使用CONV“有效”的说法会导致有女士值较少比你有M.如果您不介意零填充的效果,请使用“相同”。如果你有信号处理工具箱,你可以使用cconv,如果你想尝试一个圆形的移动平均线。像
N = 7;
wts = ones(N,1)/N;
cconv(x,wts,N);
应该工作。
我这样做:
% does moving average on signal x, window size is w
function y = movingAverage(x, w)
k = ones(1, w)/w
y = conv(x, k, 'same');
end
直接从here撕开。
要在当前的实施意见。 wts
是加权向量,来自Mathworks的加权向量是平均值13点,特别关注其余一半的权重的第一个和最后一个点。
谢谢,我想我现在已经明白了! – 2014-09-23 19:52:21
有两个更多的选择:
1)filter
从DOC:
您可以使用
filter
找到一个正在运行的平均值,而无需使用一个for循环。 本示例使用窗口大小为5的 查找16元素向量的运行平均值。
data = [1:0.2:4]'; %'
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
2)smooth
作为曲线拟合工具箱(其可在大多数情况下)
从DOC的一部分:
yy = smooth(y)
平滑在所述列向量y
数据使用移动的 平均过滤器。结果在列向量yy
中返回。对于均线 默认跨度为5。
%// Create noisy data with outliers:
x = 15*rand(150,1);
y = sin(x) + 0.5*(rand(size(x))-0.5);
y(ceil(length(x)*rand(2,1))) = 3;
%// Smooth the data using the loess and rloess methods with a span of 10%:
yy1 = smooth(x,y,0.1,'loess');
yy2 = smooth(x,y,0.1,'rloess');
感谢您的帮助,这个工作的! – 2014-09-23 19:52:54