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

 找回密码
 立即加入
搜索
查看: 597|回复: 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
    ' q  U! M8 {" }+ @% vx[n]=vx[n-1]+ux[n]# Y) n1 Z4 ]1 u4 ^" ^) Q
    % vy[n]=vy[n-1]+uy[n]
    % |* \7 n( L  H( h: Q% rx[n]=rx[n-1]+vx[n-1]*t2 x! ]7 J! ~9 c6 @! e
    % ry[n]=ry[n-1]+vy[n-1]*t
    5 n  p/ `- q# F; E% s[n]=[rx[n];ry[n];vx[n];vy[n]]: X" q5 a4 T- q4 |/ l! C
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]% b5 ]; X1 }. ?# Z: Z( d- b
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]" b) _# }6 w! F
    % u[n]=[0;0;ux[n];uy[n]]& T- J4 M8 U2 ?  A+ P/ F# p1 n
    %       s[n]=As*[n-1]+u[n]
    / `( Y) E: `' }2 L' {5 {, T+ y9 [! x%       x[n]=h(s[n])+w[n]
    9 r' O5 ~$ H, {7 W5 s; f' `, b' \3 O0 d. R1 S
    % initialization
    + M& @1 I, c3 E1 ]. l; L& L! sclear;
    ' b' M) O+ L/ _n=100;  K* }. J5 F* a7 _
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    5 Q; a2 R- {' k- a. _rx=zeros(1,n); % 实际位置, s" _* F: w" h1 o0 g4 k! i8 R4 W9 G3 X
    ry=zeros(1,n); % 实际位置
    / `2 g3 J, G& E& e3 H7 n6 Tvx=zeros(1,n); % 实际速度
    0 ^3 v' v7 ?4 D3 Q: Qvy=zeros(1,n); % 实际速度
    4 C- {  h: Q/ r1 k- |& j, Brxe=zeros(1,n); % 精确位置
    2 y( w+ l1 Z+ h' ^8 D& Prye=zeros(1,n); % 精确位置
    # K: n' E) z2 J7 \4 U# O5 z! [vxe=zeros(1,n); % 精确速度9 f8 U8 R3 R% r7 m( N9 N2 Z
    vye=zeros(1,n); % 精确速度* T( }7 Z; M& a
    rx(1,1)=10; % 位置初始/ h( {: t7 z+ {
    ry(1,1)=-5; % 位置初始
    7 m4 w- g6 O# k+ ^; ]vx(1,1)=-0.2; % 速度初始$ X" j6 j" ^5 R4 C
    vy(1,1)=0.2; % 速度初始
    0 P) {7 A' t$ y) g7 Mrxe(1,1)=10;
    8 @) R8 ~4 P. V3 h# Orye(1,1)=-5;3 Q$ e. u9 |3 Y0 d5 F& k6 E! |
    vxe(1,1)=-0.2;8 B7 M1 x6 U+ Y+ |
    vye(1,1)=0.2;
    - A4 b- i( d( h% g! n( Ss=[rx;ry;vx;vy];
    3 R4 c6 {; J  Hse=[rxe;rye;vxe;vye];9 M5 v' ?! T+ X
    r=zeros(1,n);0 h" N2 e% f- [6 R2 u* u  d" ?6 \
    b=zeros(1,n);
    $ @2 T/ \7 L' U' rrn=zeros(1,n);
    ( D- R# _/ l: S. u' m" Wre=zeros(1,n);
    : ]7 A2 @5 @, i5 F9 a/ Gbn=zeros(1,n);
    % I5 b' }( x, |5 T0 ax=[rn;bn];1 }4 G: n2 W8 L5 S$ z/ z
    H=zeros(2,4,n);; ]$ ~3 h3 G, x- \  }9 E
    , R! B1 N+ g, t% ]5 b3 ~9 {
    ux=sqrt(0.00001)*randn(1,n);! J# X" ^3 ]0 H. ^7 b% H0 F
    uy=sqrt(0.00001)*randn(1,n);! }  n2 @, a6 i4 n- F- b3 s
    wr=sqrt(0.001)*randn(1,n);' k% W# k7 q# v2 S* V* v, e
    wb=sqrt(0.0001)*randn(1,n);; H, N4 ~) K$ @! h- s' J; v

    5 X9 c/ q) @" q* ]; `) J# FQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵( D9 c! l) w1 f
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    ) r& ]: L7 x& K/ `! U* y: y8 B0 e8 e0 g. k& t0 V
    ss=zeros(4,n);% 精确值
      z7 ?2 Z: x0 C9 bsn=zeros(4,n); % 估计修正值
    * V; B# @3 J2 ?: ~) Rsn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值
    - L  B+ x4 a3 e! `6 e. h' xss=zeros(4,n); % 一步预测6 w% j, M1 d- x/ R  [
    hs=zeros(2,n); % 观测值预测
    ) y7 k: d0 M1 o. Uinn=zeros(2,n); % 新息
    & n3 P3 J1 |9 Q6 TM=zeros(4,4,n); % 估计均方误差
    : F6 r* k- Z( ^1 ~8 S/ P# j+ Q) }M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    8 V% c4 Z3 z% ~% U! o" XMM=zeros(4,4,n); % 一步预测均方误差( V5 m/ i: p* u/ t
    K=zeros(4,2,n); % 卡尔曼增益9 E$ ~$ }% s% s

    ) ^5 O+ ?3 t& j/ k( W+ x% kalman filtering, [) \  J; K% n4 T) n# m
    & q5 X# t; L( U; c
    for t=1:n-17 x) d+ {( \) [5 A! M  h, E
    %            s[n]=As*[n-1]+u[n]+ v0 j* h% b: O% ]5 J$ G* d
    %            x[n]=h(s[n])+w[n]" K- ]$ S0 ?7 J  P0 V

    3 |& s) H7 x- m; f2 m    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    ; C! Y  |. H% `    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程$ C1 Z; f! l; d! s* o
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    7 P( Y, N  k4 x% S$ G9 D    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    9 [) @- H8 m+ `2 ~/ J    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    ) s/ L0 M; a! n% w. g
    9 E  D' \/ \& _    vxe(1,t+1)=vxe(1,t); % 理论精确值  U  V& F5 T4 e% U  }
        vye(1,t+1)=vye(1,t); % 理论精确值6 H9 U3 L" N2 B4 V1 Z( E+ V9 _- m
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值7 S1 v2 H- R' w# Z( B  V( v' `6 ^
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值/ ]  d1 i) r. i0 a' j
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1) _9 E3 ^; p$ g' T% K  ^5 j
    5 q; K. [$ i+ H2 w- L- \
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差), k# W4 k9 B, [, O2 g
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)
    $ e" ^# Z+ m5 U" ^, U    rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离9 z, P* Y( K  S5 w% v
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)# R9 \0 A; b; o) p7 ?6 M
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位9 b2 _7 g% y' D; j9 r8 j3 y
        x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1# e1 P: _$ v' X7 J, g
    0 r7 k& \+ Q9 I8 C
        % 对观测方程求导,得到雅可比矩阵H,维数2*49 T  q5 i6 [6 t* _# n- {
        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];
    & j9 {( j; Y: D* C
    % ^) c! U* L; a/ e  Q7 ^
    " L" K' O: H$ V% }- M" @( r9 E: T8 a    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    & K  D) l8 ~/ v4 M# b    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益" Z) U0 \; C& [. d! g7 k# }
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差
    + v1 h# F$ n5 U$ m; ~  @    ss(:,t+1)=A*sn(:,t); % 一步预测
    9 m" B. Q# w% V- j# L3 k    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测0 b; V$ k" a, x! ]% j* v' _
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    3 A4 Y2 B) E" m2 V) b0 J    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正4 ~% _: F4 z3 p1 z) l, M
    end" u+ J; L. \, x+ c$ T( ^7 w2 v  A

    " T5 I2 z% n: N7 s+ q0 Nsubplot(2,1,1);
    $ @; U8 k! w6 s) hplot(sn(1,:),sn(2,:)); % kalman估计值
    0 M) l/ H7 \2 Q5 I6 phold on;
    4 x/ L2 S7 m' I( N$ \plot(se(1,:),se(2,:),'-r'); % 理论精确值5 T4 J, w, f- I$ P: n& d. h% l

    % n7 q) ^% J8 {- A7 V6 {/ M3 ~6 L( Tsubplot(2,1,2); 8 w  l* i7 o1 e! \, ~1 _
    plot(rn); % 实际测量距离2 l5 e+ j9 T2 x2 r, H" C  u
    hold on;
    ! G; P, p3 j5 X8 W1 `& Wplot(re,'-g'); % 理论精确值( @; W& u/ m: o

    & b8 o. O4 ~5 }/ ]
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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, 2025-4-21 12:06

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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