网站首页 > 技术教程 正文
最近用到Kalman滤波算法,只需要简单应用,不求详细的数学证明,总结如下:
1、 谁是卡尔曼
卡尔曼并不遥远,他是一个当代人,卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。
2、 卡尔曼滤波器的历史
卡尔曼滤波器最早在Kalman的《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)论文中提出;卡尔曼滤波器是一个"optimal recursive data processing algorithm(最优化自回归数据处理算法)" 对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如人脸识别,图像分割,图像边缘检测等等。
3、 卡尔曼滤波器小结
需要了解几个数学知识:
1、每一个随机变量X都是具有一个平均值(这个值在变量的概率密度函数分布图的最中心位置,代表该数值是最可能发生的)和方差(这个数值代表变量的不确定性程度)。平均值μ就是数学期望μ=E(X)。方差D(X)=σ^2=E{[x-E(x)]^2}是衡量或一组数据时离散程度的度量。方差的平方根即标准差或者均方差,即σ。
2、两正态分布的乘积仍然是正态分布,且新正态分布的均值和方差如下:
即正态分布的线性叠加定理。
3、两个事件的发生都是概率性的,不能完全相信其中的任何一个!如果我们具有两个事件,从直觉或者是理性思维上讲,是不是认定两个事件都发生,就找到了那个最理想的估计值?好了,抽象一下,得到:两个事件同时发生的可能性越大,我们越相信它!要想考察它们同时发生的可能性,就是将两个事件单独发生的概率相乘。Kalman滤波算法的本质就是利用两个正态分布的融合仍是正态分布这一特性进行迭代。
4、对Q、R值的理解。 Q是预测值的方差,R是测量值的方差。两者Q/(Q+R)决定Kalman增益,kalman增益越大(说明测量值越可信)实时性好,受随机值影响大;反之(预测值越可信),滞后越大,越平滑
4、 Kalman滤波算法的C代码
float process_variance=0.005,measure_variance=0.1;//过程方差 测量方差
float posteriori_estimation=0,priori_estimation=0;//后验估计值 先验估计值
float posteriori_estimatio_variance=0;//后验估计的方差
float priori_estimatio_variance=0;//先验估计的方差
float kalman_gain=0;//
void KalmanFilter_Init_4()
{
posteriori_estimation=0;
posteriori_estimatio_variance=0;//后验估计的方差
priori_estimation=0;//先验估计值
priori_estimatio_variance=0;//先验估计的方差
kalman_gain=0;
posteriori_estimation=0 ;
posteriori_estimatio_variance=0;
}
float KalmanFilter_4(float Measure)
{
//时间更新(预测)
priori_estimation = posteriori_estimation;// 用上一时刻的最优估计值来作为对当前时刻的预测
priori_estimatio_variance = posteriori_estimatio_variance + process_variance;// 预测的方差为上一时刻最优估计值的方差与过程方差之和
//测量更新(校正)
kalman_gain = priori_estimatio_variance/(priori_estimatio_variance + measure_variance); //计算卡尔曼增益
posteriori_estimation = priori_estimation + kalman_gain*(Measure-priori_estimation);//结合当前时刻的测量值,对上一时刻的预测进行校正,得到校正后的最优估计。该估计具有最小均方差
priori_estimatio_variance = (1-kalman_gain) *priori_estimatio_variance;//计算最终估计值的方差
posteriori_estimatio_variance = priori_estimatio_variance;//
return posteriori_estimation;
}
5、 Kalman滤波算法的M代码
clear all;
close all;
% intial parameters
length = 45; %计算连续length个时刻
sz = [length, 1];
x = 0; %初值,
Q = 0.1; %过程方差
R = 0.5; %测量方差
z=[42 -91 -152 15 15 -133 8 -76 1933 2179 1800 1952 2168 1982 1868 1990 2043 2043 2423 1864 1990 1974 1963 1940 1948 2088 2013 1963 2221 2008 2028 1762 2301 1936 2096 1883 1925 1906 1975 1963 2070 2058 1902 2065 1990];
%对数组进行初始化
x_filter=zeros(sz); %后验估计。即在k时刻,结合当前测量值与k-1时刻先验估计,得到的最终估计值
P_filter=zeros(sz); %后验估计的方差
x_Prediction=zeros(sz); %先验估计。即在k-1时刻,对k时刻做出的估计
P_Prediction=zeros(sz); %先验估计的方差
K=zeros(sz); %卡尔曼增益,反应了测量结果与过程模型的可信程度
% intial guesses
x_filter(1) = 0; %初始估计值为0度
P_filter(1) =0; %误差方差为0
for k = 2:length
%时间更新(预测)
x_Prediction(k) = x_filter(k-1); %用上一时刻的最优估计值来作为对当前时刻的预测
P_Prediction(k) = P_filter(k-1)+Q; %预测的方差为上一时刻最优估计值的方差与过程方差之和
%测量更新(校正)
K(k) = P_Prediction(k)/( P_Prediction(k)+R ); %计算卡尔曼增益
x_filter(k) = x_Prediction(k)+K(k)*(z(k)-x_Prediction(k)); %结合当前时刻的测量值,对上一时刻的预测进行校正,得到校正后的最优估计。该估计具有最小均方差
P_filter(k) = (1-K(k))*P_Prediction(k); %计算最终估计值的方差
end
FontSize=10;
LineWidth=3;
figure();
plot(z,'r+'); %画出的测量值
hold on;
plot(x_filter,'b-','LineWidth',LineWidth) %画出最优估计值
%画出真实值
legend('测量值', '后验估计');
xl=xlabel('序号');
yl=ylabel('测量值');
set(xl,'fontsize',FontSize);
set(yl,'fontsize',FontSize);
hold off;
set(gca,'FontSize',FontSize);
输出结果如图
可见Kalman滤波算法有较好的响应速度和滤波效果。
猜你喜欢
- 2024-11-06 基于MATLAB的刀具角度测量 matlab测工件尺寸
- 2024-11-06 「三十一」MATLAB图像变换之傅里叶变换
- 2024-11-06 「三十三」MATLAB图像变换之Radon变换(R变换)——投影重建图像
- 2024-11-06 「MATLAB数据导入与分析」MATLAB: 使用内存映射加快文件读写
- 2024-11-06 利用边缘检测计算物体面积(内含源码)
- 2024-11-06 自动驾驶毫米波雷达物体检测技术-算法
- 2024-11-06 基于粒子滤波器的电池剩余使用寿命计算matlab仿真
- 2024-11-06 「二十」MATLAB图像处理之六 matlab怎么做图像处理
- 2024-11-06 matlab程序, 脉冲波合成与提取,滑冲效应、方向性效应
- 2024-11-06 《基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真》基于PLE
你 发表评论:
欢迎- 最近发表
-
- PPT中动作连贯的卡通人物,我集齐了100套
- 成都13岁女孩手绘逐帧动画走红 网友:这是天赋型选手
- Android主流UI开源库整理(android完整开源项目)
- 达芬奇更新啦!DaVinci Resolve Studio 20.0.1
- LM Studio-本地安装大模型 | OpenAI API 文字转语音本地运行程序分享
- lululemon律动快闪 多色系呈现夏季活力
- [AOA][分享]160503 智珉和偶吧玩起电影游戏 用一件衣服找回悸动
- Visual Studio 2022:一个功能全面且强大的IDE
- 纽约布什维克区艺术家工作室开放即将举行
- 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)