UKF滤波算法
EKF,UKF,PF三种算法的比较粒子滤波matlab仿真程序EKF,UKF,PF三种算法的比较matlab仿真程序

%EKF UKF PF的三个算法clear;%tic;x=0.1;%初始状态x_estimate=1;%状态的估计e_x_estimate=x_estimate;%EKF的初始估计u_x_estimate=x_estimate;%UKF的初始估计p_x_estimate=x_estimate;%PF的初始估计Q=10;%input('请输入过程噪声方差Q的值:');%过程状态协方差R=1;%input('请输入测量噪声方差R的值:');%测量噪声协方差P=5;%初始估计方差e_P=P;%UKF方差u_P=P;%UKF方差pf_P=P;%PF方差tf=50;%模拟长度x_array=[x];%真实值数组e_x_estimate_array=[e_x_estimate];%EKF最优估计值数组u_x_estimate_array=[u_x_estimate];%UKF最优估计值数组p_x_estimate_array=[p_x_estimate];%PF最优估计值数组u_k=1;%微调参数u_symmetry_number=4;%对称的点的个数u_total_number=2*u_symmetry_number+1;%总的采样点的个数linear=0.5;N=500;%粒子滤波的粒子数close all;%粒子滤波初始N个粒子for i=1:Np_xpart(i)=p_x_estimate+sqrt(pf_P)*randn;endfor k=1:tf%模拟系统x=linear*x+(25*x/(1+x^2))+8*cos(1.2*(k-1))+sqrt(Q)*randn;%状态值y=(x^2/20)+sqrt(R)*randn;%观测值%扩展卡尔曼滤波器%进行估计第一阶段的估计e_x_estimate_1=linear*e_x_estimate+25*e_x_estimate/(1+e_x_estimate^2)+8*cos(1.2*(k-1));e_y_estimate=(e_x_estimate_1)^2/20;%这是根据k=1时估计值为1得到的观测值;只是这个由我估计得到的第24行的y也是观测值不过是由加了噪声的真实值得到的%相关矩阵e_A=linear+25*(1-e_x_estimate^2)/((1+e_x_estimate^2)^2);%传递矩阵e_H=e_x_estimate_1/10;%观测矩阵%估计的误差e_p_estimate=e_A*e_P*e_A'+Q;%扩展卡尔曼增益e_K=e_p_estimate*e_H'/(e_H*e_p_estimate*e_H'+R);%进行估计值的更新第二阶段e_x_estimate_2=e_x_estimate_1+e_K*(y-e_y_estimate);%更新后的估计值的误差e_p_estimate_update=e_p_estimate-e_K*e_H*e_p_estimate;%进入下一次迭代的参数变化e_P=e_p_estimate_update;e_x_estimate=e_x_estimate_2;%粒子滤波器%粒子滤波器for i=1:Np_xpartminus(i)=0.5*p_xpart(i)+25*p_xpart(i)/(1+p_xpart(i)^2)+8*cos(1.2*(k-1))+ sqrt(Q)*randn;%这个式子比下面一行的效果好%xpartminus(i)=0.5*xpart(i)+25*xpart(i)/(1+xpart(i)^2)+8*cos(1.2*(k-1));p_ypart=p_xpartminus(i)^2/20;%预测值p_vhat=y-p_ypart;%观测和预测的差p_q(i)=(1/sqrt(R)/sqrt(2*pi))*exp(-p_vhat^2/2/R);%各个粒子的权值end%平均每一个估计的可能性p_qsum=sum(p_q);for i=1:Np_q(i)=p_q(i)/p_qsum;%各个粒子进行权值归一化end%重采样权重大的粒子多采点,权重小的粒子少采点,相当于每一次都进行重采样;for i=1:Np_u=rand;p_qtempsum=0;for j=1:Np_qtempsum=p_qtempsum+p_q(j);if p_qtempsum>=p_up_xpart(i)=p_xpartminus(j);%在这里xpart(i)实现循环赋值;终于找到了这里!!!break;endendendp_x_estimate=mean(p_xpart);%p_x_estimate=0;%for i=1:N%p_x_estimate=p_x_estimate+p_q(i)*p_xpart(i);%end%不敏卡尔曼滤波器%采样点的选取存在x(i)u_x_par=u_x_estimate;for i=2:(u_symmetry_number+1)u_x_par(i,:)=u_x_estimate+sqrt((u_symmetry_number+u_k)*u_P);endfor i=(u_symmetry_number+2):u_total_numberu_x_par(i,:)=u_x_estimate-sqrt((u_symmetry_number+u_k)*u_P);end%计算权值u_w_1=u_k/(u_symmetry_number+u_k);u_w_N1=1/(2*(u_symmetry_number+u_k));%把这些粒子通过传递方程得到下一个状态for i=1:u_total_numberu_x_par(i)=0.5*u_x_par(i)+25*u_x_par(i)/(1+u_x_par(i)^2)+8*cos(1.2*(k-1));end%传递后的均值和方差u_x_next=u_w_1*u_x_par(1);for i=2:u_total_numberu_x_next=u_x_next+u_w_N1*u_x_par(i);endu_p_next=Q+u_w_1*(u_x_par(1)-u_x_next)*(u_x_par(1)-u_x_next)';for i=2:u_total_numberu_p_next=u_p_next+u_w_N1*(u_x_par(i)-u_x_next)*(u_x_par(i)-u_x_next)';end%%对传递后的均值和方差进行采样产生粒子存在y(i)%u_y_2obser(1)=u_x_next;%for i=2:(u_symmetry_number+1)%u_y_2obser(i,:)=u_x_next+sqrt((u_symmetry_number+k)*u_p_next);%end%for i=(u_symmetry_number+2):u_total_number%u_y_2obser(i,:)=u_x_next-sqrt((u_symmetry_number+u_k)*u_p_next); %end%另外存在y_2obser(i)中;for i=1:u_total_numberu_y_2obser(i,:)=u_x_par(i);end%通过观测方程得到一系列的粒子for i=1:u_total_numberu_y_2obser(i)=u_y_2obser(i)^2/20;end%通过观测方程后的均值y_obseu_y_obse=u_w_1*u_y_2obser(1);for i=2:u_total_numberu_y_obse=u_y_obse+u_w_N1*u_y_2obser(i);end%Pzz测量方差矩阵u_pzz=R+u_w_1*(u_y_2obser(1)-u_y_obse)*(u_y_2obser(1)-u_y_obse)';for i=2:u_total_numberu_pzz=u_pzz+u_w_N1*(u_y_2obser(i)-u_y_obse)*(u_y_2obser(i)-u_y_obse)';end%Pxz状态向量与测量值的协方差矩阵u_pxz=u_w_1*(u_x_par(1)-u_x_next)*(u_y_2obser(1)-u_y_obse)';for i=2:u_total_numberu_pxz=u_pxz+u_w_N1*(u_x_par(i)-u_x_next)*(u_y_2obser(i)-u_y_obse)';end%卡尔曼增益u_K=u_pxz/u_pzz;%估计量的更新u_x_next_optimal=u_x_next+u_K*(y-u_y_obse);%第一步的估计值+修正值;u_x_estimate=u_x_next_optimal;%方差的更新u_p_next_update=u_p_next-u_K*u_pzz*u_K';u_P=u_p_next_update;%进行画图程序x_array=[x_array,x];e_x_estimate_array=[e_x_estimate_array,e_x_estimate];p_x_estimate_array=[p_x_estimate_array,p_x_estimate];u_x_estimate_array=[u_x_estimate_array,u_x_estimate];e_error(k,:)=abs(x_array(k)-e_x_estimate_array(k));p_error(k,:)=abs(x_array(k)-p_x_estimate_array(k));u_error(k,:)=abs(x_array(k)-u_x_estimate_array(k));endt=0:tf;figure;plot(t,x_array,'k.',t,e_x_estimate_array,'r-',t,p_x_estimate_array,'g--',t,u_x_estimate_array,'b:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('真实值','EKF估计值','PF估计值','UKF估计值');figure;plot(t,x_array,'k.',t,p_x_estimate_array,'g--',t,p_x_estimate_array-1.96*sqrt(P),'r:',t, p_x_estimate_array+1.96*sqrt(P),'r:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('真实值','PF估计值','95%置信区间');%root mean square平均值的平方根e_xrms=sqrt((norm(x_array-e_x_estimate_array)^2)/tf);disp(['EKF估计误差均方值=',num2str(e_xrms)]);p_xrms=sqrt((norm(x_array-p_x_estimate_array)^2)/tf);disp(['PF估计误差均方值=',num2str(p_xrms)]);u_xrms=sqrt((norm(x_array-u_x_estimate_array)^2)/tf);disp(['UKF估计误差均方值=',num2str(u_xrms)]);%plot(t,e_error,'r-',t,p_error,'g--',t,u_error,'b:');%legend('EKF估计值误差','PF估计值误差','UKF估计值误差');t=1:tf;figure;plot(t,e_error,'r-',t,p_error,'g--',t,u_error,'b:');set(gca,'FontSize',10);set(gcf,'color','White');xlabel('时间步长');%lable--->label我的神ylabel('状态');legend('EKF估计值误差','PF估计值误差','UKF估计值误差');%toc;。
扩展Kalman滤波(EKF)和无迹卡尔曼滤波(ukf)

Pkk_1 = Phikk_1*Pk_1*Phikk_1' + Qk;
Pxz = Pkk_1*Hk'; Pzz = Hk*Pxz + Rk;
Pxz*Pzz^-1;
Kk =
Xk = fXk_1 + Kk*Zk_hfX;
Pk = Pkk_1 - Kk*Pzz*Kk';
二、扩展Kalman滤波(EKF)算法
[Xk, Pk, Kk] = ekf(eye(4)+Ft*Ts, Qk, fX, Pk, Hk, Rk, Z(k,:)'-hfX);
X_est(k,:) = Xk';
Hale Waihona Puke end二、扩展Kalman滤波(EKF)算法
figure(1), plot(X_est(:,1),X_est(:,3), '+r')
EKF与UKF
一、背景
普通卡尔曼滤波是在线性高斯情况下利用最小均方误差准则获得 目标的动态估计,适应于过程和测量都属于线性系统, 且误差符 合高斯分布的系统。 但是实际上很多系统都存在一定的非线性, 表现在过程方程 (状态方程)是非线性的,或者观测与状态之间 的关系(测量方程)是非线性的。这种情况下就不能使用一般的卡 尔曼滤波了。解决的方法是将非线性关系进行线性近似,将其转化 成线性问题。 对于非线性问题线性化常用的两大途径: (1) 将非线性环节线性化,对高阶项采用忽略或逼近措施;(EKF) (2)用采样方法近似非线性分布. ( UKF)
三、无迹卡尔曼滤波算法(UKF)
UKF是用确定的采样来近似状态的后验PDF,可以 有效解决由系统非线性的加剧而引起的滤波发散问 题,但UKF仍是用高斯分布来逼近系统状态的后验概 率密度,所以在系统状态的后验概率密度是非高斯 的情况下,滤波结果将有极大的误差。
EKFUKFPF算法的比较程序

EKFUKFPF算法的比较程序在估计理论中,EKF(Extended Kalman Filter),UKF(Unscented Kalman Filter)和PF(Particle Filter)是三种常用的非线性滤波算法。
它们在不同的环境和应用中具有不同的优点和缺点。
下面将对这三种算法进行比较。
首先,EKF是最常用的非线性滤波算法之一、它通过线性化状态转移方程和测量方程来近似非线性问题。
EKF在处理高斯噪声的情况下表现良好,但在处理非高斯噪声时会有较大的误差。
由于线性化过程的存在,EKF对于高度非线性和非高斯问题可能表现不佳。
此外,EKF对系统模型的准确性要求较高,较大的模型误差可能导致滤波结果的不准确性。
其次,UKF通过构造一组代表系统状态的Sigma点,通过非线性映射来近似非线性函数。
相较于EKF,UKF无需线性化系统模型,因此适用于更广泛的非线性系统。
UKF的优点是相对较好地处理了非线性系统和非高斯噪声,但在处理维数较高的问题时,计算开销较大。
最后,PF是一种基于粒子的滤波方法,通过使用一组代表系统状态的粒子来近似概率密度函数。
PF的优点是它可以处理非线性系统和非高斯噪声,并且在系统模型不准确或缺乏确定性时,具有较好的鲁棒性。
由于粒子的数量可以灵活调整,PF可以提供较高的估计精度。
然而,PF的计算开销较大,尤其在高维度的情况下。
综上所述,EKF、UKF和PF是三种常用的非线性滤波算法。
EKF适用于高斯噪声条件下的非线性问题,但对系统模型准确性要求高。
UKF适用于一般的非线性问题,但计算开销较大。
PF适用于非线性和非高斯噪声条件下的问题,并具有较好的鲁棒性,但在计算开销方面具有一定的挑战。
在实际应用中,我们应根据具体问题的性质和要求选择合适的算法。
比如,在低维情况下,EKF是一个可行的选择;在高维或非高斯噪声情况下,可以考虑使用UKF或PF算法。
ukf滤波算法范文

ukf滤波算法范文UKF(Unscented Kalman Filter)是一种基于卡尔曼滤波的非线性滤波算法。
相比于传统的扩展卡尔曼滤波(EKF),UKF通过一种更好的方法来近似非线性系统的概率分布,从而提高了非线性滤波的精确度和鲁棒性。
UKF通过一种称为“无气味变换(unscented transform)”的方法来处理非线性函数。
该方法基于对概率分布的均值和协方差进行一系列的采样点选择,然后通过变换这些采样点来近似非线性函数的传播。
这些采样点被称为“Sigma点”,可以看作是真实系统状态在均值周围的一系列假设状态。
UKF的基本步骤如下:1.初始化:初始化系统状态和协方差矩阵。
2. 预测步骤(Prediction):- 通过生成Sigma点来近似系统状态的概率分布。
- 将Sigma点通过非线性函数进行变换,得到预测状态和预测协方差矩阵。
-计算预测状态的均值和协方差。
3. 更新步骤(Update):- 通过生成Sigma点来近似测量函数的概率分布。
- 将预测状态的Sigma点通过测量函数进行变换,得到预测测量和预测测量协方差矩阵。
-计算预测测量的均值和协方差。
-根据实际测量值和预测测量的概率分布,计算卡尔曼增益。
-更新预测状态和协方差。
UKF相比于EKF具有以下优势:1.不需要对非线性函数进行线性化。
EKF通过一阶泰勒展开来线性化非线性函数,这可能导致误差积累和不稳定性。
UKF通过采样点直接逼近非线性函数,避免了这个问题。
2.更好的估计准确度和收敛性。
UKF通过采样点的选择更好地逼近了真实概率分布,提高了滤波的准确度和收敛性。
3.适用于高维状态空间。
EKF在高维状态空间中存在计算复杂度高和数值不稳定的问题,而UKF则通过更好的采样点选择来解决了这个问题。
4.对初始条件不敏感。
UKF对初始条件的选择不太敏感,可以在一定程度上避免初始条件选择不当导致的滤波失效问题。
尽管UKF相比于EKF有许多优势,但它也存在一些缺点。
UKF滤波算法

wk ~ N (0, Qk )
v k ~ N (0, Rk )
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ P0 = E (x0 − x0 )(x0 − x0 )
[
T
]
(2)状态估计
1.计算Sigma点
ˆ χ k0−1 = xk −1 ˆ χ ki −1 = xk −1 ˆ χ ki −1 = xk −1 +
注意
随机状态变量沿非线性函数的 传播问题是非线性滤波的关 键!
新思路
“近似非线性函数的概率密度分布比 近似非线性函数更容易”
因此,使用采样方法近似非线性分布来解决非 线性滤波问题的途径目前得到了人们的广泛关 注。
粒子滤波
使用参考分布,随机产生大量粒子,近似 状态的后验概率密度,得到系统的估计。 问题:1)计算量甚大,为EKF的若干数量 阶;2)若减少粒子数,估计精度下降。
T
{
}
{
}
}
描述最优状态估值质量优劣的误差协方差 阵确定如下 ˆ = E ( x − x )( x − x )T Y k = P − K P (k )K T ˆk k ˆk Pk k k k y k
{
}
EKF的不足
必须求非线性函数的Jacobi矩阵,对于模型复 杂的系统,比较复杂且容易出错; 引入线性化误差 ,对非线性强度高的系统,容 易导致滤波效果下降。 基于上述原因,为了提高滤波精度和效率,以 满足特殊问题的需要,就必须寻找新的逼近方 法。
增广状态的方差为
⎡ Px ,k ⎢ 0 =⎢ ⎢ 0 ⎣ 0⎤ ⎥ Q 0⎥ 0 R⎥ ⎦ 0
Pa ,k
(1)初始化
UKF法滤波性能分析

