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

 找回密码
 立即加入
搜索
查看: 584|回复: 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 Filtering7 n0 z: A# r+ ]* I6 J
    % vx[n]=vx[n-1]+ux[n]
    8 J# D. i& e5 n( H% vy[n]=vy[n-1]+uy[n]) L' j+ v8 P2 a) |" \) p
    % rx[n]=rx[n-1]+vx[n-1]*t0 @4 ~% {1 q6 `! G
    % ry[n]=ry[n-1]+vy[n-1]*t
    + f+ _* |2 i* c0 ]% M: ?5 D% s[n]=[rx[n];ry[n];vx[n];vy[n]]$ J8 Y, b6 D; {
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]" ~2 w% d# `3 [; r' _2 E  k+ \7 s3 d
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]$ }, u& @, g: o
    % u[n]=[0;0;ux[n];uy[n]]
    9 ?2 n) H5 @' X; \  E4 z( ^0 R* s7 `$ b%       s[n]=As*[n-1]+u[n]4 `' @# w' W, x; {" M
    %       x[n]=h(s[n])+w[n]' N6 M; j/ `# ]
    0 [6 B, V3 O( I5 i5 ^8 J
    % initialization: Y9 d+ D- b  \" Q
    clear;
    * y4 I% ?( a2 w8 R0 a7 kn=100;+ {. |  N7 _1 ?0 t0 C, J6 P9 Y) k
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];! t! o4 _0 W2 b/ f4 s5 ]. A: V9 I, f
    rx=zeros(1,n); % 实际位置# [/ r8 r- q5 B8 w
    ry=zeros(1,n); % 实际位置
    ( `2 k4 O1 n8 m2 ^1 t% c0 b# \vx=zeros(1,n); % 实际速度3 ?- u5 z" `2 A& Y. Y
    vy=zeros(1,n); % 实际速度) Q: r3 t/ K+ j6 K: l" F* N
    rxe=zeros(1,n); % 精确位置5 A7 a! J4 E$ |5 X! h' t" S
    rye=zeros(1,n); % 精确位置
    1 S. k& O1 d) R! _$ @, Kvxe=zeros(1,n); % 精确速度6 A1 E7 J% U. r. k+ u
    vye=zeros(1,n); % 精确速度& P( o% X" c, M
    rx(1,1)=10; % 位置初始
    5 ?' l( ^4 S2 Z" n. ~/ rry(1,1)=-5; % 位置初始  `' ~8 _3 I1 B9 b% R5 R% y' m
    vx(1,1)=-0.2; % 速度初始/ U/ n8 V0 U( w) c
    vy(1,1)=0.2; % 速度初始
    + Q5 ]4 Q% e  N4 i9 s& r4 prxe(1,1)=10;5 Y" K% I; [# E8 q- [
    rye(1,1)=-5;+ P5 w4 j0 W( A  D
    vxe(1,1)=-0.2;
    % s/ @* Y9 i% F5 Y1 d# Uvye(1,1)=0.2;& s. W2 x. O% _8 W7 T  I' J
    s=[rx;ry;vx;vy];( ?2 J) o& P: S, c& {
    se=[rxe;rye;vxe;vye];
    3 Z! H9 j* ?. O2 J& H# lr=zeros(1,n);0 \. Q1 U6 b# s
    b=zeros(1,n);
    - P, W- ?  c; g6 ]3 x  \: rrn=zeros(1,n);
    2 H" L% v2 s+ B. @6 _re=zeros(1,n);
    # j. P; M" A* a3 _9 L; pbn=zeros(1,n);
    * @  ~5 \2 G1 M! y/ x6 [x=[rn;bn];  W, T1 e' \; b+ [' k9 v
    H=zeros(2,4,n);& n- b; }4 o0 Y

    / ]+ E7 s8 F! c/ _/ b3 Zux=sqrt(0.00001)*randn(1,n);0 R9 M. R( O: u+ K1 M
    uy=sqrt(0.00001)*randn(1,n);3 }* }: U& G! N- h2 x# F
    wr=sqrt(0.001)*randn(1,n);
    6 y  T8 z& a6 `) y& O( V  K6 {wb=sqrt(0.0001)*randn(1,n);( }9 [. ^5 u2 l! t! }

    - j0 ~) [; F5 [) H  o( EQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    $ y+ }# t4 A7 J6 V" G+ G+ `$ I) |C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    ) o- `, T' j2 l- C" ?; s' z- ]4 W, z5 \. K6 I: w8 ~2 I
    ss=zeros(4,n);% 精确值
    & H+ E1 Z, K+ g! @sn=zeros(4,n); % 估计修正值
    ) D- |2 S* g4 R6 p/ l% E0 dsn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值, k+ Z; U3 o8 f) |. ~. e
    ss=zeros(4,n); % 一步预测2 U/ _4 A1 K% Q' I1 v& x
    hs=zeros(2,n); % 观测值预测
    9 y. k: }5 t7 |0 k* `4 U8 pinn=zeros(2,n); % 新息  ?! {- t: W9 B6 h% g' I: ]  [
    M=zeros(4,4,n); % 估计均方误差& ~- x: Q! o. a1 y" E4 ~
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    0 l, L1 t1 U9 E6 hMM=zeros(4,4,n); % 一步预测均方误差, U+ E2 G0 M3 P" k0 G
    K=zeros(4,2,n); % 卡尔曼增益5 R& j  p  |2 R* _  h, |

    / X$ ]7 o' B6 O4 a% kalman filtering1 O  a0 v- e* W
    . g2 O: w" U# O8 y
    for t=1:n-10 A* l+ {" ?7 j- h3 }' ]# V5 ~  H
    %            s[n]=As*[n-1]+u[n]
    % E7 c& e# }& ?  r* a$ J! h%            x[n]=h(s[n])+w[n]
    8 J* J7 B  a7 j' A8 A* L
    4 s' d0 W# k! T+ t    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    $ _6 T- G7 t, T    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程/ n' x- v3 t5 j% }
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程0 A5 v0 k9 s7 [7 [$ T: e
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程2 g3 A( B, a. ]6 B! i0 d5 A
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1( c" D1 E* g4 R9 j/ q
    % [; B; n# \9 H  f1 `) ^0 F
        vxe(1,t+1)=vxe(1,t); % 理论精确值5 @% }7 E  ]1 [2 r. U: k
        vye(1,t+1)=vye(1,t); % 理论精确值
    9 b" c' C  L& L. {9 M, X1 O    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值
    $ e  V( ~1 h" P- o7 q! K6 p* B2 z& Y    rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值. z5 A/ u3 h$ g
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1' Y2 ~6 F0 B% o

    " K0 p/ O$ I  _6 g: J% K3 k; M+ Y& t    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    ( |3 h, n$ Q- s9 s    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)
    ! J% C$ r- P. S5 N% p, m$ W! J    rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离9 V5 D$ N+ Y( a: B9 u
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)4 a8 M/ h( K3 B* d( ~! e
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位: u, \+ g. q5 n% q6 P+ v2 i6 i
        x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1. n$ V" [, Y6 p

    + }3 \2 i( |# y% P' @) ^1 ^' x" y    % 对观测方程求导,得到雅可比矩阵H,维数2*4
    $ `. f. \9 M" e    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];
    $ t1 D2 ^. U. w4 \1 _5 f: j, @. ^  \' |) }8 r- K. W' z$ N
    8 h: v. K6 u& \7 a* u% g
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差1 p$ I2 X/ \' L: l/ n
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    & T1 D, o) D8 H- I* I- H: s    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差, W8 i4 e$ ^% ~( g" I# p9 r3 J
        ss(:,t+1)=A*sn(:,t); % 一步预测/ ?6 p) `/ A7 Z0 E1 W/ Z1 X7 e4 E
        hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测( H: P/ e% h9 h( u& \$ W& ]) \
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    $ x$ V4 n9 b8 [    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    5 _4 j! P6 y4 P, K) P  Oend1 A' z# B  }( W: {1 V

    8 o/ P& q+ C. h- @) i$ r2 t: Ksubplot(2,1,1);" G! N- e$ ]8 g% t
    plot(sn(1,:),sn(2,:)); % kalman估计值  M% B& F4 t9 }6 w9 E0 s
    hold on;% Y7 @8 e0 {, M
    plot(se(1,:),se(2,:),'-r'); % 理论精确值6 S4 K+ G( |) S  E4 V

    2 l! T. E8 ^* i* T, }. i9 xsubplot(2,1,2); , Q: m# L% i; k4 ?2 x0 N/ @$ V
    plot(rn); % 实际测量距离
    + V5 w  l  E. C7 |" v/ Mhold on;) V6 J5 S' H& a
    plot(re,'-g'); % 理论精确值
    8 q. L% ?$ q: S; V8 }/ L/ W8 I; _3 ~/ K
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-2-22 19:17

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

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