MATLAB 对卡尔曼滤波器的仿真实现
卡尔曼滤波器及matlab代码

信息融合大作业——维纳最速下降法滤波器,卡尔曼滤波器设计及Matlab仿真时间:2010-12-6专业:信息工程班级:09030702姓名:马志强1.滤波问题浅谈估计器或滤波器这一术语通常用来称呼一个系统,设计这样的系统是为了从含有噪声的数据中提取人们感兴趣的,接近规定质量的信息。
由于这样一个宽目标,估计理论应用于诸如通信、雷达、声纳、导航、地震学、生物医学工程、金融工程等众多不同的领域。
例如,考虑一个数字通信系统,其基本形式由发射机、信道和接收机连接组成。
发射机的作用是把数字源(例如计算机)产生的0、1符号序列组成的消息信号变换成为适合于信道上传送的波形。
而由于符号间干扰和噪声的存在,信道输出端收到的信号是含有噪声的或失真的发送信号。
接收机的作用是,操作接收信号并把原消息信号的一个可靠估值传递给系统输出端的某个用户。
随着通信系统复杂度的提高,对原消息信号的还原成为通信系统中最为重要的环节,而噪声是接收端需要排除的最主要的干扰,人们也设计出了针对各种不同条件应用的滤波器,其中最速下降算法是一种古老的最优化技术,而卡尔曼滤波器随着应用条件的精简成为了普适性的高效滤波器。
2.维纳最速下降算法滤波器2.1 最速下降算法的基本思想考虑一个代价函数J(J),它是某个未知向量J的连续可微分函数。
函数J(J)将J的元素映射为实数。
这里,我们要寻找一个最优解J。
使它满足如下条件J(J0)≤J(J)(2.1)这也是无约束最优化的数学表示。
特别适合于自适应滤波的一类无约束最优化算法基于局部迭代下降的算法:从某一初始猜想J(0)出发,产生一系列权向量J(1),J(2),,使得代价函数J(J)在算法的每一次迭代都是下降的,即J(J(J+1))<J(J(J))其中J(J)是权向量的过去值,而J(J+1)是其更新值。
我们希望算法最终收敛到最优值J0。
迭代下降的一种简单形式是最速下降法,该方法是沿最速下降方向连续调整权向量。
rssi卡尔曼滤波matlab代码

rssi卡尔曼滤波matlab代码RSSI (Received Signal Strength Indicator) 是一种常见的无线通信信号强度测量方法。
在无线传感器网络中,RSSI常用于距离和位置估计。
卡尔曼滤波器是一种高效递归滤波器,可用于在有噪声的情况下,根据一系列测量值来估计状态变量。
在无线传感器网络中,卡尔曼滤波器可用于RSSI测量值的滤波和校正。
以下是一个简单的RSSI卡尔曼滤波器的MATLAB代码示例:```matlab% 假设你已经有了原始的RSSI测量值 rssi_measurements% 初始位置和速度x0 = [0, 0]; % 初始位置P0 = 1; % 初始位置的不确定性Q = 0.01; % 过程噪声协方差R = 1; % 测量噪声协方差% 卡尔曼滤波器参数dt = 0.1; % 时间间隔x = x0; % 当前位置P = P0; % 当前位置的不确定性K = zeros(2,1); % 卡尔曼增益for i = 1:length(rssi_measurements)% 预测步骤:状态转移方程x_pred = x + dt * x; % 预测位置P_pred = P + Q; % 预测位置的不确定性% 更新步骤:测量更新方程Z = rssi_measurements(i) + x_pred(2)^2 / (x_pred(1)^2 + x_pred(2)^2) - x_pred(1)^2 / (x_pred(1)^2 + x_pred(2)^2); % 计算测量值K = P_pred / (P_pred + R); % 计算卡尔曼增益x = x_pred + K * (Z - x_pred(1)); % 更新位置P = (1 - K) * P_pred; % 更新位置的不确定性end```请注意,这个代码只是一个简单的示例,并没有考虑所有可能的情况和参数。
在实际应用中,你可能需要根据具体的需求和环境条件来调整和优化这个代码。
卡尔曼滤波器及matlab实现

