• m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计


    目录

    1.算法概述

    2.仿真效果预览

    3.MATLAB部分代码预览

    4.完整MATLAB程序


    1.算法概述

           经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示:

           GPGGA是GPS数据输出格式语句,意思是一帧GPS定位的主要数据,是NMEA格式中使用最广的数据之一。该语句包括17个字段。

           $GPGGA 语句包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,HDOP-水平精度因子,椭球高,高度单位,大地水准面高度异常差值,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记(用回车符和换行符),分别用14个逗号进行分隔。

            Kalman滤波是在时域上运用状态空间,递推得到的一种滤波算法,便于在计算机上实时实现,计算量和存储量小。该方法可处理多变量非平稳随机过程滤波问题,可处理时变系统滤波问题。例如飞机在飞行过程中,遇到的干扰通常是时变非平稳的噪声,此时运用卡尔曼滤波可有效去除干扰,得到较真实的状态估计数据。

           卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。kalman是跟踪算法的“hello world”,在当前深度学习跟踪算法遍地的情况下,kalman跟踪效果确实差强人意。但是在实际产品落地时,特别硬件不是很强大、场景不复杂的情况下,kalman还是性价比最高的。

           Kalman滤波分为2个步骤,预测(predict)和校正(correct)。预测是基于上一时刻状态估计当前时刻状态,而校正则是综合当前时刻的估计状态与观测状态,估计出最优的状态。预测与校正的过程如下:

    预测:

    校正:

           公式1是状态预测,公式2是误差矩阵预测,公式3是kalman增益计算,公式4是状态校正,其输出即是最终的kalman滤波结果,公式5是误差矩阵更新。各变量说明如下表:

    2.仿真效果预览

    matlab2022a仿真

     

     

    3.MATLAB部分代码预览

    1. clc;
    2. clear;
    3. close all;
    4. warning off;
    5. DATA_TYPE = 'GPGGA';%选择需要保持的数据类型
    6. fidin = fopen('data.txt','r');
    7. %读取数据
    8. tline = func_GPS_read(fidin);
    9. %数据中的GPGGA部分的数据进行保存,其余数据去除,在实际中,你也可以改变下面的参数,选择其他数据
    10. Save_data = func_save_usefull_data(tline,DATA_TYPE);
    11. %提取维度
    12. %数据读取
    13. Dimensions = func_read_Dimensions(Save_data);
    14. %去掉数据中的0
    15. Dimensions(find(Dimensions == 0)) = [];
    16. %卡尔曼滤波
    17. Dimensions_kalman = func_kalman(Dimensions);
    18. figure;
    19. subplot(211);plot(Dimensions);title('维度');
    20. subplot(212);plot(Dimensions_kalman);title('维度kalman');
    21. xlabel('times');
    22. ylabel('Dimensions');
    23. %提取经度
    24. %数据读取
    25. longitude = func_read_longitude(Save_data);
    26. %去掉数据中的0
    27. longitude(find(longitude == 0)) = [];
    28. %卡尔曼滤波
    29. longitude_kalman = func_kalman(longitude);
    30. figure;
    31. subplot(211);plot(longitude);title('经度');
    32. subplot(212);plot(longitude_kalman);title('经度kalman');
    33. xlabel('times');
    34. ylabel('longitude');
    35. %提取高度
    36. %数据读取
    37. Height = func_read_Height(Save_data);
    38. Height(find(Height == 0)) = [];
    39. %卡尔曼滤波
    40. Height_kalman = func_kalman(Height);
    41. figure;
    42. subplot(211);plot(Height);title('高度');
    43. subplot(212);plot(Height_kalman);title('高度kalman');
    44. xlabel('times');
    45. ylabel('Height');
    46. 01_047_m

    4.完整MATLAB程序

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    【python】—— python的基本介绍并附安装教程
    # C# 重新认识一下 IEnumerable<T>,IAsyncEnumerable<T> 以及搭配异步可能遇到的问题
    论文解读(GraphMAE)《GraphMAE: Self-Supervised Masked Graph Autoencoders》
    服务器部署 Nacos 获取不到配置浏览器可以访问
    android api 23以上 使用 httpclient
    Java反射机制(一)
    Linux防火墙命令
    Ubuntu配置Samba服务
    媒介盒子:品牌宣传的内容输出逻辑是什么
    代码编译,编译和汇编不能合并
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/127982105