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

 找回密码
 立即加入
搜索
查看: 510|回复: 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
    3 t; q$ ^& p. I: k% vx[n]=vx[n-1]+ux[n]6 e" h- P5 x2 g' r& ^' T. P/ L
    % vy[n]=vy[n-1]+uy[n]
    + m  g$ F" s- `0 L. V; c% rx[n]=rx[n-1]+vx[n-1]*t. f. u) K7 z) x, ~6 A2 f% J. M! i* `
    % ry[n]=ry[n-1]+vy[n-1]*t
    , n9 {4 W8 l9 f  S& O% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    3 g7 _2 ]! `! w8 v" t% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
    ! Z! d1 h  }' R( Z, m% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    * j5 [& S  W$ E5 W0 ^! s% D# q5 O% u[n]=[0;0;ux[n];uy[n]]
    2 A2 H3 \# @6 K2 {- @' c%       s[n]=As*[n-1]+u[n]1 ], V  h& M- \6 X3 _* r2 Q0 `& _7 d+ P
    %       x[n]=h(s[n])+w[n]
    1 g0 {# Y) u2 W8 ^! v4 E) ^0 [) X1 l" i
    % initialization5 q( u# T6 d, I8 i+ Z4 K9 u: A
    clear;5 U4 T' G/ A( }: W- g
    n=100;2 E: }! I8 Z0 c3 m3 i& y
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    % _9 }0 H* S2 i* yrx=zeros(1,n); % 实际位置
    ) j; z0 W! J6 o# ?$ mry=zeros(1,n); % 实际位置
    ' r1 A7 V' q3 `& ~! R/ W* P7 fvx=zeros(1,n); % 实际速度7 N$ T9 y* I% o
    vy=zeros(1,n); % 实际速度( D$ b: W) M. _
    rxe=zeros(1,n); % 精确位置
    0 C" ]- j1 b  Qrye=zeros(1,n); % 精确位置1 O0 R& j  }& _3 F' \) D- `
    vxe=zeros(1,n); % 精确速度: U+ y3 S9 h8 l  r% ?
    vye=zeros(1,n); % 精确速度5 u4 |0 }3 F: g) r2 e+ z5 ]# _
    rx(1,1)=10; % 位置初始9 x/ w1 ~1 M- ?, l8 O) J. V; Y5 I8 \
    ry(1,1)=-5; % 位置初始* E- q$ F8 ]) @9 o% {0 p% u
    vx(1,1)=-0.2; % 速度初始( {7 ]8 v* y# q; A
    vy(1,1)=0.2; % 速度初始
    0 c. f# K6 }5 q9 zrxe(1,1)=10;  X- N/ N) t1 f# X/ F
    rye(1,1)=-5;( f7 Q" b6 J! ]% b2 _, W
    vxe(1,1)=-0.2;+ u" _9 E. Y+ ^% \
    vye(1,1)=0.2;
    0 ]) h, e) H& E- _s=[rx;ry;vx;vy];
    2 w& l9 W* Y. @6 g2 Ese=[rxe;rye;vxe;vye];
    $ O! `6 X, A4 z' A) {* ?1 Pr=zeros(1,n);# k- r. L* N* o' N; A) `
    b=zeros(1,n);( I8 V4 e. ^. j# w
    rn=zeros(1,n);2 o: _) \# w) h$ Y5 z' E8 A& V& o
    re=zeros(1,n);' R( f$ g% z1 F# A% H6 _- E
    bn=zeros(1,n);
    , U! R/ y$ {( C0 @! v1 b$ a3 ^x=[rn;bn];5 T. [. b) f9 [; T. o1 A
    H=zeros(2,4,n);
    6 c9 |" B- u3 ^8 ^) x# B* C0 r; d8 ~/ n3 h; R
    ux=sqrt(0.00001)*randn(1,n);+ `% E5 @6 n/ Z/ C- r6 K
    uy=sqrt(0.00001)*randn(1,n);
    8 y" Z& ^9 z8 z2 ^wr=sqrt(0.001)*randn(1,n);# d5 ?  Q7 W& u$ `' W- }( p# D- `
    wb=sqrt(0.0001)*randn(1,n);" A5 D# j* T2 {: b) P' _

    1 n0 x* g* {( y; J. j5 JQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵3 d" c6 c! x' c  z9 x, V
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    9 H- ~8 m& D# N* q8 ^! t: o1 e
    $ P% @) F! e. l5 p( v/ D) wss=zeros(4,n);% 精确值
    - e3 S7 {* R& e( D0 B' h' C) o+ D* asn=zeros(4,n); % 估计修正值
    - S+ P+ e+ C5 }8 U% }sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值3 M9 s- d6 w1 x/ ~' l( G
    ss=zeros(4,n); % 一步预测; e1 a  Z9 A1 R* _, J/ F2 O
    hs=zeros(2,n); % 观测值预测
    , a& k5 n; N# ^+ S. g; ainn=zeros(2,n); % 新息" Z- @# V1 N7 K5 N+ }
    M=zeros(4,4,n); % 估计均方误差
    8 P- v4 q' Z; Y9 h0 RM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值  y5 {/ [' ?$ o& W5 d
    MM=zeros(4,4,n); % 一步预测均方误差
    & G# Q/ U; l* X- e' {6 GK=zeros(4,2,n); % 卡尔曼增益
    ; A: a/ A6 I2 H" b7 p5 _4 J$ [& {) `4 C+ y
    % kalman filtering& S% \2 C" C2 [5 _

    % ?7 p7 T5 `+ L5 `( a8 e  Zfor t=1:n-1
    7 r( B# r+ }: D. m0 }; Z  G%            s[n]=As*[n-1]+u[n]
    2 h9 w0 G& J. N1 H2 S' x1 j%            x[n]=h(s[n])+w[n]3 Y+ s% H5 V# _" X% F. G' u% Q: z

    ) ]% A( M' }+ }- b( J    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程9 P  y7 d) d% F7 J% d9 m
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程( ?0 _" g8 |; ?! g
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    " i: c# J/ K* T* _+ a2 W* n    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    ! x, g9 ?- T5 X    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    0 x8 j; T) X- S3 J# ?% o
    ( a) Q  V4 I' o9 p    vxe(1,t+1)=vxe(1,t); % 理论精确值, y( s0 z/ G2 ^# W
        vye(1,t+1)=vye(1,t); % 理论精确值6 m% n5 H% i2 t* d5 d# A
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值' a- Y9 e4 Y: }  L8 R$ @2 y
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    0 W7 ^) [1 N( N( R+ v    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*11 s* y( ]4 |! ?2 |

    8 F& b3 O, |2 w6 C7 }    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    , E7 g) E9 d! ?/ H    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差), a* L5 t/ y9 z; W" }/ o% e& W  R
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    ! V" y% t+ [/ I5 B; F0 D7 i    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    ; U" \" m- m) J    bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    1 F1 {& C) r! f) |# {. H" n2 I5 x    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*14 W3 G' m7 N8 z: c& ~
    . k) c0 b, C7 t5 ]! V- z! }
        % 对观测方程求导,得到雅可比矩阵H,维数2*4
      I  J5 R& v& s% x( U* m    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];' m5 c' {- z* I- D' F1 k! W

    4 z4 C6 ?/ R0 m1 x' n2 G& V2 r4 c. d
    * d4 y+ n( H' q* z/ F    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    3 J, g3 t5 O% x, w* j* c+ m    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    , S8 v5 }& p  M( _    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差3 ^: o  t8 L0 M% e9 a  M; t' `  a# o
        ss(:,t+1)=A*sn(:,t); % 一步预测6 D% p- @' e! ?: t+ {4 I
        hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测
    6 `5 t* i( ?4 }8 V' D; A; u    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息4 h6 H! y; k  B6 U
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    : x$ A- d5 v9 N* c5 G9 aend$ N3 O4 k' o% j5 ]

    + z# Z. c$ ]/ a+ J& J" F3 L1 Osubplot(2,1,1);
    2 G. S/ e  S$ rplot(sn(1,:),sn(2,:)); % kalman估计值5 D8 ?8 S$ @# ?+ B% {. N+ X
    hold on;
    1 O4 h& w7 y5 `$ e# cplot(se(1,:),se(2,:),'-r'); % 理论精确值" r0 R) ~( ^4 ~0 H! F* ?0 @6 r# j' ~
    # R; a# n( P: Z7 K4 ~3 @/ }: P: W
    subplot(2,1,2);
    & ^; }" ~- v7 R' z2 Wplot(rn); % 实际测量距离
    : F0 f- \4 G7 ihold on;
    7 p2 S& d9 i2 \* yplot(re,'-g'); % 理论精确值7 J) l% f+ t- `8 j
    % B$ T# P: b/ X( O
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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, 2024-4-28 20:28

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

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