Octave:平滑值序列(不是经典的移动平均线)

Octave: Smoothing a value-series (not a classical Moving average)

我需要一个函数,其中 o=f(v) returns 一个包含 o(i)=(v(i)+v(i+1))/2 的向量,所以在其他字数:

(v(1)+v(2))/2
(v(2)+v(3))/2
(v(3)+v(4))/2
(v(4)+v(5))/2
...

例如对于输入向量

v = [1;3;5;3;9;9]

结果会是

[2;4;4;6;9]

那是什么?移动平均线?平滑函数? 在 Matlab 中似乎有“平滑”,这可能是我正在寻找的,但我在 Octave 中看不到。 预先感谢您的提示。

有多种方法可以做到这一点。一个简单的实现是

(v(1:end-1)+v(2:end))/2

对于更复杂的移动平均线,这会有点麻烦,在这种情况下,您可以使用卷积

conv(v, [0.5, 0.5], 'valid')

这里是第二个数组 [0.5, 0.5] - 称为“内核” - 定义连续值的加权方式。

最后,在新版本的八度音阶中还有 movmean

对我来说,它看起来像插值。见 interp1:

v = [1;3;5;3;9;9];
n = numel(v);
iv = interp1(1:n, v, 1.5:n);   % or any other equally-spaced x values

结果:

iv =
   2   4   4   6   9