UKF 算法滤波性能分析高海南 3110038011一、仿真问题描述考虑一个在二维平面x-y 内运动的质点M ,其在某一时刻k 的位置、速度和M 在水平方向(x )作近似匀加速直线运动,垂直方向(y )上亦作近似匀加速直线运动。
两方向上运动具其中假设一坐标位置为(0,0)的雷达对M显然在笛卡尔坐标系下,该模型运动观测方程为非线性的。
我们根据雷达测量值使用UKF 算法对目标进行跟踪,并与EKF 算法结果进行比较。
二、问题分析1. UKF 滤波跟踪有协方差阵k R 。
ukf 算法步骤如下: (1) 计算σ点1|1i k k --ξ,依据1|1k k --x 和1|1k k --p 生成2n+1个σ点1|1i k k --ξ,0,1,2,2i n =。
在UT 变换时,取尺度参数01.0=α,0=κ,2=β。
(2) 计算σ点|ik k ξ,即()()|1|12|1|02|1||1||110(),0,1,2,2ˆˆˆi i k kk k k nm i k k i k k i n T c i ik k i k k k k k k k k k i i n ωωω---=----=⎧⎪==⎪⎪=⎨⎪⎪=--+⎪⎩∑∑ξf ξxξp ξx ξx Q (3) 计算σ点|1ˆk k -x|1k k -p 通过量测方程对k x 的传播,即(4) 计算输出的一步提前预测,即(5) 获得新的量测后,进行滤波更新:2. 扩展卡尔曼滤波算法分析(1)()()()(())()k k k k k k k k +=+⎧⎨=+⎩x f x w z h x v 的,定义k |1k ˆ=()k k k k-∂=∂x x xf x f xEKF 算法步骤如下:k 时刻的一步提前预测状态预测误差协方差阵为卡尔曼滤波增益为在k 时刻得到新的量测后,状态滤波的更新公式为状态滤波协方差矩阵为三、实验仿真与结果分析N=50,采样时间为t=0.5。
迹如图1所示。
基于UKF的单站无源定位与跟踪双向预测滤波算法

