【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

简介: 【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥


🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


⛳️座右铭:行百里者,半于九十。


📋📋📋本文目录如下:🎁🎁🎁


目录


💥1 概述


📚2 运行结果


🎉3 参考文献


🌈4 Matlab代码及讲解


💥1 概述

本文包括两部分中的第一部分:第一部分设计与仿真;第2部分实际系统实现。它旨在演示如何使用Matlab/Simulink与Rapid STM32块集和ARM Cortex-M3处理器(STM32)一起开发数字信号处理系统;使用倾斜传感器作为案例研究。它涵盖了从设计、仿真、硬件在环测试到创建独立嵌入式系统的开发过程。内容应该尽可能的简单。


在第一部分中,解释了使用Simulink进行嵌入式系统开发的动机。然后,建立了倾斜传感器系统的简化模型。


总结了卡尔曼滤波和Unscented卡尔曼滤波(UKF)理论。然后提供图形说明,以指导您完成实现Simulink模型的整个过程,以设计,模拟和评估UKF用于倾斜传感器系统的性能。


在第二部分中,提供图形说明,以指导您完成将您的设计从Simulink模型转移到基于Rapid STM32 - R1邮票板的现实世界独立倾斜传感器系统的过程。


目录:


71a26a3401bb4561afc5efbd6e42b0d9.png


从概念上讲,微控制器(uC)就像我们大多数人每天使用的个人电脑(PC)。uC与PC的不同之处在于,所有东西都是由一个小手指大小的集成电路(硅芯片)构建的,而PC可能由主板和几个附加卡组成。PC可能有大量的外设选择,如COM端口,USB, Wifi,键盘,鼠标,显示器等。uC的外设更有限,通常包括定时器,SPI, USART, i2c, ADC等。一台PC可能使用64位架构,运行在千兆赫兹的速度与数百千兆字节的硬盘和RAM。uC是8位、16位或32位,运行频率不超过几百MHz,内存只有几十或几百KB。


uC通常用于自动控制独立系统,如洗衣机、带LCD显示屏的冰箱或mp3播放器。在一辆更现代的汽车里,可能会有数百个uC;一个用于监测和控制自动燃油喷射,一个用于监测ABS,一个用于监测和控制机舱温度,等等。像个人电脑一样,要使用uC,我们需要开发程序来告诉它做什么、什么时候做以及如何做。uC编程已经从像汇编这样的低级语言发展到像c这样更流行的高级编程语言。然而,在程序正常运行之前,可能需要手工编写和调试数百或数千行代码,更不用说低级编程和设备驱动程序的调试了。


在第一部分中:


1. 解释了使用 Simulink 进行嵌入式系统开发的动机。

2. 开发了一种简化的倾斜传感器系统模型。

3. 总结了卡尔曼滤波和无迹卡尔曼滤波(UKF)理论。

4. 然后提供图形说明,指导您完成实施 Simulink 模型的整个过程,以设计、仿真和评估倾斜传感器系统 UKF 的性能。


注意:还提供了源代码,用于执行基于 Simulink 模型的蒙特卡罗模拟,以使用协方差分析评估 UKF 性能。


在第二部分中,将提供图形说明,指导您将设计从 Simulink 模型转移到基于 Rapid STM32 - R1 印章板的实际独立倾斜传感器系统的过程。


📚2 运行结果


b76b29a62c83425d9211c9427850d3c3.png

6916668582a641349f3654ca5b67de43.png

781a9f4f25d441918108d9139f815184.png


部分代码:

