|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
卡尔曼
" b" M( o0 h3 @7 a! v; Z% w; c+ N
) `- D8 x/ ?3 fclear clc;) _. V! l; G8 Z9 U8 [8 t/ A! c. v
N=600;%采样点的个数 ( S6 [# J3 n8 ?, E6 L
CON=25;%室内温度的理论值
1 i! I7 }' o" ]4 k( x& Q9 Qx=zeros(1,N);%用来记录温度的最优化估算值 & G$ C( A% E/ ]$ ^
y=randn(1,N)+CON;%温度计的观测值,其中叠加了噪声% D# W$ o: l9 B/ Z0 ~5 I
x(1)=20;%为x(k)赋初值0 n7 ? W* P, V1 b
p(1)=2;%x(1)对应的协方差
# ^7 u. k5 L$ Z- K0 \" w& DQ=cov(randn(1,N));%过程噪声的协方差- i O* D4 F1 y* O; [
R=cov(randn(1,N));%测量噪声的协方差
( d( u5 n7 H* D% }0 vfor k=2:N%循环里面是卡尔曼滤波的具体过程
; C+ i& w1 p6 E+ Vx(k)=x(k-1); - n$ f7 W) d( q1 t) h
p(k)=p(k-1)+Q; . G c! F% `% R2 ^9 {
Kg(k)=p(k)/(p(k)+R);%Kg为Kalman Gain,卡尔曼增益 / k4 V7 e. k$ h0 Q0 _# b
x(k)=x(k)+Kg(k)*(y(k)-x(k)); ' V. H4 X4 W' r) H! B3 Z
p(k)=(1-Kg(k))*p(k);
5 \8 O: f6 k' s$ w Q. Qend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %这个模块起到平滑滤波作用4 L. R& G. t0 Y2 m9 O
Filter_Width=10;%滤波器带宽
" {) @ P3 [" C s, o3 BSmooth_Result=zeros(1,N);%用来存放滤波后的各个采样点的值2 X P2 Q/ @9 x* D$ I8 v
for i=Filter_Width+1:N
0 [ b& G" T+ n6 s1 RTemp_Sum=0;
4 O2 u# |' w! _- ^: @( Sfor j=i-Filter_Width: (i-1)
1 R" y2 D0 ^$ V: J: hTemp_Sum=x(j)+Temp_Sum;
7 \4 x- t: k% U5 V2 dend
! k4 n- q) _( n) U( P/ u$ cSmooth_Result(i)=Temp_Sum/Filter_Width;%每一个点的采样值等于这个点之前的filter_width长度的采样点的平均值
" m2 S8 @/ _4 c3 Z# N/ ?7 m1 ?end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0 @! y$ N4 q3 k& N7 rt=1:N; % I" u6 k" _4 x: T/ U' t9 g0 J, X) P
figure('Name','Kalman Filter Simulation','NumberTitle','off');/ P" j1 ? P8 V
expected_Value=zeros(1,N);
/ X' G) P+ ~9 m% [- X- bfor i=1:N $ U, Z B% }5 @$ b) p* I
expected_Value(i)=CON;
1 q+ }- c" ?$ a8 n* c- ^end1 ~; L# s6 }* a
plot(t,expected_Value,'-b',t,y,'-g',t,x,'-k',t,Smooth_Result,'-m');%依次输出理论值,叠加测量噪声的温度计测量值,
- i$ ~8 z9 `/ Z7 [# v f" |! P1 D+ c! w, ]: {legend('expected','measure','estimate','smooth result'); %经过kalman滤波后的最优化估算值,平滑滤波后的输出值
3 f; M6 A' r( h) [* Dxlabel('sample time');
& ?9 B. i8 R& g2 `4 w# a) vylabel('temperature'); title('Kalman Filter Simulation'); |
|