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

 找回密码
 立即加入
搜索
查看: 791|回复: 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 P: S5 |8 \0 ]! l& ]/ y
    % vx[n]=vx[n-1]+ux[n]7 z9 a% i) g# k
    % vy[n]=vy[n-1]+uy[n]
    : }' i" U% t. L7 q6 p% rx[n]=rx[n-1]+vx[n-1]*t' ]$ W7 O% K" c/ ^% t
    % ry[n]=ry[n-1]+vy[n-1]*t
    # R, H! S2 ~2 e% ]3 ^8 P) {  q/ Z% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    2 n% z9 P& r, a% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
      e7 S: p! v$ r* ~( Q& e4 l- j9 j% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]7 J0 E2 F9 j" u( \2 |4 C
    % u[n]=[0;0;ux[n];uy[n]]& @; K' X. Y5 I
    %       s[n]=As*[n-1]+u[n]. v1 X% I* P# g9 O
    %       x[n]=h(s[n])+w[n]
    % M( I+ d3 i1 L/ Z+ o9 L1 e; F$ \- I- ?
    % initialization
    3 ~1 ?! W- `) l2 L$ Gclear;
    0 n# D. l7 b3 V: I/ |) Z& i  cn=100;  s0 P. _# r1 a2 x! j9 U1 F9 ~3 J
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    8 ?: b1 G* o4 w1 \! K- `1 s8 Brx=zeros(1,n); % 实际位置3 f! L! j: X4 Z3 f9 r+ ~
    ry=zeros(1,n); % 实际位置
    3 w( M2 j4 T. m3 g# R) w9 L7 t) @vx=zeros(1,n); % 实际速度
    + W6 [, F1 x! I5 P' I1 k/ N/ dvy=zeros(1,n); % 实际速度
    6 U, z, S* B" ~rxe=zeros(1,n); % 精确位置
    . A; Z9 y4 k* A. zrye=zeros(1,n); % 精确位置* Y+ ]  ?4 ]0 M, D; _% f) g
    vxe=zeros(1,n); % 精确速度1 W! j7 [/ t* V  y. r
    vye=zeros(1,n); % 精确速度$ ?& U9 F0 K  G6 h2 y
    rx(1,1)=10; % 位置初始  A- B0 w8 @) M8 L& W) k/ |( j
    ry(1,1)=-5; % 位置初始
    & F5 s+ |8 e; ?- I. G3 I  O* pvx(1,1)=-0.2; % 速度初始
    , T. K1 i0 j4 Fvy(1,1)=0.2; % 速度初始2 q4 Y, q8 z$ u7 ~" e
    rxe(1,1)=10;
    , j3 d9 T3 s  w5 T+ a2 D  j% ^rye(1,1)=-5;+ G- e+ Q; J# ?0 i
    vxe(1,1)=-0.2;1 N' A, D4 J2 f2 |: j
    vye(1,1)=0.2;
    ' f: L. P) X6 T$ w5 y+ g3 w, W6 [7 [s=[rx;ry;vx;vy];, V/ u  l! a+ ]# b0 O# g
    se=[rxe;rye;vxe;vye];% q8 q. M  I$ G6 H& ]7 q$ y
    r=zeros(1,n);
    8 j) _5 F3 `; r5 L+ ?6 ~b=zeros(1,n);+ B9 l1 x3 Z9 l: V3 _3 h
    rn=zeros(1,n);
    & g" [: d2 a) c" g; jre=zeros(1,n);* c( ~) }/ c* z3 J! ^* X8 u
    bn=zeros(1,n);! i. k+ l# x1 R: [
    x=[rn;bn];5 k3 o  K4 f5 u$ l- S/ x: ]" e
    H=zeros(2,4,n);* S5 a; S* m% ~& b( t$ b+ I

    / \( i; \9 T- m" L# bux=sqrt(0.00001)*randn(1,n);
    : i' |' W$ ^9 c- tuy=sqrt(0.00001)*randn(1,n);
    ) A: e1 D5 b" x3 h8 f7 G/ gwr=sqrt(0.001)*randn(1,n);5 D& j" X9 u3 E, B
    wb=sqrt(0.0001)*randn(1,n);2 k5 f( q; e$ }6 t

    # c/ k' f2 L8 p6 y3 ?Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵: b. V' e1 H$ w; C( k+ ^1 o
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵7 i9 h0 O9 a- \# G- i
    2 A  M- G) h7 R1 Z1 e
    ss=zeros(4,n);% 精确值
    . D/ b# {& Z  ssn=zeros(4,n); % 估计修正值; y' ~0 j: n; f7 a/ I
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值
    ' ]: _" E$ M  Y' mss=zeros(4,n); % 一步预测, d0 U( R1 ~1 {% d: x" K& m
    hs=zeros(2,n); % 观测值预测5 z9 x5 z0 K5 P: F
    inn=zeros(2,n); % 新息
    3 r8 a0 P% k8 _! }" [M=zeros(4,4,n); % 估计均方误差
    * c4 g+ j9 i$ U) B3 P) \. O, BM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    - J* H$ f% y) }' P, \0 g& [MM=zeros(4,4,n); % 一步预测均方误差
    : t2 f, Z, b8 j9 t2 X  p+ aK=zeros(4,2,n); % 卡尔曼增益
    , ?5 |8 z3 k7 g6 F: k7 b3 y' |- y7 O! d, ^4 |
    % kalman filtering
    . ~5 i7 r$ v8 E# l) a3 n. m/ u% E- x5 w) V
    for t=1:n-1
    , g+ X2 _0 ~7 R" _! Z: _! ~0 X* S%            s[n]=As*[n-1]+u[n]
    0 j- F8 Z: L+ P3 W%            x[n]=h(s[n])+w[n]! ~# p+ K9 C: G& b& e1 H# b
    ; S5 r2 w. }* E4 q5 f3 p
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程; v- e% E  ~4 }& b9 p
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程9 ^- }0 L( Z3 M
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程4 ]! B5 I1 z4 S! t& S9 U0 C
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    ) {8 v: v9 H; V6 ^    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    # B5 l8 q; R) Z: p0 d4 Z  p' h4 V, O
    & a; ~3 _1 Q4 V! s4 h  _. i+ D& F0 N    vxe(1,t+1)=vxe(1,t); % 理论精确值
    ! x4 O% I7 I  L    vye(1,t+1)=vye(1,t); % 理论精确值0 M4 w* p( w+ k9 n; z2 ]
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值& R# _8 N! D) V& e# \$ N' d  M
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    9 B( Q& Y) t, i2 D    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1% @5 m* p- t5 M! i- `. f0 L" ~

    ( Z* x* r/ A$ N$ _: _& V    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差). |" G& y7 e: C5 J# B) Y
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)
    9 {( P7 O  n8 H% R( N    rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    / N! S$ F8 V: B& v+ f$ G/ o; Q    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    / h3 g9 v" G) m0 \; ^( m    bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位6 O  D2 T3 f" e2 r* `2 a, q
        x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    6 d* P" O# B& a, [
    4 T/ o+ _! n% n) _) ^0 J0 M2 P    % 对观测方程求导,得到雅可比矩阵H,维数2*4
    0 P3 ^5 _$ z! R. A    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];
    7 _6 N( Y3 D3 m# J" o$ y7 ]6 d& p. B1 W! b$ S- Z& D7 Y& C
      j( k5 t' h# _2 `# O6 X. P
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    4 v) h% p' u/ @0 q    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益: w) x& e# q9 m/ R+ |/ t) |
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差2 k3 B' C, \1 M) F* M
        ss(:,t+1)=A*sn(:,t); % 一步预测6 j2 Z% F% [) T
        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 m( [& f* E; A+ E, K    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    8 G$ i4 m+ X3 \. q    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    & z- z' z# K4 h9 Aend
    % l$ C2 Q( l7 X. i8 \+ n# c
    + l  k' E4 B" o4 d+ U7 Csubplot(2,1,1);" V# o8 n+ L; Z$ ?3 R' w; u$ O" ~
    plot(sn(1,:),sn(2,:)); % kalman估计值
    " E4 {) z" c. f6 \# `7 q" chold on;; g8 D/ y$ |  W$ A7 v
    plot(se(1,:),se(2,:),'-r'); % 理论精确值9 \$ Z) z" p7 ?. A, `+ Q
    & c1 x! Q- L% n3 H0 _# t0 b
    subplot(2,1,2); 7 ]4 X  b& r) W% f! O; M/ J9 m1 r  E
    plot(rn); % 实际测量距离
      H3 R6 p1 Z# q0 Yhold on;
      i3 Q3 O7 X  J: V. qplot(re,'-g'); % 理论精确值
    ! N& U- A- X5 p8 `  l
    5 a0 l; k$ b9 i' b
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-10-24 14:50

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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