卡尔曼滤波器及Matlab实现简介卡尔曼滤波器是一种常用于估计系统状态的滤波器,特别适用于具有线性动态模型和高斯噪声的系统。
它通过结合系统的测量值和模型预测的状态来估计系统的状态,并利用测量噪声和模型噪声的特性进行优化。
本文将介绍卡尔曼滤波器的基本原理,并使用Matlab实现一个简单的卡尔曼滤波器。
卡尔曼滤波器的基本原理卡尔曼滤波器的基本原理可以描述为以下步骤:1.初始化卡尔曼滤波器的状态估计值和协方差矩阵。
通常情况下,可以将初始状态设定为系统的初始状态,协方差矩阵设定为一个较大的值。
2.预测步骤:根据系统的动态模型预测下一时刻的状态和协方差矩阵。
3.更新步骤:使用测量值来更新预测的状态和协方差矩阵,得到最优的状态估计值和协方差矩阵。
具体的数学表达式如下:预测步骤:预测的状态估计值:x_k = A*x_(k-1) + B*u_k预测的协方差矩阵:P_k = A*P_(k-1)*A' + Q其中,A是状态转移矩阵,B是输入控制矩阵,u_k是输入控制向量,Q是模型噪声协方差。
更新步骤:测量残差:y_k = z_k - H*x_k残差协方差矩阵:S_k = H*P_k*H' + R卡尔曼增益:K_k = P_k*H'*inv(S_k)更新后的状态估计值:x_k = x_k + K_k*y_k更新后的协方差矩阵:P_k = (I - K_k*H)*P_k其中,H是观测矩阵,z_k是测量值,R是测量噪声协方差。
Matlab实现接下来,我们使用Matlab来实现一个简单的卡尔曼滤波器。
我们假设一个一维运动系统,系统状态为位置,系统模型如下:x_k = x_(k-1) + v_(k-1) * dtv_k = v_(k-1) + a_(k-1) * dt式中,x_k是当前时刻的位置,v_k是当前时刻的速度,a_k是当前时刻的加速度,dt是时间步长。
假设我们只能通过传感器得到位置信息,并且测量噪声服从均值为0、方差为0.1的高斯分布。
自适应扩展卡尔曼滤波matlab

自适应扩展卡尔曼滤波matlab自适应扩展卡尔曼滤波(Adaptive Extended Kalman Filter,AEKF)是一种用于非线性系统状态估计的滤波算法。
本文将介绍AEKF算法的原理、步骤和实现方法,并结合MATLAB 编写代码进行演示。
一、扩展卡尔曼滤波原理扩展卡尔曼滤波(Extended Kalman Filter,EKF)是一种用于非线性系统状态估计的滤波算法。
它通过使用线性化系统模型的方式将非线性系统转换为线性系统,在每个时间步骤中用线性卡尔曼滤波器进行状态估计。
然而,EKF仅限于具有凸多边形测量特性的问题,并且对线性化过程误差敏感。
为了解决这些问题,AEKF通过自适应更新协方差矩阵的方式提高了滤波器的性能。
AEKF通过测量残差的方差更新协方差矩阵,从而提高了滤波器对非线性系统的适应能力。
AEKF算法的步骤如下:1. 初始化状态向量和协方差矩阵。
2. 根据系统的非线性动力学方程和测量方程计算预测状态向量和协方差矩阵。
3. 计算测量残差,即测量值与预测值之间的差值。
4. 计算测量残差的方差。
5. 判断测量残差的方差是否超过预设阈值,如果超过,则更新协方差矩阵。
6. 利用更新后的协方差矩阵计算最优滤波增益。
7. 更新状态向量和协方差矩阵。
8. 返回第2步,进行下一次预测。
二、AEKF算法的MATLAB实现下面,我们将使用MATLAB编写AEKF算法的代码,并通过一个实例进行演示。
首先,定义非线性系统的动力学方程和测量方程。
在本例中,我们使用一个双摆系统作为非线性系统模型。
```matlabfunction x_next = nonlinear_dynamics(x_current, u)% Nonlinear system dynamicstheta1 = x_current(1);theta2 = x_current(2);d_theta1 = x_current(3);d_theta2 = x_current(4);g = 9.8; % Gravitational accelerationd_theta1_next = d_theta1 + dt * (-3*g*sin(theta1) - sin(theta1-theta2) ...+ 2*sin(theta1-theta2)*(d_theta2^2 + d_theta1^2*cos(theta1-theta2))) .../ (3 - cos(2*(theta1-theta2)));d_theta2_next = d_theta2 + dt * (2*sin(theta1-theta2)*(2*d_theta2^2 ...+ d_theta1^2*cos(theta1-theta2) + g*cos(theta1) +g*cos(theta1-theta2))) .../ (3 - cos(2*(theta1-theta2)));theta1_next = theta1 + dt * d_theta1_next;theta2_next = theta2 + dt * d_theta2_next;x_next = [theta1_next; theta2_next; d_theta1_next;d_theta2_next];endfunction y = measurement_model(x)% Measurement model, measure the angles of the double pendulumtheta1 = x(1);theta2 = x(2);y = [theta1; theta2];end```然后,定义AEKF算法的实现。
matlab扩展卡尔曼滤波实例