% Generate random seeds to drive the Band-Limited White Noise Block in
% the Accelerometer Sensor Subsystem
% the seed is picked from a uniform random variable between begin_bound and
% end_bound
RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(100*clock))); % set random seed based on clock
begin_bound = 0;
end_bound = 10000;
seed_vec = floor(begin_bound + (end_bound - begin_bound).*rand(2,final_run));
for k = 1:final_run
    seed1 = seed_vec(1,k);
    seed2 = seed_vec(2,k);
    disp(['Run' num2str(k)])
    sim('tilt_system',[start stop]); % This line of code starts and stops Simulink simulation automatically.
    if (k == 1)
        % First run
        % initialise record buffer
        true_roll_error_deg_rec = repmat(error_variance.signals(1).values(:,1),1,final_run);
        theoretical_roll_error_deg_rec = repmat(error_variance.signals(1).values(:,2),1,final_run);
        true_pitch_error_deg_rec = repmat(error_variance.signals(2).values(:,1),1,final_run);
        theoretical_pitch_error_deg_rec = repmat(error_variance.signals(2).values(:,2),1,final_run);
    else
        % Other runs
        % Import data from saved work space data
        true_roll_error_deg_rec(:,k) = error_variance.signals(1).values(:,1);
        theoretical_roll_error_deg_rec(:,k) = error_variance.signals(1).values(:,2);
        true_pitch_error_deg_rec(:,k) = error_variance.signals(2).values(:,1);
        theoretical_pitch_error_deg_rec(:,k) = error_variance.signals(2).values(:,2);
    end
end
time = error_variance.time;
mean_true_roll_error_deg = mean(true_roll_error_deg_rec,2);
mean_theoretical_roll_error_deg = mean(theoretical_roll_error_deg_rec,2);
mean_true_pitch_error_deg = mean(true_pitch_error_deg_rec,2);
mean_theoretical_pitch_error_deg = mean(theoretical_pitch_error_deg_rec,2);
std_true_roll_error_deg = std(true_roll_error_deg_rec,0,2);
std_true_pitch_error_deg = std(true_pitch_error_deg_rec,0,2);
% Plot results
subplot(2,1,1)
plot(time,mean_true_roll_error_deg,'r-',time,mean_theoretical_roll_error_deg,'b-',time,...
    std_true_roll_error_deg,'g-')
ylabel('Roll Errors (deg)'), xlabel('time (sec)')
legend('Mean errors','\surd(P_{11})','Error std')
subplot(2,1,2)
plot(time,mean_true_pitch_error_deg,'r-',time,mean_theoretical_pitch_error_deg,'b-',time,...
    std_true_pitch_error_deg,'g-')
ylabel('Pitch Errors (deg)'), xlabel('time (sec)')
legend('Mean errors','\surd(P_{22})','Error std')


🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1]李开龙,胡柏青,高敬东,方轩.鲁棒四元数无味卡尔曼滤波算法在组合导航姿态估计中的应用[J].海军工程大学学报,2015,27(01):6-10.


[2]Krisada Sangpetchsong (2023). Introduction to Unscented Kalman Filtering


15e15a8ffba546d3af8ab114f026e96c.png


🌈4 Matlab代码及讲解


相关文章
|
2天前
|
数据可视化 算法
MATLAB Simulink 交交变流电路性能研究
MATLAB Simulink 交交变流电路性能研究
9 2
|
2天前
|
数据可视化 算法
MATLAB Simulink 直流斩波电路性能研究
MATLAB Simulink 直流斩波电路性能研究
15 1
|
2天前
|
数据可视化 算法
MATLAB Simulink 逆变电路性能研究
MATLAB Simulink 逆变电路性能研究
10 1
|
2天前
|
数据可视化 算法
MATLAB Simulink 三相整流电路性能研究
MATLAB Simulink 三相整流电路性能研究
9 1
|
2天前
|
数据可视化 算法
MATLAB Simulink 单相桥式整流电路性能研究
MATLAB Simulink 单相桥式整流电路性能研究
7 2
|
2天前
|
数据可视化 算法
MATLAB Simulink 单相半波可控整流电路性能研究
MATLAB Simulink 单相半波可控整流电路性能研究
7 2
|
2天前
|
调度
Matlab|考虑源-荷-储协同互动的主动配电网优化调度研究
Matlab|考虑源-荷-储协同互动的主动配电网优化调度研究
|
2天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
2天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章