www.gusucode.com > 扩展卡尔曼滤波,粒子滤波,去偏卡尔曼滤波和循环增益尔曼滤波的源程序 > 去偏卡尔曼滤波/kalman_filter.m
function [x_filt,x_pre,p_new,k11,k21,Q2]=kalman_filter(pre_data,z,point_z,p_old,ch,Q1,Q2,h,l,point_Q2) %x_prev_new=ch*pre_filt_data; e=exp(-point_Q2(2,2))-exp(-point_Q2(2,2)/2); r=point_z(1); thita=point_z(2); z1=z-[r*cos(thita)*e;r*sin(thita)*e]; pre_p=ch*p_old*(ch)'+l*Q1*(l)'; k=pre_p*(h)'*inv(h*pre_p*(h)'+Q2); k11=k(1:4,1); k21=k(1:4,2); x_filt=pre_data+k*(z1-h*pre_data); x_pre=ch*x_filt; p_new=(eye(4)-k*h)*pre_p; cos_2_v=x_filt(1,1)^2/(x_filt(1,1)^2+x_filt(3,1)^2); sin_2_v=1-cos_2_v; R_2=x_filt(1,1)^2+x_filt(3,1)^2; Q2(1,1)=point_Q2(1,1)*cos_2_v+R_2*sin_2_v*point_Q2(2,2); %Q2(1,2)=sqrt(cos_2_v)*sqrt(sin_2_v)*(point_Q2(1,1)-R_2*point_Q2(2,2)); Q2(1,2)=0; Q2(2,1)=Q2(1,2); Q2(2,2)=point_Q2(1,1)*sin_2_v+R_2*cos_2_v*point_Q2(2,2);