经常遇到对连续的一段序列求平滑和均值
求当前时刻 t 前 N 个样点的加权值;
y=∑t=1Nkt∗xt
在代码实现时若每个时刻点都计算一遍,非常耗时;对于一些特殊的
kt
可以采用特殊办法处理。
对:
kt=1c∗k0∗(1−k);kt−1=1c∗k1∗(1−k);...(0<c<=1)
为了满足:
1==∑i=t−N+1t1c∗kt−i∗(1−k)
即:
kN=1−c
N 决定 c 实现缓存的个数;k 和 c根据自己实际需求适配。
待续 。。。。。
%% matlab test
N = 50;
o = zeros(N,1);
i = 1:N;
k = 0.93;
c = 1/(1-k^N);
o(1) = (1-k)*c;
for i = 2 : N
o(i) = k * o(i-1);
end
figure; plot(o);
disp([sum(o) c]);