窗口移动计算方法
例子
在很多算法中都会涉及到窗口滑动,比如基于新息序列更新的自适应卡尔曼滤波器算法中便会使用到。
已知一个数列:OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15],定义窗口长度为5,每次滑动一个数位,编写程序求Prk。以MATLAB为例,有如下两个方法,直接看程序。
方法1
matlab
OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15];
L = 1;
n = 5;
S = 0;
ts = length(OCV);
Error_x = zeros(1,n);
for i = 1:1:ts
if i <= n
Error_x(1,i) = OCV(i);
S = S + Error_x(1,i);
Prk = S/i;
else
S = S - Error_x(1,L);
Error_x(1,L) = OCV(i);
S = S + Error_x(1,L);
L = L+1;
if L > n
L = 1;
end
Prk = S/n;
end
a = Prk
end
方法2
matlab
OCV = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15];
n = 5;
S = 0;
ts = length(OCV);
Error_x = zeros(1,n);
for i = 1:1:ts
if i <= n
Error_x(1,i) = OCV(i);
S = S + Error_x(1,i);
Prk = S/i;
else
S = 0;
for j = 1:1:(n-1)
Error_x(1,j) = Error_x(1,j+1);
S = S + Error_x(1,j);
end
Error_x(1,n) = OCV(i);
S = S + Error_x(1,n);
Prk = S/n;
end
a = Prk
end