基于UKF的单站无源定位与跟踪双向预测滤波算法张刚兵;刘渝;胥嘉佳【摘要】提出了一种新的滤波算法,以加快滤波算法的收敛速度和提高滤波的估计精度.反向预测与更新提高了上一时刻状态估计的精度,减小了当前时刻的状态预测误差.利用更准确的初始条件经过正向预测与更新,能得到当前状态更精确的估计值.计算机仿真结果表明,本算法的滤波性能优于传统的迭代滤波算法,既提高了滤波的估计精度,又加快了算法的收敛速度.【期刊名称】《系统工程与电子技术》【年(卷),期】2010(032)007【总页数】4页(P1415-1418)【关键词】无源定位;非线性滤波;无迹卡尔曼滤波;正反向预测【作者】张刚兵;刘渝;胥嘉佳【作者单位】南京航空航天大学信息科学与技术学院,江苏,南京,210016;南京航空航天大学信息科学与技术学院,江苏,南京,210016;南京航空航天大学信息科学与技术学院,江苏,南京,210016【正文语种】中文【中图分类】TN970 引言单站无源定位与跟踪技术因具有设备简单、成本低、作用距离远、隐蔽接收、不易被发现等优点,是近年来被广泛研究的一个热点。
单站无源定位与跟踪过程是一个非线性滤波过程,测量量都是状态变量的非线性函数,必须采用非线性滤波方法。
因此,寻求一种收敛速度快、稳定性好的跟踪滤波算法成为单站无源定位与跟踪中需要解决的关键问题之一。
传统的非线性滤波方法有扩展卡尔曼滤波(extend Kalman filter,EKF)[1],修正增益扩展卡尔曼滤波(modified gain EKF,MGEKF)[2]以及修正协方差扩展卡尔曼滤波(modified covariance EKF,MVEKF)[3]等算法。
这些算法都属于扩展卡尔曼滤波,基本思想都是将非线性观测方程在状态预测处进行泰勒级数展开,忽略高次项、线性化后再利用经典的卡尔曼滤波算法进行滤波。
只有在近似误差较小的条件下,EKF 类算法才能得到可靠的滤波结果,否则,较大的线性化误差会导致滤波器性能下降,甚至发散。
UKF滤波

