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

 找回密码
 立即加入
搜索
查看: 673|回复: 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 Filtering1 G* C" S, F! d, {2 @# P
    % vx[n]=vx[n-1]+ux[n]! ~, `9 i+ T5 {+ V
    % vy[n]=vy[n-1]+uy[n]
    7 y' _3 z: e! |8 h+ \' z% rx[n]=rx[n-1]+vx[n-1]*t6 u9 S2 I6 E1 T* k7 }
    % ry[n]=ry[n-1]+vy[n-1]*t
    + U0 t* a; q5 R, t  ?! h' l% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    : u' [! X2 D4 d- J1 R% s* f% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]" X# p6 o) i$ G4 u) N1 ^
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    " P& C. F9 t; t  i+ M' V% u[n]=[0;0;ux[n];uy[n]]+ s/ M) s  H/ p. K3 L8 q
    %       s[n]=As*[n-1]+u[n]
    ( G! a& o, W2 s& b; P2 O%       x[n]=h(s[n])+w[n]/ O3 e1 o' v: T) j$ N

      \& y4 ?% y. y' b: o8 ^6 F. b% initialization; V5 s# F1 _/ R. n" i
    clear;
    + l5 M4 U0 |) g" h" Un=100;/ N( }# X' o: ?, U
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    ) e, k7 `. r9 \rx=zeros(1,n); % 实际位置' T3 {: X) u2 X2 O+ E+ V
    ry=zeros(1,n); % 实际位置
      ^' Y% O1 Z# Yvx=zeros(1,n); % 实际速度
    ; [" x( N; w9 q9 h' |' @vy=zeros(1,n); % 实际速度
    1 }! a0 R' D! `rxe=zeros(1,n); % 精确位置9 R. m. z/ z8 l2 j$ M$ \: N
    rye=zeros(1,n); % 精确位置
    8 |0 b- E" E: Ovxe=zeros(1,n); % 精确速度
    , W3 p9 Z5 F( hvye=zeros(1,n); % 精确速度5 T6 l) I6 Q: r, N
    rx(1,1)=10; % 位置初始# `' D8 Q1 h; X' m
    ry(1,1)=-5; % 位置初始9 R$ O2 f  A( K# p1 M
    vx(1,1)=-0.2; % 速度初始2 ^1 m  ~+ q6 L9 V: D' a
    vy(1,1)=0.2; % 速度初始/ q: J+ C+ z  t# E4 l! V6 e0 P
    rxe(1,1)=10;& Y- v2 c' f( a( z' s; \
    rye(1,1)=-5;
      L4 P' ~5 v$ O* h8 H( Dvxe(1,1)=-0.2;* f7 l7 v0 [- P+ E# k" I
    vye(1,1)=0.2;5 b- ~# }* T+ }/ |. s& [
    s=[rx;ry;vx;vy];6 J, [' W4 z0 C) t
    se=[rxe;rye;vxe;vye];8 f# i* I! h" J# _
    r=zeros(1,n);& L+ g3 {7 @, h) ?4 [0 `/ y; R+ y
    b=zeros(1,n);
      Z4 h( j7 ~, f) Z& h1 t, \rn=zeros(1,n);; \1 ^# l- A& g) L3 _3 L1 v! F
    re=zeros(1,n);  b# x  f' Z* w
    bn=zeros(1,n);
    ! e# n& z. E- O( {; yx=[rn;bn];7 y; B. _6 O4 z
    H=zeros(2,4,n);: j" O+ o! P+ V- a7 d4 I# o( g
    5 ~6 O7 K' |+ w8 _, I: {& i! w
    ux=sqrt(0.00001)*randn(1,n);
    : f3 M5 K) ~8 t' _* g! E! uuy=sqrt(0.00001)*randn(1,n);- F: b  q+ P0 Y/ t7 A3 O2 Y) b
    wr=sqrt(0.001)*randn(1,n);! m. f2 l7 a8 u' Z$ |( _
    wb=sqrt(0.0001)*randn(1,n);$ l6 ~; P0 o+ o* ~

    9 {" |9 s. {# SQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵4 [0 w& k  h; h) m2 f5 y
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    . g- T9 \- w$ Y1 h  I3 |- N1 i) r
    * x, R" T. b8 }, F* t  mss=zeros(4,n);% 精确值5 G: s* ^1 P! q3 b$ E0 x
    sn=zeros(4,n); % 估计修正值5 Q) ]7 G6 q7 O; C' r1 q9 F9 p5 E0 |
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值1 d+ q) i3 U6 ]* ]. n; N6 c( [
    ss=zeros(4,n); % 一步预测  Y- r8 A) t2 Y4 o
    hs=zeros(2,n); % 观测值预测7 ]6 \7 y6 a+ Q) f6 V0 l+ I  O
    inn=zeros(2,n); % 新息
    6 Q6 Z# Y0 g( e  i$ r4 s& ~, uM=zeros(4,4,n); % 估计均方误差) P% G8 G& G$ i& `' M
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值% H$ a5 q. d0 V4 x2 M3 e1 X
    MM=zeros(4,4,n); % 一步预测均方误差. H* c- Y5 B% c3 Y7 X
    K=zeros(4,2,n); % 卡尔曼增益- o: f; Q& |8 k) t) Z" m
    0 ^4 E* E7 g9 K* f
    % kalman filtering
    & n7 G2 d% q4 [7 Y
    # h3 J. @9 n7 O4 ofor t=1:n-19 B2 \0 \2 m7 f5 I1 X: S, H, i
    %            s[n]=As*[n-1]+u[n]
    % k6 e. D( G% V; b7 H3 E; j%            x[n]=h(s[n])+w[n]* L4 z1 p+ e) v! }* d; Q1 l; x

    " I2 `! J' {7 a+ C' q    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程# ]8 d3 c) G4 M# _, |( }
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    ! Y2 c3 W+ r, l/ j9 T, i    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    , b6 p- C, M- P    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程9 U5 q, ?: Q2 u6 }) l4 O6 Z9 l
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    * g& m7 W% E; ?# w  d- ?* l& }2 Q1 H4 J3 C/ s. w6 {; r# z
        vxe(1,t+1)=vxe(1,t); % 理论精确值1 T9 n# t6 }6 N" U$ l! x/ F# A
        vye(1,t+1)=vye(1,t); % 理论精确值6 g$ r: s) Z% a, P# j- n
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值
    - v0 b6 r1 q( G1 U5 j4 m& n    rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值) U  m$ t5 _/ I
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1
    * v( L1 B3 D( t, ~$ o1 j5 Z( f2 Z5 M* i) _4 [% J9 r) F
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差). }' c9 S6 x/ X' z- ?) T) H6 H9 y
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)1 B8 E1 Y) o4 t, B+ o- B
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    1 N0 [" a, t1 r# e5 E- k- U9 A    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)" U6 J, n% m* x; s4 L
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    ) \# r' j5 c' A% D4 n    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    : I3 V& o" P: Q3 a4 [' E
    . T" a% @9 D' }0 V    % 对观测方程求导,得到雅可比矩阵H,维数2*4
    3 s* w- m) W" |7 q- A" m# 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];8 |. ?! B$ s7 b0 o

    ) [: O3 o3 y6 q
    7 l! z; d1 n+ ?7 G  b! o/ u, y7 l3 S    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差6 |% g+ z+ f, I9 u, W7 ]' S
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    ' H) ~- x* ~2 m, L    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差
    , l. S3 k9 `5 L% R% M    ss(:,t+1)=A*sn(:,t); % 一步预测; ?/ A' W* D) y8 p3 E3 N+ 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))]; % 观测值预测; V, g2 E* O7 K# W" |2 Y" L
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息, N+ V0 n# D* P6 J4 x; s9 P" M
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    3 p* d& e2 j- N* a' @5 dend6 U8 H8 l9 w% H: j& c

    , [9 I9 e6 Z* q4 B" V9 T1 ]subplot(2,1,1);
    2 k6 c$ ^8 G5 C3 K' ^2 oplot(sn(1,:),sn(2,:)); % kalman估计值
    : t& i! w2 _9 L/ L0 Y  [" _hold on;
    : H! b5 a& }6 j/ g' x, i6 v1 H* Cplot(se(1,:),se(2,:),'-r'); % 理论精确值: n% x3 k# j) u) z$ E

    % v5 c' D% o4 H5 }; psubplot(2,1,2); . J/ K  I7 F6 c# X" m: S: S
    plot(rn); % 实际测量距离
    % ^0 R+ i6 P* X# n3 ^3 _, Thold on;5 V, h4 K3 B" }2 w4 C
    plot(re,'-g'); % 理论精确值
    ; E9 H7 S1 F; R7 [0 G& ]9 j/ |  m
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-1-11 16:14

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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