matlab扩展卡尔曼滤波实例在MATLAB中实现卡尔曼滤波的过程。
第一步:准备数据要使用卡尔曼滤波算法,首先需要准备尽可能准确的测量数据。
我们假设我们正在跟踪一个匀速运动的物体,我们使用一个简单的模型来生成数据。
以下是一个MATLAB代码示例:matlab生成匀速运动数据t = 0:0.1:10; 时间范围v = 2; 速度x_true = 5 + v*t; 真实位置x_meas = x_true + 0.5*randn(size(t)); 测量位置(加入噪声)上述代码生成了10秒钟内物体的真实位置(x_true)和加入高斯噪声的测量位置(x_meas)。
第二步:初始化卡尔曼滤波器在开始使用卡尔曼滤波器之前,需要初始化滤波器的状态估计和协方差矩阵。
以下是一个示例代码:matlab初始化卡尔曼滤波器参数x_est = 0; 状态估计P_est = 1; 协方差矩阵Q = 1; 过程噪声方差R = 0.5; 测量噪声方差在上述代码中,我们初始化了状态估计(x_est)、协方差矩阵(P_est)、过程噪声方差(Q)和测量噪声方差(R)。
第三步:卡尔曼滤波迭代卡尔曼滤波的核心是迭代过程,其中包含两个关键步骤:预测和更新。
预测步骤是使用系统模型来预测下一时刻的状态和协方差矩阵。
更新步骤将测量值与预测结果进行比较,以改进状态估计和协方差矩阵。
以下是一个MATLAB代码示例:matlab卡尔曼滤波迭代for k = 1:length(t)预测步骤x_pred = x_est;P_pred = P_est + Q;更新步骤K = P_pred / (P_pred + R);x_est = x_pred + K*(x_meas(k) - x_pred);P_est = (1 - K)*P_pred;保存状态估计结果x_est_hist(k) = x_est;end在上述代码中,我们首先进行预测步骤,计算预测状态(x_pred)和预测协方差矩阵(P_pred)。
维纳、卡尔曼滤波简介及MATLAB实现

