信号卡尔曼滤波器
- 格式:doc
- 大小:102.00 KB
- 文档页数:2
卡尔曼滤波的融合原理
卡尔曼滤波(Kalman Filter)是一种基于贝叶斯估计理论的递归最优线性最小方差滤波器,它在信号处理和控制工程领域中广泛应用,尤其擅长于多传感器数据融合以及动态系统的状态估计。
其融合原理可以简化表述如下:
1.预测阶段:
1.利用系统的动态模型,根据上一时刻的状态估计值及其协方差矩
阵,结合当前时刻的系统输入(如果有),通过状态转移方程预测下一时刻的状态和相应的预测误差协方差矩阵。
2.更新阶段:
1.当新的观测数据可用时,通过观测模型计算出一个预测与实际观测
之间的残差(即所谓的卡尔曼增益K)。
2.卡尔曼增益是基于预测误差协方差和观测噪声的协方差之比确定
的,它反映了对预测的信任度和对观测的信任度的相对权重。
3.使用这个增益来调整预测状态,得到一个更加准确的状态估计,也
就是将预测结果与实际测量值进行加权融合。
4.同时更新后验状态误差协方差矩阵,以反映新信息被融合后的不确
定性。
整个过程的关键在于如何最优地结合来自系统动力学模型预测的信息(先验信息)与从传感器获取的实时观测信息(后验信息)。
由于假定噪声项服从高斯分布,卡尔曼滤波能够找到一种数学上的最优解,使得状态估计具有最小均方误差。
在实际应用中,这种融合方法非常强大且灵活,可以处理连续时间或离散时间的线性系统,对于非线性系统则可通过扩展如扩展卡尔曼滤波等方法来近似处理。
10.6 卡尔曼滤波器简介本节讨论如何从带噪声的测量数据把有用信号提取出来的问题。
通常,信号的频谱处于有限的频率范围内,而噪声的频谱则散布在很广的频率范围内。
如前所述,为了消除噪声,可以把 FIR滤波器或IIR滤波器设计成合适的频带滤波器,进行频域滤波。
但在许多应用场合,需要进行时域滤波,从带噪声的信号中提取有用信号。
虽然这样的过程其实也算是对信号的滤波,但所依据的理论,即针对随机信号的估计理论,是自成体系的。
人们对随机信号干扰下的有用信号不能“确知”,只能“估计”。
为了“估计”,要事先确定某种准则以评定估计的好坏程度。
最小均方误差是一种常用的比较简单的经典准则。
典型的线性估计器是离散时间维纳滤波器与卡尔曼滤波器。
对于平稳时间序列的最小均方误差估计的第一个明确解是维纳在1942年2月首先给出的。
当时美国的一个战争研究团体发表了一个秘密文件,其中就包括维纳关于滤波问题的研究工作。
这项研究是用于防空火力控制系统的。
维纳滤波器是基于最小均方误差准则的估计器。
为了寻求维纳滤波器的冲激响应,需要求解著名的维纳-霍夫方程。
这种滤波理论所追求的是使均方误差最小的系统最佳冲激响应的明确表达式。
这与卡尔曼滤波(Kalman filtering)是很不相同的。
卡尔曼滤波所追求的则是使均方误差最小的递推算法。
在维纳进行滤波理论研究并导出维纳-霍夫方程的十年以前,在1931年,维纳和霍夫在数学上就已经得到了这个方程的解。
对于维纳-霍夫方程的研究,20世纪五十年代涌现了大量文章,特别是将维纳滤波推广到非平稳过程的文章甚多,但实用结果却很少。
这时正处于卡尔曼滤波问世的前夜。
维纳滤波的困难问题,首先在上世纪五十年代中期确定卫星轨道的问题上遇到了。
1958年斯韦尔林(Swerling)首先提出了处理这个问题的递推算法,并且立刻被承认和应用。
1960年卡尔曼进行了比斯韦尔林更有意义的工作。
他严格地把状态变量的概念引入到最小均方误差估计中来,建立了卡尔曼滤波理论。
Kalman滤波和数字滤波一、kalman滤波卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。
采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。
它适合于实时处理和计算机运算。
其他的就不介绍了。
公式简介卡尔曼滤波主要是由5个经典公式组成:X(k|k-1)=A X(k-1|k-1)+B U(k) (1)式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的协方差还没更新。
我们用P表示协方差:P(k|k-1)=A P(k-1|k-1) A’+Q (2)式(2)中,P(k|k-1)是X(k|k-1)对应的协方差,P(k-1|k-1)是X(k-1|k-1)对应的协方差,A’表示A的转置矩阵,Q是系统过程的协方差。
式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。
结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)其中Kg为卡尔曼增益(Kalman Gain):Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。
但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的协方差:P(k|k)=(I-Kg(k) H)P(k|k-1) (5)其中I 为1的矩阵,对于单模型单测量,I=1。
当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。
% 扩展卡尔曼滤波器估计单相电压幅值、相位、频率参数(含直流)function test2_EKFclose all;clc;tic; %计时%模型:y=A0+A1*cos(omega*t+phy1)%离散化:y(k)=A0(k)+A1(k)*cos(omega(k)*k*Ts+phy1(k))%状态变量:x1(k)=A0(k),x2(k)=omega(k),x3(k)=A1(k)*cos(omega(k)*k*Ts+phy1(k) ),x4(k)=A1(k)*sin(omega(k)*k*Ts+phy1(k))%下一时刻状态变量为(假设状态不突变):A0(k+1)=A0(k),A1(k+1)=A1(k),omega(k+1)=omega(k),phy1(k+1)=phy1 (k);%则对应状态为:x1(k+1)=x1(k),x2(k+1)=x2(k),x3(k+1)=x3(k)*cos(x2(k)*Ts)-x4(k)*sin(x(2)*Ts),x4(k+1)=x3(k)*sin(x2(k)*Ts)+x4(k)*cos(x(2)*Ts);%状态空间描述:X(k+1)=f(X(k))+W(k);y(k)=H*X(k)+v(k)%f(X(k))=[x1(k);x2(k);x3(k)*cos(x2(k)*Ts)-x4(k)*sin(x(2)*Ts);x3(k)*sin(x2(k)*Ts)+x4(k)*cos(x(2)*Ts)]%偏导(只求了三个):f`(X(k))=[1,0,0;0,1,0;0,-x3(k)*Ts*sin(x2(k)*Ts)-x4(k)*Ts*cos(x2(k)*Ts),cos(x2(k)*Ts);0,x3(k)*Ts*cos(x2(k)*Ts)-x4(k)*Ts*sin(x2(k)*Ts),sin(x2(k)*Ts)]N=1000;t=linspace(0,1,N);y=2+0.5*cos(2*pi*100*t+pi/3);y1=y+0.05*randn(size(y));% p1=1*exp(-4*log(2)*(t-0.5).^2/0.005^2);% y1=y1+p1;% y1=y;Ts=diff(t(1:2));% plot(t,y)% 状态空间描述:X(k+1)=f(X(k))+W(k);y(k)=H*X(k)+v(k);X=zeros(4,N);% X1=X;X(:,1)=[0,199*pi,0,0];Q=1e-7*eye(4);R=1;P=1e4*eye(4);H=[1,0,1,0];for j=2:NX1=[X(1,j-1);X(2,j-1);X(3,j-1)*cos(X(2,j-1)*Ts)-X(4,j-1)*sin(X(2,j-1)*Ts);X(3,j-1)*sin(X(2,j-1)*Ts)+X(4,j-1)*cos(X(2,j-1)*Ts)];F=[1,0,0,00,1,0,00,-X(3,j-1)*Ts*sin(X(2,j-1)*Ts)-X(4,j-1)*Ts*cos(X(2,j-1)*Ts),cos(X(2,j-1)*Ts),-sin(X(2,j-1)*Ts)0,X(3,j-1)*Ts*cos(X(2,j-1)*Ts)-X(4,j-1)*Ts*sin(X(2,j-1)*Ts),sin(X(2,j-1)*Ts),cos(X(2,j-1)*Ts)];P1=F*P*F'+Q;K=P1*H'/(H*P1*H'+R);X(:,j)=X1+K*(y1(j)-H*X1);P=(eye(4)-K*H)*P1;endy2=H*X;toc; %结束计时subplot(2,3,1)plot(t,y1)hold onplot(t,y2,'-',t,y,'--')hold offsubplot(2,3,2)plot(t,X(1,:)) %直流偏移subplot(2,3,3)plot(t,X(2,:)/2/pi) %频率% ylim([5,15])subplot(2,3,4)% plot(t,y1-mean(y1)-y2)plot(t,sqrt(X(3,:).^2+X(4,:).^2)) %幅值subplot(2,3,5)plot(t,atan(X(4,:)./X(3,:))) %相位subplot(2,3,6)plot(t,y1-y2) %误差。
卡尔曼滤波器是一种有效的递归滤波器,它估计线性动态系统的状态。
虽然卡尔曼滤波器主要用于线性系统和线性估计,但它也可以通过扩展应用于非线性系统。
回声消除(Echo Cancellation)是声学信号处理中的一个经典问题,它涉及到从混合信号中分离出原始信号和回声。
卡尔曼滤波器用于回声消除的原理基于以下几个关键点:1. 系统模型:首先,需要建立一个数学模型来描述原始信号和回声之间的关系。
这个模型通常包含状态空间模型,其中状态变量表示信号的当前估计,而控制输入则可以是清除信号或噪声。
2. 观测模型:观测模型描述了系统状态与可观测输出之间的关系。
在回声消除的应用中,观测信号通常是麦克风接收到的混合信号,即原始信号和回声的叠加。
3. 预测:卡尔曼滤波器使用预测步骤来估计下一个状态。
在这个步骤中,滤波器会根据系统模型和当前的估计来预测状态变量的未来值。
4. 更新:在更新步骤中,滤波器使用观测数据来修正预测状态。
这个步骤包括计算卡尔曼增益,它是观测值与预测值之间差异的权重,用于调整状态估计。
5. 回声消除:在回声消除的应用中,卡尔曼滤波器的输出可以用来生成一个清除信号,该信号是原始信号和回声的差值。
这个差值是通过对混合信号进行滤波来实现的,滤波器设计得能够识别并抑制回声成分。
6. 反馈:最后,清除信号可以反馈到系统中,与原始信号混合,以减少回声的影响。
这种反馈机制是回声消除中关键的一环,它需要仔细调整,以避免引入噪声或影响原始信号的质量。
使用卡尔曼滤波器进行回声消除的关键挑战在于模型的准确性、卡尔曼增益的计算以及如何处理非线性效应。
实际应用中,可能需要对卡尔曼滤波器进行适当的修改或扩展,例如使用扩展卡尔曼滤波器(EKF)或无迹卡尔曼滤波器(UKF)来处理非线性特性。
此外,回声消除算法还需要考虑实时性和计算效率,以便在实际通信系统中得到应用。
卡尔曼滤波计算举例⏹计算举例⏹卡尔曼滤波器特性假设有一个标量系统,信号与观测模型为[1][][]x k ax k n k +=+[][][]z k x k w k =+其中a 为常数,n [k ]和w [k ]是不相关的零均值白噪声,方差分别为和。
系统的起始变量x [0]为随机变量,其均值为零,方差为。
2nσ2σ[0]x P (1)求估计x [k ]的卡尔曼滤波算法;(2)当时的卡尔曼滤波增益和滤波误差方差。
220.9,1,10,[0]10nx a P =σ=σ==1. 计算举例根据卡尔曼算法,预测方程为:ˆˆ[/1][1/1]xk k ax k k -=--预测误差方差为:22[/1][1/1]x x nP k k a P k k -=--+σ卡尔曼增益为:()1222222[][/1][/1][1/1][1/1]x x x nx n K k P k k P k k a P k k a P k k -=--+σ--+σ=--+σ+σˆˆˆ[/][/1][]([][/1])ˆˆ[1/1][]([][1/1])ˆ(1[])[1/1][][]xk k x k k K k z k x k k axk k K k z k ax k k a K k xk k K k z k =-+--=--+---=---+滤波方程:()()2222222222222[/](1[])[/1][1/1]1[1/1][1/1][1/1][1/1]x x x nx n x n x nx nP k k K k P k k a P k k a P k k a P k k a P k k a P k k =--⎛⎫--+σ=---+σ ⎪--+σ+σ⎝⎭σ--+σ=--+σ+σ滤波误差方差起始:ˆ[0/0]0x=[0/0][0]x x P P =k [/1]x P k k -[/]x P k k []K k 012345689104.76443.27012.67342.27652.21422.18362.16832.16089.104.85923.64883.16542.94752.84402.79352.76870.47360.32700.26730.24040.22770.22140.21840.2168ˆ[0/0]0x=[0/0]10x P =220.9110na =σ=σ=2. 卡尔曼滤波器的特性从以上计算公式和计算结果可以看出卡尔曼滤波器的一些特性:(1)滤波误差方差的上限取决于测量噪声的方差,即()2222222[1/1][/][1/1]x nx x na P k k P k k a P k k σ--+σ=≤σ--+σ+σ2[/]x P k k ≤σ这是因为(2)预测误差方差总是大于等于扰动噪声的方差,即2[/1]x nP k k -≥σ这是因为222[/1][1/1]x x n nP k k a P k k -=--+σ≥σ(3)卡尔曼增益满足,随着k 的增加趋于一个稳定值。
卡尔曼滤波器基本方程推导过程卡尔曼滤波器基本方程推导过程主要涉及状态方程、观测方程、卡尔曼增益和状态估计等内容。
卡尔曼滤波器是一种用于估计系统状态的递归滤波器,能够通过利用系统的动态模型和测量数据来实现对状态的最优估计。
首先,我们需要定义系统的状态方程和观测方程。
系统的状态方程可以用如下一阶线性动态系统表示:x(k+1) = Ax(k) + Bu(k) + w(k)其中,x(k)为系统状态向量,A为状态转移矩阵,B为输入矩阵,u(k)为系统输入,w(k)为过程噪声。
系统的状态方程描述了系统状态如何随时间演化。
系统的观测方程可以用如下线性观测系统表示:z(k) = Hx(k) + v(k)其中,z(k)为观测值,H为观测矩阵,v(k)为观测噪声。
观测方程描述了系统状态如何被观测到。
接下来,我们可以通过最小二乘法来推导卡尔曼滤波器的基本方程。
我们的目标是最小化状态估计值和真实状态之间的均方误差。
首先,定义状态估计误差为:e(k) = x(k) - x^(k)其中,x^(k)为状态估计值。
状态估计误差的动态方程为:e(k+1) = x(k+1) - x^(k+1) = (A-KH)e(k) + w(k) - Kh(k) + v(k)其中,K为卡尔曼增益。
接着,我们可以通过最小化状态估计误差的方差来推导卡尔曼增益的表达式。
最小化状态估计误差的方差可得到卡尔曼增益的计算公式:K = P*H^T(HP*H^T + R)^-1其中,P为状态估计误差的协方差矩阵,R为观测噪声的协方差矩阵。
卡尔曼增益的计算公式描述了如何根据系统的动态模型和测量数据来进行状态估计。
最后,我们可以通过状态估计误差的动态方程和卡尔曼增益的计算公式来得到卡尔曼滤波器的状态估计方程:x^(k+1) = (A-KH)x^(k) + KH(z(k) - Hx^(k))P(k+1) = (I-KH)P(k)(I-KH)^T + KRK^T其中,I为单位矩阵,P为状态估计误差的协方差矩阵。
卡尔曼滤波器MATLAB卡尔曼滤波器源程序:
% 确定采样点数(信号长度)
input1=inputdlg('请选择信号长度( > 1 ):');
n=str2num(char(input1));
% 数据初始化
kalman_mse(1)=1; % 给定的初始局方误差
s1(1)=0; % 信号初始值
W=random('norm',0,1,n,1); %信号噪声
% 构造原信号模型
s(1)=0;
for i=2:n
s(i)=0.8*s(i-1)+W(i);
end
%绘制原信号图形
subplot(411)
plot(s,'r')
title('原信号')
axis([1 n -5 5])
% 构造观测信号模型(即加噪)
x=awgn(s,1,0);
% 绘制加噪声后信号图形
subplot(412)
plot(x)
title('含噪原信号')
axis([1 n -5 5])
% 卡尔曼滤波器部分
for i=2:n
p=0.64*kalman_mse(i-1)+0.36;
g=p/(1+p);
kalman_mse(i)=(1-g)*p;
s1(i)=0.8*s1(i-1)+g*(x(i)-0.8*s1(i-1));
end
subplot(413) %绘制经卡尔曼滤波器滤波处理后的信号图形plot(s1,'r')
title('卡尔曼去噪以后的信号')
axis([1 n -5 5])
subplot(414) %绘制均方误差图
plot(kalman_mse)
title('均方误差')
运行结果:
选择信号步长50:
运行后的结果如下图示:
结果分析:
上图依次给出了选取n=50的原信号、加噪后的信号、经卡尔曼滤波器滤波后的信号及均方误差,由图可知,经过卡尔曼滤波器滤波后的信号非常接近加噪声之前的原信号,均方误差趋于稳定,滤波信号良好。