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

 找回密码
 立即加入
搜索
查看: 520|回复: 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
    6 N. |' J6 `3 f% b% vx[n]=vx[n-1]+ux[n]
    ) Y6 D& {( Y  w. o3 r% vy[n]=vy[n-1]+uy[n]2 D* Y! x( A6 o1 [1 {" m$ m3 ^; e8 p
    % rx[n]=rx[n-1]+vx[n-1]*t
    * N9 W; ~3 \1 |- J$ b2 }- R! ^1 Y% ry[n]=ry[n-1]+vy[n-1]*t
    1 ^8 E: p7 v: d! k% s[n]=[rx[n];ry[n];vx[n];vy[n]]: o% c' ]0 i( R0 g$ V3 n2 ^  L
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
    & p, I9 D. T8 y3 V- P2 N4 I7 S% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    ! \: o/ @; f. }0 q9 w4 j; Q6 A% u[n]=[0;0;ux[n];uy[n]]
    , m" Z& `. U1 a/ C- h! z8 `%       s[n]=As*[n-1]+u[n]
    ) d0 l# d! a9 g6 \$ u# M# u2 a1 i%       x[n]=h(s[n])+w[n]! Q) Y5 |: v. e. b* o+ y2 @, T( _: o6 c

    $ e8 B) z( M$ e, m% initialization
    2 Q0 u' ^  j8 l1 |( dclear;+ Y. b+ i$ ^% S. z2 G$ L
    n=100;7 L0 n% H: s; E' g8 G0 Q/ T
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];- m/ a% s6 X) D: e9 X; [1 \
    rx=zeros(1,n); % 实际位置
    & F" g" `+ ~) {% @, c6 Ary=zeros(1,n); % 实际位置  \$ ^& _2 r: `9 C" V1 B  R
    vx=zeros(1,n); % 实际速度& n0 I  B' z$ g
    vy=zeros(1,n); % 实际速度9 i4 ?, L1 ]7 b# f( Q" C8 x
    rxe=zeros(1,n); % 精确位置8 C0 k8 {9 g( e0 f7 i
    rye=zeros(1,n); % 精确位置
    7 x' z! `  \; V9 l7 a0 Evxe=zeros(1,n); % 精确速度
    " k. b! _- I1 _  @6 Jvye=zeros(1,n); % 精确速度' N5 |* D6 L' r2 w+ d
    rx(1,1)=10; % 位置初始+ j* P3 ]/ G/ u5 Q$ T  }+ t) i
    ry(1,1)=-5; % 位置初始
    % c( t7 W3 S9 K2 c5 G9 uvx(1,1)=-0.2; % 速度初始
    $ V9 k0 g) G' g$ }: x# }vy(1,1)=0.2; % 速度初始+ c, w9 a/ A- c: x) J
    rxe(1,1)=10;% E! r% y% h" ?, l
    rye(1,1)=-5;
    ; h3 h, Y$ w3 |  ~, gvxe(1,1)=-0.2;1 F4 p( f/ \4 j* w- t
    vye(1,1)=0.2;
    3 \: l7 U3 f& B; D2 t; {# {8 hs=[rx;ry;vx;vy];) k* S9 c: T6 Q6 N5 |9 b
    se=[rxe;rye;vxe;vye];- ~+ D- L+ t. G# E, Y( V6 H! z
    r=zeros(1,n);3 {; i/ S3 |( m7 s# i: ~, S
    b=zeros(1,n);
    0 i  b. |* P) ^rn=zeros(1,n);4 G. W3 G9 F0 x/ w0 h4 _
    re=zeros(1,n);
    : X! {9 K: D% K) b/ abn=zeros(1,n);
    7 w7 R$ W0 V* L/ @1 rx=[rn;bn];1 ]! B" i. V! g. ~3 W& O
    H=zeros(2,4,n);/ n. |, W' l9 G; I! g  @

    ( c+ g' ^: I& I" g# i6 U  uux=sqrt(0.00001)*randn(1,n);
    1 w5 b0 H* q6 ?uy=sqrt(0.00001)*randn(1,n);
    3 N, k7 \% `( Q% O6 O/ Hwr=sqrt(0.001)*randn(1,n);9 s( p$ h5 _' t. W2 M
    wb=sqrt(0.0001)*randn(1,n);
    & j- y% ?' ~) n5 J! j9 }  m: w5 y  D) E! e+ `7 G4 b: ?/ n
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    , {' y0 g7 p4 YC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵- [- [9 ^: s( T# j" m

    7 w5 W5 o" E! ~0 C' h5 V& X; d+ {ss=zeros(4,n);% 精确值9 K; J; d* O* @. i5 i$ I
    sn=zeros(4,n); % 估计修正值
    " @' W/ J5 I- H  _/ p; l7 l9 B% \sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值
    5 o7 S+ \1 A& @/ b& p  D' z8 {ss=zeros(4,n); % 一步预测  T3 g5 D: p$ Q& j6 X
    hs=zeros(2,n); % 观测值预测! v2 ?$ ?9 r5 N/ D+ T3 d# J
    inn=zeros(2,n); % 新息) A+ x1 Z# B3 u, V; J8 G: v
    M=zeros(4,4,n); % 估计均方误差5 c; l2 J! y$ l# U! q7 [
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值, r  p7 L2 C. h) W
    MM=zeros(4,4,n); % 一步预测均方误差
    6 R$ m) ^3 w0 e8 ]K=zeros(4,2,n); % 卡尔曼增益1 u* t1 J% ^" z6 K7 K7 K
    * {" A1 H0 M/ l/ ]/ r- }7 d; q
    % kalman filtering
    + n- i: ~7 @( K8 ]+ I& r( w* b
    ' t$ m3 k6 W/ w4 Yfor t=1:n-1
    9 h* J- i1 x& o%            s[n]=As*[n-1]+u[n]8 [  z* H7 B' \
    %            x[n]=h(s[n])+w[n]9 ?7 {# \* F! g' e" D
    " {/ A  k5 Q' F4 W
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    # Z8 F% `$ m+ A+ W0 [4 z    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    7 h. K: p+ W3 D    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程5 z( C8 z& p. w" h+ g
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程, I3 i! a* Y- I1 |
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1) D# O- G6 H; ]# m

    8 l( [( R' R& J7 |: Z- e5 u+ z    vxe(1,t+1)=vxe(1,t); % 理论精确值  D7 y$ `; z: R
        vye(1,t+1)=vye(1,t); % 理论精确值
    & [* G6 m  z) a, v/ p* x    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值
    " }4 l6 R0 [( ?! q$ p7 N( k    rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值* w. W8 C. y& u  n/ ?% o
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1
      }( g* q9 l, e% `3 U8 i8 A3 Z# f- O7 r: `9 |& \
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)% b; w- e- p# D6 |! Z
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差); k$ i, q4 @0 t2 x2 G" ~
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离3 ^; \' F6 f. V/ q6 C) _
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)" u2 Y, Q- P3 \( ?& ]  s' n
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    . `/ o" `: G4 G9 L' b; l( O2 U    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    * K+ p: U  |! y# a, p6 V
    3 M8 @8 j/ t7 t1 u1 t8 _( @    % 对观测方程求导,得到雅可比矩阵H,维数2*4
    & x; Z, B0 w; c* T% \    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];
    . P; x, K  H- ?( w
    + O; d4 s9 ^  g  p# _! k2 ?( T- X+ K7 J) k2 ?1 @
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    ) Y/ q4 x( [! F8 E# F    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益. p9 D; R4 d7 x- U2 k0 @
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差' @4 h2 }& V2 E0 F- `
        ss(:,t+1)=A*sn(:,t); % 一步预测
    ; R2 Z  Q$ a, `* T" K' G0 H    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 q5 {2 t  E  k& S    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息3 h1 W- |  M# I2 O: X' x* v$ b0 g
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    2 m! o9 E, D( O- O8 k- Send
    0 \* d3 T- C2 Z2 u# {4 V+ d; x, \/ y, {/ c0 X& j
    subplot(2,1,1);/ ]! ^9 a+ e. {" G4 B6 F
    plot(sn(1,:),sn(2,:)); % kalman估计值
    / ]6 M8 e( ^2 t- t' [2 shold on;
    2 q, c! A, t' I0 u" O9 ]plot(se(1,:),se(2,:),'-r'); % 理论精确值
    ' A8 b2 E0 x! a" Z. i  R
    - B0 ]0 K$ e2 }4 Q' V6 ]subplot(2,1,2);
    , M2 N) h0 l. C. Rplot(rn); % 实际测量距离
    5 V+ W( i1 |) C4 P# Xhold on;
    4 z7 Y5 M% Q, l( q; E! n3 Y0 ?0 Splot(re,'-g'); % 理论精确值0 f, ]; X& j) r  c
    * s1 l1 p" {8 R7 Q6 Q
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-5-24 07:45

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

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