现代数字信号处理课程作业维纳、卡尔曼、RLS、LMS算法matlab实现维纳滤波从噪声中提取信号波形的各种估计方法中,维纳(Wiener)滤波是一种最基本的方法,适用于需要从噪声中分离出的有用信号是整个信号(波形),而不只是它的几个参量。
设维纳滤波器的输入为含噪声的随机信号。
期望输出与实际输出之间的差值为误差,对该误差求均方,即为均方误差。
因此均方误差越小,噪声滤除效果就越好。
为使均方误差最小,关键在于求冲激响应。
如果能够满足维纳-霍夫方程,就可使维纳滤波器达到最佳。
维纳滤波器的优点是适应面较广,无论平稳随机过程是连续的还是离散的,是标量的还是向量的,都可应用。
维纳滤波器的缺点是,要求得到半无限时间区间内的全部观察数据的条件很难满足,同时它也不能用于噪声为非平稳的随机过程的情况,对于向量情况应用也不方便。
因此,维纳滤波在实际问题中应用不多。
下面是根据维纳滤波器给出的图像处理matlab实例,在下面实例中维纳滤波和均值滤波相比较,并且做了维纳复原、边缘提取、图像增强的实验:%****************维纳滤波和均值滤波的比较*********************I=imread('lena.bmp');J=imnoise(I,'gaussian',0,0.01);Mywiener2 = wiener2(J,[3 3]);Mean_temp = ones(3,3)/9;Mymean = imfilter(J,Mean_temp);figure(1);subplot(121),imshow(Mywiener2),title('维纳滤波器输出');subplot(122),imshow(uint8(Mymean),[]),title('均值滤波器的输出');%***********************维纳复原程序********************figure(2);subplot(231),imshow(I),title('原始图像');LEN = 20;THETA =10;PSF = fspecial('motion',LEN,THETA);Blurred = imfilter(I,PSF,'circular');subplot(232),imshow(Blurred),title('生成的运动的模糊的图像');noise = 0.1*randn(size(I));subplot(233),imshow(im2uint8(noise)),title('随机噪声');BlurredNoisy=imadd(Blurred,im2uint8(noise));subplot(234),imshow(BlurredNoisy),title('添加了噪声的模糊图像');Move=deconvwnr(Blurred,PSF);subplot(235),imshow(Move),title('还原运动模糊的图像');nsr = sum(noise(:).^2)/sum(im2double(I(:)).^2);wnr2 = deconvwnr(BlurredNoisy,PSF,nsr);subplot(236),imshow(wnr2),title('还原添加了噪声的图像');%****************维纳滤波应用于边缘提取*********************N = wiener2(I,[3,3]);%选用不同的维纳窗在此修改M = I - N;My_Wedge = im2bw (M,5/256);%化二值图像BW1 = edge(I,'prewitt');BW2 = edge(I,'canny');BW3 = edge(I,'zerocross');BW4 = edge(I,'roberts');figure(3)subplot(2,4,[3 4 7 8]),imshow(My_Wedge),title('应用维纳滤波进行边沿提取'); subplot(241),imshow(BW1),title('prewitt');subplot(242),imshow(BW2),title('canny');subplot(245),imshow(BW3),title('zerocross');subplot(246),imshow(BW4),title('roberts');%*************************维纳滤波应用于图像增强***************************for i = [1 2 3 4 5] K = wiener2(I,[5,5]);end K = K + I; figure(4);subplot(121),imshow(I),title('原始图像'); subplot(122),imshow(K),title('增强后的图像');维纳滤波器输出均值滤波器的输出原始图像生成的运动的模糊的图像随机噪声添加了噪声的模糊图像还原运动模糊的图像还原添加了噪声的图像卡尔曼滤波卡尔曼滤波的一个典型实例是从一组有限的,对物体位置的,包含噪声的观察序列预测出物体的坐标位置及速度。
容积卡尔曼滤波 matlab

