展开全部
这相当于加窗对 x 做滑动平均,挺常见的需e5a48de588b63231313335323631343130323136353331333363393034求,可以试试下面的代码:x = (1:20).';
nx = length(x);
% 相邻多少元素取平均
nwin = 9;
% 把 x 折叠成想要的样子。
ncol = nx - nwin + 1;
colindex = 0:(ncol-1);
rowindex = (1:nwin).';
xin = zeros(nwin, ncol, 'like', x);
xin(:) = x(bsxfun(@plus, colindex, rowindex)) % 没加分号,可以看看 xin 折叠成了什么样。
% 把头尾没算的元素插入回 y 里。
padding = fix(nwin/2) - 1;
y = [
x(1:1+padding);
mean(xin).';
x(end-padding:end)
];
也可以用自带的 filter 来处理滑动平均。这种方法灵活性差点,不过对于你的需求正合适。:x = (1:20).';
nwin = 9;
yout = filter(ones(1, nwin)/nwin, 1, x);
padding = fix(nwin/2) - 1;
y = [
x(1:1+padding);
yout(nwin:end);
x(end-padding:end)
]