设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 719|回复: 2

扩展卡尔曼滤波小程序

[复制链接]
  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
    发表于 2017-4-5 11:56:50 | 显示全部楼层 |阅读模式
    电子图书
    电子图书名: 扩展卡尔曼滤波小程序
    编者: H
    所属专业方向: matlab
    内容简介: 简单的卡尔曼滤波程序
    出版社:
    来源:

    马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

    您需要 登录 才可以下载或查看,没有账号?立即加入

    ×
    % function  EXT Kalman Filtering
    ! R) t( q: T1 S" v  }  s% vx[n]=vx[n-1]+ux[n]4 t8 b5 a) P: C  N7 x* J! ]
    % vy[n]=vy[n-1]+uy[n]5 L! M: m) |0 I- G  U6 O/ J
    % rx[n]=rx[n-1]+vx[n-1]*t
    ) {5 ^" k/ X9 W% ry[n]=ry[n-1]+vy[n-1]*t3 U% p$ l8 M% w
    % s[n]=[rx[n];ry[n];vx[n];vy[n]]
    ) `0 y# Z  y9 I: t9 ~( A( ?% h% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]  G" H- Z' |; n* R+ E4 |
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    0 m# r1 ?# n! `% u[n]=[0;0;ux[n];uy[n]]
    " n8 Q3 V8 \$ u! s( p7 D%       s[n]=As*[n-1]+u[n]
    1 D0 ]2 ]" J" T) I9 Q( w9 g2 N4 x) `%       x[n]=h(s[n])+w[n]
    ( D  X7 k/ y1 Y0 W6 t. V( O- u0 [) ^& K& h! H! V* {
    % initialization! \0 ?! k* D* s; K& e5 h0 n
    clear;
    6 W; N2 j3 @8 ?3 bn=100;
    * K, Z3 O3 z7 Q6 Z0 yA=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];5 T; J! a8 s- l( Y7 S' }( X0 b
    rx=zeros(1,n); % 实际位置9 G( e- m. Y2 l% ~0 ]! h/ p
    ry=zeros(1,n); % 实际位置+ N; e0 q% J0 B0 T5 A, g
    vx=zeros(1,n); % 实际速度
    + i& A: C' q/ Q+ y% ivy=zeros(1,n); % 实际速度
    * z( n! }9 J! Yrxe=zeros(1,n); % 精确位置$ y- F% Z; [5 ]6 G7 N4 Q. T
    rye=zeros(1,n); % 精确位置
    # _6 @$ S! N* rvxe=zeros(1,n); % 精确速度4 }( A' b7 M% y& `
    vye=zeros(1,n); % 精确速度. a+ q4 ~7 d' U9 ?7 V
    rx(1,1)=10; % 位置初始7 ~6 y; t7 s2 z; L& Y9 L8 o" o9 H7 O
    ry(1,1)=-5; % 位置初始
    , b9 k1 v0 A1 H7 J0 P. ^vx(1,1)=-0.2; % 速度初始
    0 Z6 ?! I% a7 R. _7 @: I! Dvy(1,1)=0.2; % 速度初始
    . B8 x/ ?8 N' a9 o( m: m& rrxe(1,1)=10;5 d1 c! Q3 K9 m4 v
    rye(1,1)=-5;
    & ]* N& ]7 w! f7 |, uvxe(1,1)=-0.2;0 V, M/ G& X* K  H) k5 o8 [
    vye(1,1)=0.2;
    + d/ G* ~5 Z3 W. E1 C3 qs=[rx;ry;vx;vy];
    " }1 M5 s" B) M) jse=[rxe;rye;vxe;vye];4 `; r' e9 H1 y& O% {- e
    r=zeros(1,n);! l# ^7 L' J$ f% M
    b=zeros(1,n);
    2 M7 i$ t9 ~: n# |( z) A% ~rn=zeros(1,n);
    : [( U) ?7 Y# \/ Qre=zeros(1,n);
    7 j/ |! U9 G0 a' ?7 T: i4 Obn=zeros(1,n);
    $ t2 U9 R/ `8 s$ D& Y3 Nx=[rn;bn];6 `9 [0 N: d, |2 A# l, k' y2 x- Q
    H=zeros(2,4,n);1 Z! j1 R8 m- w; N

    $ A& u( L; q9 C9 A, J! {9 vux=sqrt(0.00001)*randn(1,n);7 b2 i' M0 T: \4 p
    uy=sqrt(0.00001)*randn(1,n);  n# L- \" i+ z' ^
    wr=sqrt(0.001)*randn(1,n);
    5 Z  g3 a" i8 m9 pwb=sqrt(0.0001)*randn(1,n);* q6 @( Q/ ]. \6 \

    ) E4 J9 L$ C2 k8 d4 NQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    / I" a( [' a$ e: T0 fC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    9 J( O; `! p1 L' A% n; Y$ B( b5 A! L
    ss=zeros(4,n);% 精确值
    2 N' m0 H9 v* x" U+ N: G! _sn=zeros(4,n); % 估计修正值+ @( z$ T3 Y$ r6 }) x0 b* Q
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值
    * \4 }. I4 [5 z, _1 G8 O7 nss=zeros(4,n); % 一步预测3 w2 z) c, ^# B* Z
    hs=zeros(2,n); % 观测值预测/ |# H7 z0 L+ S) |- \* G
    inn=zeros(2,n); % 新息! `! x; t5 C9 W6 l5 Z" Q8 w3 m- _
    M=zeros(4,4,n); % 估计均方误差9 L; Z+ q4 k$ k9 ]' a8 f& I3 k- T
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值& G; q1 s. A3 N* p3 B# h. x
    MM=zeros(4,4,n); % 一步预测均方误差; I4 f* P+ S9 \1 U$ b' ~# l7 t$ w- S
    K=zeros(4,2,n); % 卡尔曼增益
    % j9 p" m4 k; ~0 M5 c1 @8 O" y% b
    ' A6 Y- E6 M  \, ]4 H' w3 Q% kalman filtering( [1 j) _8 R! R

    1 |9 a- `2 K7 {$ d, Vfor t=1:n-1
    + p! D6 s; e& B! Z& A%            s[n]=As*[n-1]+u[n]' B6 n  r2 {6 k
    %            x[n]=h(s[n])+w[n]+ M( S0 w9 ^8 a1 i' K
    3 W2 n6 O. j$ j( t
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    ) ^/ X$ I6 O. H8 x; q5 E: U    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    2 ^4 x+ o$ l& r/ n% o- c+ |- s    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    ) J- u7 H! f; }' Z# ~7 j4 Z% ^    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
      T; {, e  y6 R8 p, K    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    * V5 m- u, @/ `" h* ]  T: C$ N. E$ `/ b# c6 {- c
        vxe(1,t+1)=vxe(1,t); % 理论精确值. s! b; x' J  u2 ?
        vye(1,t+1)=vye(1,t); % 理论精确值% |5 \% b; P' E/ u
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值8 g* k; G6 O8 |
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    & f8 i0 e  i9 I  c. Q    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1
    7 y+ O' ]6 [1 Q; J
    - B( Z4 e+ o( Q+ Q$ P* ^    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    7 b5 S7 Z8 U: p, A3 g( S    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)' O4 v4 m+ g6 j, i
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    % k4 y* q: v" m7 v4 ^  L1 z    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    + K0 J& h. y/ Y4 t! W3 r/ f6 u1 R7 ?& ]    bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    2 u/ A2 v" p8 G% ~    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*16 D; w# a* \, D9 y7 o
    - {8 C0 B' u5 p$ |+ D/ ~
        % 对观测方程求导,得到雅可比矩阵H,维数2*4
    " V% c+ |9 C- c) d    H(:,:,t+1)=[rx(1,t+1)/((rx(1,t+1)^2+ry(1,t+1)^2)^(1/2)) ry(1,t+1)/((rx(1,t+1)^2+ry(1,t+1)^2)^(1/2)) 0 0;-ry(1,t+1)/(rx(1,t+1)^2+ry(1,t+1)^2) rx(1,t+1)/(rx(1,t+1)^2+ry(1,t+1)^2) 0 0];  D4 y9 @0 z8 H5 E5 y0 v$ X7 @

    4 \! G3 ]* T3 L: `5 R# f( k2 U2 R2 `4 u1 K/ X* l2 C  D  c" t  ?/ q$ O
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    , O5 B2 p7 L! H, b5 x! w    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益& D, U2 b5 L' f' Q3 \
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差* I1 }0 r: n, R
        ss(:,t+1)=A*sn(:,t); % 一步预测
    ( }" U7 [8 y; c0 I% M9 k5 Y' s    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测
    2 H8 j+ ]! p1 [  n    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息" G4 S% ^# h- n3 i
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    . P. i+ L6 Z; u8 L. O% Bend
    + V! A( o+ m+ G1 n5 r: j% e0 L- x6 J$ Z8 k1 a2 I6 U8 k
    subplot(2,1,1);0 R! i9 O, R2 \0 {9 g
    plot(sn(1,:),sn(2,:)); % kalman估计值5 [+ r9 l4 J/ p. i. o
    hold on;- n1 ]' i  @3 E# e$ q1 o, m3 ?
    plot(se(1,:),se(2,:),'-r'); % 理论精确值
    ; W  V! a5 c! P: p1 D& K5 |% I/ z2 i& F8 o0 ^4 w( Q6 ^
    subplot(2,1,2); 2 r& t3 a( p* J. M8 O3 p
    plot(rn); % 实际测量距离8 u% p0 |0 ?# C5 X  g( O
    hold on;; {. ~% ~( j2 c' \
    plot(re,'-g'); % 理论精确值
    ' M+ c9 j7 ^# i: X) c) W0 @% E0 I
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
     楼主| 发表于 2017-4-5 11:58:00 | 显示全部楼层
    这是一个位置和速度跟踪的小程序,感兴趣的可以看一下
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    [发帖际遇]: 帮助老师傅注册上研学论坛,HYSYYRPS受奖励威望5 点. 幸运榜 / 衰神榜
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    回复 推荐 踩下

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
     楼主| 发表于 2017-4-5 11:59:36 | 显示全部楼层
    有没有同学是电力系统方向的,有的话,有没有做电力系统状态估计方向的,可以交流下
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    回复 推荐 踩下

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2026-5-19 18:02

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表