容积卡尔曼滤波matlab摘要:1.容积卡尔曼滤波简介2.容积卡尔曼滤波算法原理3.容积卡尔曼滤波算法在MATLAB 中的实现4.容积卡尔曼滤波算法的应用案例5.结论正文:一、容积卡尔曼滤波简介容积卡尔曼滤波(Cubature Kalman Filter,简称CKF)是一种基于卡尔曼滤波理论的非线性滤波算法。
它通过将非线性系统的状态空间模型和观测模型进行离散化,采用立方插值方法对系统状态进行预测和更新,从而实现对非线性系统的状态估计。
相较于传统的卡尔曼滤波,容积卡尔曼滤波具有更好的性能和鲁棒性,被广泛应用于导航定位、目标跟踪、机器人控制等领域。
二、容积卡尔曼滤波算法原理容积卡尔曼滤波算法主要包括两个部分:预测阶段和更新阶段。
1.预测阶段在预测阶段,首先对系统的状态向量进行初始化,然后通过系统动态模型和观测模型,对系统的状态向量进行预测。
具体来说,根据系统的状态转移矩阵、控制矩阵、观测矩阵和过程噪声协方差矩阵,计算预测状态向量的均值和协方差矩阵。
2.更新阶段在更新阶段,根据预测的观测值和观测协方差矩阵,计算观测均值和协方差矩阵。
然后,利用卡尔曼增益公式,结合预测状态向量和观测均值,更新系统的状态向量和协方差矩阵。
三、容积卡尔曼滤波算法在MATLAB 中的实现在MATLAB 中,可以通过以下步骤实现容积卡尔曼滤波算法:1.导入所需库:`import numpy as np;`2.初始化状态向量和协方差矩阵:`x = np.zeros((2,1)); p =np.zeros((2,2));`3.设置系统参数:`F = np.array([[1, 0.1], [0, 1]]); Q = np.array([[0.1, 0], [0, 0.1]]); H = np.array([[1, 0], [0, 1]]);`4.预测阶段:`F_pred = F; Q_pred = Q; x_pred = F_pred @ x; S_pred = F_pred @ P @ F_pred.T + Q_pred;`5.更新阶段:`y=H@x;S_update=H@*****+R;`6.计算卡尔曼增益:`K=*****@np.linalg.inv(S_update);`7.更新状态向量和协方差矩阵:`x = x + K @ (y - H @ x); P = (np.eye(2) - K @ H) @ P;`四、容积卡尔曼滤波算法的应用案例容积卡尔曼滤波算法在各种领域都有广泛应用,例如:1.导航定位:利用GPS、惯性导航等传感器的数据,实现对飞行器、船舶等移动设备的精确定位。
卡尔曼滤波的MATLAB实现演示教学