7.3 UKF 滤波UKF 滤波,仍然采用高斯分布代替状态量的分布,不同的是,通过特别挑选的样本点来表示状态量。
这些样本点完全可以表示出GRV (高斯随机变量)的均值和方差。
即使经过非线性变换(任何非线性变换)后,也能逼近变换后的均值和方差,逼近精度可以达到二阶泰勒展开后的精度。
下面开始介绍UT 变换。
UT 变换:UT 变换是计算随机变量经过非线性变换后的统计特征的一种方法。
考虑非线性函数:(x)y f =,记x 的均值和方差为,x x P 。
现在需要计算y 的统计特性,即ˆ,y yP 。
可以采用下面的方法,构造一个矩阵,矩阵中包含21L +个simga 向量:0 1,,, 1,,2,i i i i L xx i L x i L L -ℵ=ℵ=+=ℵ=-=+ (1)其中:2()L L λακ=+-——为尺度参数;α——确定sigma 点在x 周围的分布范围,4101α-≤≤; κ——尺度参数,其值通常为3L -β——x 分布合作参数,x 分布若为高斯分布,则2β=为最优值。
i 列向量。
(矩阵均方根值可以通过进行柯西因式分解得到)构造x 的样本后,则对应于x 的每个样本点,可以计算对应的y 样本:i ()i y f =ℵ(2)通过y 样本,可以计算,y y P2(m)02(c)0()()Li ii LTy i i i i y W y P W y y y y ==≈≈--∑∑ (3)其中,权重系数i W 可以由下式确定:(m)0()20(m)()11,1,,22()c c i i W L W L W W i LL λλλαβλλ=+=+-++===+ (4)UT 变换不同于蒙特卡洛法,蒙特卡洛法需要产生大量的样本点,而UT 变换不需要。
UT 变换计算非线性函数的统计特性,对于输入为高斯输入的非线性系统,计算精度至少为3阶,对于输入不是高斯输入的非线性系统,计算精度至少可以达到2阶,如果适当选择,αβ 的值,计算精度可以达到3阶或以上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
}
{
}
}
描述最优状态估值质量优劣的误差协方差 阵确定如下 ˆ = E ( x − x )( x − x )T Y k = P − K P (k )K T ˆk k ˆk Pk k k k y k
{
}
EKF的不足
必须求非线性函数的Jacobi矩阵,对于模型复 杂的系统,比较复杂且容易出错; 引入线性化误差 ,对非线性强度高的系统,容 易导致滤波效果下降。 基于上述原因,为了提高滤波精度和效率,以 满足特殊问题的需要,就必须寻找新的逼近方 法。
假定状态为高斯随机矢量;过程噪声与测量噪 声的统计特性为
wk ~ N (0, Qk )
v k ~ N (0, Rk )
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ P0 = E (x0 − x0 )(x0 − x0 )
[
T
]
(2)状态估计
1.计算Sigma点
ˆ χ k0−1 = xk −1 ˆ χ ki −1 = xk −1 ˆ χ ki −1 = xk −1 +
一步预测
根据所有过去时刻的测量信息对状态作最 小方差估计 x k = E x k Y k −1
{
}
状态估计质量的优劣利用一步预测误差 协方差矩阵描述
Pk = E ( x k − x k )( x k − x k ) Y k −1
T
{
}
测量修正
获得当前时刻的测量信息后,对状态预测 估值进行修正,得到状态的最优估计值
增广状态的方差为
⎡ Px ,k ⎢ 0 =⎢ ⎢ 0 ⎣ 0⎤ ⎥ Q 0⎥ 0 R⎥ ⎦ 0
Pa ,k
(1)初始化
ˆ x0 = E [x0 ]
ˆ ˆ Px ,0 = E ( x0 − x0 )( x0 − x0 )
ˆ xa , 0 = E x
[
T
]
[
T 0
0
T m×1
0l×1
T
]
T
Pa , 0
⎡ Px , 0 =⎢ 0 ⎢ ⎢ 0 ⎣
(1)对非线性函数的概率密度分布进行近 似,而不是对非线性函数进行近似,即使系统 的模型复杂,也不增加算法实现的难度。 (2)所得到的非线性函数的统计量的准确性 可以达到三阶(泰勒展开)。 (3)不需要计算Jacobi矩阵,可以处理不可导 非线性函数。
UKF滤波算法
UKF实现思想
UKF=Unscented transform + Kalman Filter
即 UKF 可以看作是基于 UT 技术的卡尔曼滤 波器。在卡尔曼滤波算法中,对于一步预测 方程,使用UT变换来处理均值和协方差的非 线性传递,就成为UKF算法。
状态的时间更新:
选定状态的 2n+1 个 Sigma点(n 为状态维 数); 利用 UT 技术计算状态的后验均值和方差。
状态的测量更新:
利用标准的 Kalman 滤波的测量更新,但使用 的公式有所不同。
其中:
, i = 1,...,2n
κ = α 2 (n + λ ) − n
在均值和方差加权中需要确定 α 、λ 和 β 共3个参 数,它们的取值范围分别为:
α 确定 x 周围Sigma点的分布,通常设为一个较小 的正数(1 > α ≥ 1e −4 ); λ 为第二个尺度参数,通常设置为0或3-n; β 为状态分布参数,对于高斯分布 β = 2 是最优的, 如果状态变量是单变量,则最佳的选择是 β = 0 。 适当调节 α 、λ 可以提高估计均值的精度;调节 β 可
xk +1 = f ( xk , wk )
y k = h( x k , v k )
这时需要对状态变量进行扩展,得增广状态
x a ,k = x , w , v
T k T k
[
T T k
]
增广状态的均值为
ˆ ˆ x a ,k = x , 0
T k
[
T m×1
,0
T T l ×1
]
m 其中, 和 l 分别为过程噪声和观测噪声的维数。
不必计算 Jacobi 矩阵,不必对非线性系统函 数 f (x) 进行任何形式的逼近; 预测阶段只是标准的线性代数运算(矩阵方根 分解,外积,矩阵和向量求和); 系统函数可以不连续; 随机状态可以不是高斯的; 计算量和 EKF 同阶。
扩维UKF滤波算法 (噪声隐含)
若过程噪声与测量噪声是隐含在系统中的,即 系统方程为
注意
随机状态变量沿非线性函数的 传播问题是非线性滤波的关 键!
新思路
“近似非线性函数的概率密度分布比 近似非线性函数更容易”
因此,使用采样方法近似非线性分布来解决非 线性滤波问题的途径目前得到了人们的广泛关 注。
粒子滤波
使用参考分布,随机产生大量粒子,近似 状态的后验概率密度,得到系统的估计。 问题:1)计算量甚大,为EKF的若干数量 阶;2)若减少粒子数,估计精度下降。
应用实例
模型:卫星姿态确定系统
f [q (t ), ω (t )]⎤ ⎡0 4×3 ⎤ −1 & (t ) = f [x(t )] + Gd (t ) = ⎡ 1 x ⎢ f 2 [ω (t )] ⎥ + ⎢ I 3 ⎥ J d (t ) ⎣ ⎦ ⎣ ⎦
( −(
(n + κ )Pk −1 )i (n + κ )Pk −1 )i
, i = 1,..., n , i = n + 1,...,2n
2.时间传播方程
χ ki |k −1 = f (χ ki −1 )
i ˆ− x k = ∑ Wi ( m ) χ k |k −1 i =0
i i ˆ− ˆ− Px−k = ∑ Wi ( c ) [ χ k |k −1 − x k ][ χ k |k −1 − x k ]T + Qk , i =0 2n
i ˆ− xk = ∑ Wi (m ) χ x ,k |k −1 i =0
2N
P = ∑ Wi
− x ,k i =0
2N
(c )
[χ
i x , k |k −1
ˆ −x χ
− k
][
i x , k |k −1
ˆ −x
− T k
]
i γ ki |k −1 = h(χ x ,k |k −1 , χ vi ,k −1 )
Py ≈ ∑ Wi
i =0
(c )
(Yi − y )(Yi − y )
T
(m ) W i 和 Wi (c)分别为计算 y 的均值和方差所用加权
W0
(c )
(m )
= κ (n + κ )
W0 = κ (n + κ ) + 1 − α + β
2
(
)
Wi (m ) = Wi (c ) = κ [2(n + κ )]
2n
2n
i ˆ− i ˆ− Pxy, k = ∑Wi ( c ) [ χ k |k −1 − x k ][γ k |k −1 − y k ]T i =0
K = Pxy, k Py−,1k
ˆ xk =
− ˆ xk
+ K ( yk −
− ˆ yk )
Px , k = Px− k − KPy , k K T ,
ˆ xk = E xk Y k = xk + K k [ yk − yk ]
{
}
K k = Pxy (k )Py−1 (k )
y k = E y k Y k −1
{
Py (k ) = E [ y k − h( x k )][ y k − h( x k )] Y k −1
T
Pxy (k ) = E [x k − x k ][ y k − h( x k )] Y k −1
i ˆ− yk = ∑ Wi (m )γ k |k −1 i =0 2N
3.测量更新方程
Py ,k = ∑ Wi
i =0 2Hale Waihona Puke 2N(c )[γ
i k |k −1
ˆ −y γ
− k − k
][
i k |k −1
ˆ −y
− T k
]
Pxy ,k = ∑ Wi
i =0
(c )
[χ
i x , k |k −1
2n
γ ki |k −1 = h(χ ki |k −1 )
i ˆ− y k = ∑Wi ( m )γ k |k −1 i =0 2n
3.测量更新方程
i ˆ− i ˆ− Py , k = ∑Wi ( c ) [γ k |k −1 − y k ][γ k |k −1 − y k ]T + Rk i =0
非线性系统 UKF滤波算法
主要内容
非线性状态估计原理(MMSE) Uscented变换(UT) UKF滤波算法 应用比较
非线性状态估计原理 (MMSE)
非线性状态估计原理
离散系统:
xk +1 = f ( xk , u k ) + wk y k = h ( xk ) + v k
不管条件密度函数 p x| y ( x | y ) 的特性如何, 最小均方估计就是条件均值 µ x| y = E{x | y} 。非 线性状态滤波过程的实现包括一步预测与测量 修正两个阶段。
0 Q 0
0⎤ 0⎥ ⎥ R⎥ ⎦
(2)状态估计
1.计算Sigma点
ˆ 根据 x a , k −1 和 Pa , k −1 ,构造增广Sigma点
0 ˆ χ a ,k −1 = xa ,k −1
i ˆ χ a ,k −1 = xa ,k −1 + i ˆ χ a ,k −1 = xa ,k −1