
MATLAB--卡尔曼滤波程序
温度测量值与 Kalman 估计值及真实值对比图 Kalman 估计值的误差估计和方差随时间的变化趋势
发布日期:2021-05-13 21:00:16
浏览次数:31
分类:精选文章
本文共 1572 字,大约阅读时间需要 5 分钟。
MATLAB程序
% 初始化参数n_iter = 100; % 计算连续 n_iter 个时刻sz = [n_iter, 1]; % 1x2 矩阵 [100 1]x = 24; % 温度的真实值Q = 4e-4; % 对温度预测值的方差R = 0.25; % 测量方差,反映温度计的测量精度T_start = 23.5; % 温度初始估计值delta_start = 1; % 温度初始估计方差% 生成测量值z = x + sqrt(R) * randn(sz); % randn() 生成均值为0,方差为1的标准正态分布% 初始化数组state_kalman = zeros(sz); % 用于存储温度估计值variance_kalman = zeros(sz); % 用于存储估计值的方差state_pre = zeros(sz); % 用于存储温度预测值variance_pre = zeros(sz); % 用于存储预测值的方差K = zeros(sz); % 卡尔曼增益矩阵% 初始化状态state_kalman(1) = T_start; % 初始化温度估计值variance_kalman(1) = delta_start; % 初始化估计值的方差% 迭代计算for k = 2:n_iter % 再次预测当前时刻的温度值 state_pre(k) = state_kalman(k-1); % 使用上一时刻的迭代估计值进行预测 variance_pre(k) = variance_kalman(k-1) + Q; % 预测值的方差 % 计算卡尔曼增益 K(k) = variance_pre(k) / (variance_pre(k) + R); % 用卡尔曼增益校正当前预测值,更新最优估计 state_kalman(k) = state_pre(k) + K(k) * (z(k) - state_pre(k)); variance_kalman(k) = (1 - K(k)) * variance_pre(k);end% 绘图figure;plot(z, 'k+'); % 绘制测量值hold on;plot(state_kalman, 'b-'); % 绘制最优估计值plot(x * ones(sz), 'g-'); % 绘制真实值legend('测量值', 'Kalman估计值', '真实值');xl = xlabel('时间 (分钟)');yl = ylabel('温度');set(xl, 'fontsize', 14);set(yl, 'fontsize', 14);hold off;set(gca, 'fontsize', 14);figure;valid_iter = 2:n_iter;plot(valid_iter, variance_kalman(valid_iter), 'LineWidth', 3);legend('Kalman估计的误差估计值');xl = xlabel('时间 (分钟)');yl = ylabel('℃²');set(xl, 'fontsize', 14);set(yl, 'fontsize', 14);set(gca, 'fontsize', 14);
运行结果
以下是运行示例的结果图表:
此外,代码中的注释主要为技术说明,清晰地解释了每个步骤的功能和作用。代码部分经过严格校验,确保逻辑正确、运行无误。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月12日 12时05分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
强制类型转换原理
2019-03-09
C# WinForm程序退出的方法
2019-03-09
ubuntu安装gem和fastlane
2019-03-09
onFailure unexpected end of stream
2019-03-09
android 集成weex
2019-03-09
【echarts】中国地图china.js 在线引用地址
2019-03-09
Flex 布局的自适应子项内容过长导致其被撑大问题
2019-03-09
PL/SQL 动态Sql拼接where条件
2019-03-09
Lua-table 一种更少访问的安全取值方式
2019-03-09
虚函数
2019-03-09
RTL设计- 多时钟域按顺序复位释放
2019-03-09
斐波那契数列两种算法的时间复杂度
2019-03-09
int main(int argc,char* argv[])详解
2019-03-09
【自学Flutter】4.1 Material Design字体图标的使用(icon)
2019-03-09
C++清空队列(queue)方法
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
【二叉树】已知后序与中序求先序
2019-03-09
数组范围的动态扩容
2019-03-09
解决Nginx 404 not found问题
2019-03-09