卡尔曼滤波的MATLAB 实现一、实验内容一个系统模型为 )()()1(,1,0),()()()1(22211k w k x k x k k w k x k x k x +=+=++=+同时有下列条件:(1) 初始条件已知且有T x ]0,0[)0(=。
(2) )(k w 是一个标量零均值白高斯序列,且自相关函数已知为jk k w j w E δ=)]()([。
另外,我们有下列观测模型,即 )1()1()1(,1,0),1()1()1(222111+++=+=+++=+k v k x k y k k v k x k y且有下列条件:(3) )1(1+k v 和)1(2+k v 是独立的零均值白高斯序列,且有 ,2,1,0,2)]()([,)]()([2211===k k v j v E k v j v E jk jk δδ(4) 对于所有的j 和k ,)(k w 与观测噪声过程)1(1+k v 和)1(2+k v 是不相关的,即,2,1,0,,2,1,0,0)]()([,0)]()([21====k j k v j w E k v j w E我们希望得到由观测矢量)1(+k y ,即T k y k y k y )]1(),1([)1(21++=+估计状态矢量T k x k x k x )]1(),1([)1(21++=+的卡尔曼滤波器的公式表示形式,并求解以下问题:(a ) 求出卡尔曼增益矩阵,并得出最优估计)1(+k x 和观测矢量)1(),...,2(),1(+k y y y 之间的递归关系。
(b ) 通过一个标量框图(不是矢量框图)表示出状态矢量)1(+k x 中元素)1(1+k x 和)1(2+k x 估计值的计算过程。
(c ) 用模拟数据确定状态矢量)(k x 的估计值,10,...,1,0),(=∧k k k x 并画出当k =0,1,…,10时)(1k k x ∧和)(2k k x ∧的图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XXXXX学院
《电子信息系统仿真》课程设计届电子信息工程专业班级
题目卡尔曼滤波器的设计与仿真
姓名学号
指导教师职称
二О1年月日
MATLAB 对卡尔曼滤波器的仿真实现
课程设计目的:曼滤波器原理为理论基础,用MATLAB进行卡尔曼滤波器仿真、对比卡尔曼滤波器的预测效果,对影响滤波其效果的各方面原因进行讨论和比较,按照理论模型进行仿真编程,清晰地表述了编程过程。
关键词:数字信号处理;卡尔曼滤波器;MATLAB;仿真过程
2.卡尔曼滤波基本原理
卡尔曼滤波过程实际上是获取维纳解的递推运算过程。
从维纳解导出的卡尔曼滤波器实际上是卡尔曼滤波过程结束后达到稳态的情况,这时Kalman Filtering的结果与Wiener
我们总结出卡尔曼的五个核心方程:
X(k|k-1)=A X(k-1|k-1)+B U(k) (1)
P(k|k-1)=A P(k-1|k-1) A‟+Q (2)
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)
Kg(k)= P(k|k-1) H‟ / (H P(k|k-1) H‟ + R) (4)
P(k|k)=(I-Kg(k) H)P(k|k-1) (5)
计算滤波估计的流程图如图所示:
图(1)
可以看出,滤波过程是以不断地“预测—修正”的递推方式进行计算,先进行预测值计算,再根据观测值得到的新信息和kalman 增益(加权项),对预测值进行修正。
由滤波值可以得到预测,又由预测可以得到滤波,其滤波和预测相互作用,并不要求存储任何观测数据,可以进行实时处理。
3.程序设计
卡尔曼滤波器给出了一个应用状态变量概念的公式。
而且,不同于其他的递归滤波器结构,它只需要记住一步的估计结果。
考虑过程噪声和测量噪声两个随机变量的状态模型称为随机状态模型。
用下面两个方程描述离散状态模型:
1)过程方程:x(k +1) = Ax(k) + Bu(k) + w(k)
其中,w(k)是由于过程模型的不确定性而产生的模型噪声,它可能是最难量化的参数。
2)输出方程:y(k) = Cx(k) + v(k)
其中,v(k)是测量噪声。
3)过程状态估计
状态估计分为两步,如图所示:
图(2)
一个是两个采样周期之间的状态转移阶段,这个阶段叫做TU(Time Update)阶段:x∧ (k | k −1) = Ax∧ (k −1) + Bu(k −1);
另一个是获得y(k)的t时刻过程状态更新阶段,这个阶段叫
MU(Measurement Update)阶段.
4)噪声过程
卡尔曼估计滤波器可以根据控制信号u(k)和测量输出( ) b y k,来估计过程输出y(k)和状态变化x(k)。
需要的先验知识包括噪声w(k)、v(k)的方差,以及如果不为零时它们的互相关性。
过程描述如下图:
图(3)
x = Ax + b(u + w)
这个式子是有两个输入u(t)和w(t)的状态空间描述,可用ss 函数来计算。
% Process state representation
Process=ss (Ad, [Bd Bd]), C, 0, Te, …inputname‟,{…u‟…w‟},… …outputname‟,{…y‟};
w(t)和v(t)的方差分别为Q和R。
N 为w(t)和v(t)的互相关矩阵。
卡尔曼函数根据Q、R、N 和过程状态描述计算卡尔曼估计滤波器。
在这个例子中,模型噪声和测量噪声不相关,
即N = 0。
% noises
n=100;
w=0.1*randn(n,1);
v=0.3*randn(n,1);
Q=std(w).ˆ2;
R=std(v).ˆ2;
Wv=cov(v,w);
N=wv(1,2);
% kalman estimator
[F_kalman,L,P,M]=kalman(process,Q,R);
模型描述+测量噪声+卡尔曼滤波器
系统结构框图
图(4)
建立包含测量噪声的一般模型的状态空间描述
% State representation process + measurement noise
a=Ad;
b=[Bd Bd [0;0]];
c=[C C];
d=[0 0 0;0 0 1];
process=ss (a,b,c,d,Te,‟inputname‟),{…u‟ …w‟ …v‟},… …outputname‟,{…y‟ …yb‟})
然后把这个过程和卡尔曼滤波器联系起来,得到整个过程的状态空间函数parallel 用来把卡尔曼滤波器和过程联系起来。
然后,函数feedback 用来创建把过程输出b y 当作卡尔曼滤波器输入的反馈环节,最后由状态模型得到输出。
% Parallel placing process + kalman filter
Sysp=parallel (process, F_kalman,1,1,[ ],[ ]);
% yv feedback
Syspb= feedback (sysp,1,4,2,1);
% yv input cancellation
Syspb=syspb ([1 2 3 4 5], [1 2 3]);
4.仿真结果:
控制信号图(5)
模拟噪声
图(6)
测量噪声
图(7)
下面分别为有噪声过程和无噪声过程曲线:
有噪声过程曲线
图(8)
无噪声过程曲线
图(9)5. 误差分析
计算各个误差以及误差方差。
% Errors variance calculation
% Modeling noise
Plot (t,yp-outputs (:,1));
Title (…Modeling noise‟);
ec1=std (yp-outputs (:,1))
% Modeling and measurement noises
Plot (t,yp-outputs (:,2));
Title (…Modeling and measurement noises‟);
ec2=std (yp-outputs (:,2))
%Filtered process
Plot (t,yp-outputs (:,3));
Title (…Filtered process‟);
ec3=std (yp-outputs (:,3))
各个误差的图形如下:
误差方差为:ec1=0.0637
图(10)
误差方差为:ec2=0.3204
图(11)
误差方差为:ec3=0.0136
图(12)
估计输出信号的误差方差约为测量输出信号误差方差的1/23,约为无测量噪声时输出信号误差方差的1/15。
6. 结论
卡尔曼滤波器是一种由卡尔曼提出的用于时变线性系统的递归滤波器。
这个系统可用包含正交状态变量的微分方程模型来描述,这种滤波器是将过去的测量估计误差合并到新的测量误差中来估计将来的误差。
我刚刚接触这个叫做卡尔曼滤波器的东东时,真正的体验是雾里看花,为什么是这样一种感觉?现在我想起庞加莱谈拓扑学说过的一段话:“拓扑学是一门科学,它不仅能使我们认识通常空间中几何
图形的定性性质,在三维空间中,拓扑学是近乎直观的,反之,对于高于三维的空间,拓扑学就显得难以捉摸了,为了克服这一点,需要对这
门科学的极端重要性确定坚定的信念,如果这种重要性尚未为人所认识,那实在是因为人们对此还没有仔细想过。
”这段话我看来是刻划了一种认识事物的方法,很多时候会觉得有些道理真是莫名其妙,就是没有仔细想过,对没有仔细想过的东西下错误的结论事后自己都觉得脸红。
本文分析了数字滤波器的设计方法,举出了基于MATLAB 软件的信号处理工具在数字滤波器设计中的应用。
卡尔曼滤波由于其在求解时不需要贮存大量的观测数据,并且当得到新的观测数据时,可随时算得新的参数滤波值,便于实时地处理观测成果,因此,卡尔曼滤波被越来越多地应用于动态数据处理中,尤其是GPS 动态数据处理,惯性导航等。
本文以MATLAB6.0 为例,介绍卡尔曼滤波器的设计方法,目的是为了熟悉卡尔曼滤波器算法及实现,用MATLAB 进行卡尔曼滤波器仿真、对比卡尔曼滤波器的预测效果。
参考文献
(1)薛年喜MATLAB在数字信号处理中的应用(第2版)清华大学出版社2008年一月
(2)李勇.《MATLAB 辅助现代工程数字信号处理》【M】. 西安:西安电子科技大学出版社2002 年10 月
(3)王友功,薛培鼎.《数字滤波器与信号处理》【M】.北京:电子
工业出版社2003-08
(4)潘松,黄继业,王国栋.现代DSP技术[M].西安:西安电子科技大学出版社,2003.
(5)郑建芬.基于高频注入和卡尔曼滤波永磁同步电机无传感器控制。