简体   繁体   English

matlab 卡尔曼滤波编码

[英]matlab kalman filter coding

T = 0.2;
A = [1 T; 0 1];
B = [T^2 / 2 T];
H = [1 0];
G = [0 1]';
Q = 0.00005;
R = 0.006;
x1(1) = 0;
x2(1) = 0;
x1e(1) = 0;
x2e(1) = 0;
xest = [x1e(1) x2e(1)]';
x1p(1) = 0;
x2p(1) = 0;
PE = [R 0; 0 0];
PP = A * PE(1) * A' + Q;

for i= 1:25
    if i < 10
       u = 0.25;
    else
       u = 0;
    end
    x1(i+1) = x1(i) + T * x2(i) + (T^2 / 2) * u;
    x2(i+1) = x2(i) + T * u + sqrt(Q) * randn;
    y(i+1) = x1(i+1) + sqrt(R) * randn;

    PP = A * PE * A' + G * Q * G';
    K = PP * H' * inv(H * PP * H' + R);
    PE = [eye(2) - K * H] * PP;

    xpredict = A * xest + B * u;
    xest = xpredict + K * (y(i+1) -H * xpredict);
    x1e(i+1) = [1 0] * xest;
    x2e(i+1) = [0 1] * xest;
end

Unable to perform assignment because the left and right sides have a different number of elements.无法执行赋值,因为左侧和右侧的元素数量不同。

Error in rrrr (line 34) x1e(i+1) = [1 0] * xest; rrrr 错误(第 34 行)x1e(i+1) = [1 0] * xest;

how i can solve the error我该如何解决错误

xpredict must be a 2x1 vector. xpredict 必须是 2x1 向量。 To solve it, you need to transpose B in line 5 ie, B = [T^2 / 2 T]', Since from Newton's laws of motion with constant velocity, we have要解决它,您需要在第 5 行中转置 B,即 B = [T^2 / 2 T]',因为根据牛顿匀速运动定律,我们有

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM