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

 找回密码
 立即加入
搜索
查看: 691|回复: 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
    ! v, n4 ]  [) y- g  ^  ]% vx[n]=vx[n-1]+ux[n]
    & U6 K5 o: ]+ D% vy[n]=vy[n-1]+uy[n]
    4 g, f2 H8 ^0 z5 @8 E4 K3 J% Y% rx[n]=rx[n-1]+vx[n-1]*t
    7 ?% K  _( ]/ S+ I( P- G: ~0 ^* [% ry[n]=ry[n-1]+vy[n-1]*t/ e; y8 K  P1 N. y2 t* ?
    % s[n]=[rx[n];ry[n];vx[n];vy[n]]
    ; W% v. s$ |# n7 u6 Q5 e% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]) \" D& |3 f4 j! v0 p
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]3 T) n" Y$ l2 M# {' t9 E7 n5 q
    % u[n]=[0;0;ux[n];uy[n]]9 i* F7 [! K8 u/ }& s9 s& q1 y
    %       s[n]=As*[n-1]+u[n]. `  L) V8 T* o: k
    %       x[n]=h(s[n])+w[n]
    9 c" x2 d6 S: O7 k& y8 U) K: K; y: Y& V
    % initialization0 F7 ?# D2 e/ j4 S# B& x) V+ |  V
    clear;/ G1 J! S" s# M! a% i
    n=100;
    ; |- Z2 U+ x2 zA=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    ; f! v9 `. \9 p$ p+ r; |+ p9 jrx=zeros(1,n); % 实际位置9 A1 L* f8 S  S8 t4 ?6 N: f4 i# f
    ry=zeros(1,n); % 实际位置
    & @8 C2 B' K! ~" f2 I& ivx=zeros(1,n); % 实际速度
    " V* C4 b& p1 z) Lvy=zeros(1,n); % 实际速度+ L/ a7 i" u0 u2 r
    rxe=zeros(1,n); % 精确位置6 G+ j3 o( [0 R/ h( v  w. y
    rye=zeros(1,n); % 精确位置
      g* p+ I, W3 M3 M+ R& I- F1 o! Wvxe=zeros(1,n); % 精确速度% U* d# N& V0 }% t8 s
    vye=zeros(1,n); % 精确速度
    ) u: c9 G1 F! ?9 h% {( c# Brx(1,1)=10; % 位置初始
    9 s: j9 y* C, X3 e# }# wry(1,1)=-5; % 位置初始7 Z; l. p8 k5 }% H3 E+ X, K
    vx(1,1)=-0.2; % 速度初始
    ) L. g/ i: ^! K6 n) Tvy(1,1)=0.2; % 速度初始
    2 o6 U3 q7 V; s; L4 X1 J0 a; Mrxe(1,1)=10;" `7 r4 H2 G) n) p: E  A1 i
    rye(1,1)=-5;% s# l1 B: }. F
    vxe(1,1)=-0.2;3 l  ~) O9 \# [$ O
    vye(1,1)=0.2;, c0 E7 [* T' A' N( w
    s=[rx;ry;vx;vy];- Y, r" k' x6 m' p
    se=[rxe;rye;vxe;vye];
    ; {4 t. u' b* S/ F( or=zeros(1,n);
    " B1 t1 D8 o$ X: _b=zeros(1,n);
      L; \0 k) O/ o! G( n3 Ern=zeros(1,n);6 ~" X+ {3 R: R) S% v2 c
    re=zeros(1,n);
    ! F9 ~9 `1 x% d& [, M5 v7 Zbn=zeros(1,n);: x, o3 ]: B! o/ n7 s7 D2 v
    x=[rn;bn];
    ) m* H1 C3 e+ ^8 ^& A# B3 y! @+ gH=zeros(2,4,n);
    4 e% a! o9 r9 c, Y& |$ B9 L' f
    9 R" W3 |  l. |2 M) qux=sqrt(0.00001)*randn(1,n);
    ; \4 i1 s9 {$ I* R2 n! Q5 Xuy=sqrt(0.00001)*randn(1,n);8 n  r6 b9 m, G- v$ X
    wr=sqrt(0.001)*randn(1,n);; }% ~: t* Z3 F) b5 }1 R
    wb=sqrt(0.0001)*randn(1,n);
    : O% {! S, I' t5 {& L2 m, D* X
    ) a2 b& P" R6 R* ZQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    $ w4 d- K/ ?8 FC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵. H& t" Q, e, v2 l" c5 p
    9 h) Y2 F- C$ m: ]5 y" Y$ p
    ss=zeros(4,n);% 精确值6 M$ F7 q: {- f: o1 S2 b
    sn=zeros(4,n); % 估计修正值+ `2 Q  N$ ^! b1 \+ w* J
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值) W  S! g. |2 a# Q( x( N- c% x
    ss=zeros(4,n); % 一步预测
    : a- r- {" J4 \) [hs=zeros(2,n); % 观测值预测8 z7 b  ^' {. q8 [& n0 g
    inn=zeros(2,n); % 新息
    4 M$ K9 X" A7 N) Z( l0 O" P2 Y+ y# oM=zeros(4,4,n); % 估计均方误差0 c% h3 M) [$ x/ }2 @/ c" ]8 w
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值; S; O$ M2 d1 m
    MM=zeros(4,4,n); % 一步预测均方误差
    ( m! c% F! i# C$ @; QK=zeros(4,2,n); % 卡尔曼增益% \& y9 j9 H+ I# Q

    8 d! O) {: b1 q# d1 t+ A7 \% kalman filtering( b; i1 s+ {- J2 H
    5 H  x5 o2 {& j9 b
    for t=1:n-1: D7 x" X+ l5 D5 R2 q8 t
    %            s[n]=As*[n-1]+u[n]
    3 t% W7 I, @, F: T- G  h* @5 R%            x[n]=h(s[n])+w[n]7 q. P, \( ?. @. ^- ~

    ) }/ ~# C- ]& f) j5 K; n* T    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    & l7 q0 v0 @, E6 |  b! t$ N    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    ! ^! `# X4 D+ [9 r" W9 o8 l  B    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程& ]2 A" @" K/ j: Q& x
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    ( M2 W. p: ^. r: C    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    " l* ]# @- Q' ?# t7 k
      i% z4 ]$ L5 O+ I8 P    vxe(1,t+1)=vxe(1,t); % 理论精确值$ z6 m$ D- }9 j, o: g) v( L
        vye(1,t+1)=vye(1,t); % 理论精确值5 @! q9 p' K- y6 b5 |+ D8 @2 Y
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值$ e! C. b1 m6 m- C/ `
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    ( ]/ n/ G2 g; k5 z    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*10 B" h2 {  C5 ]9 C
    : M# g& \) z8 F, \! L; l1 L! x* O# V9 f
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)* W9 r+ E( X. O' T! S
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)1 ^* ]  W) F: c
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离. P) z0 c1 g3 w; h8 r' Z( H; U
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)" N: y! ?* K& n4 ^) z
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    2 h; K7 j' e! @4 ^! |2 X! _    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    * R7 G2 B: P2 E8 r( M& I; ?, s. p9 K% X& a/ T9 b
        % 对观测方程求导,得到雅可比矩阵H,维数2*4
    ; d7 R' L0 M2 A% H& ?* g    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];" O. ^1 N- q* M8 Y
    + H' M; {/ ^  ]9 e( X2 B2 d  d$ w

    / s" I/ I  n4 V+ _1 Y# q    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    . A' G  a# W: m    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    ) f$ u, L5 h8 t8 L1 ?& v  e    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差2 s. [$ T0 ^2 e5 {5 d2 o
        ss(:,t+1)=A*sn(:,t); % 一步预测
    : j# \* Q1 D: j: R- 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))]; % 观测值预测
    + B& g* b9 P; n7 A1 m    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    5 P& Z* x# R5 Z# m+ F' H! F8 ~    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    - s0 G! B( r7 j/ T0 N7 ?end
    8 }# ?/ b  \3 ]- ^! G' H" f$ w- r2 {5 |6 z
    subplot(2,1,1);
    7 J2 L& k+ _6 _: f9 \) Splot(sn(1,:),sn(2,:)); % kalman估计值( k5 F3 s3 Z# Y# `
    hold on;
    4 f, L! q: C; u9 H/ Wplot(se(1,:),se(2,:),'-r'); % 理论精确值
    ) p/ B$ [' q4 M  F$ Q% S) ~! g2 e, v
    subplot(2,1,2); : _+ `5 [( ?2 z9 s6 [/ ^7 e8 K
    plot(rn); % 实际测量距离
    0 [7 d  l7 i  V) c# {9 ?hold on;
    . A; u, G  w0 D7 [& k5 Gplot(re,'-g'); % 理论精确值" o" G* l' j" E' ?7 f$ u% q
    * P+ \7 U2 q, n- p+ ~. r2 M7 @1 g
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-3-16 07:41

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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