(一)项目实践-利用Appdesigner制作目标跟踪仿真软件

news2024/9/26 5:25:18

目录

前言

一、软件页面设计

二、仿真部分

(一)参数输入

(二)绘图部分

(三)目标追踪程序

总结


前言

        本博客有一个专栏用来介绍有关MATLAB中的Appdesigner的操作以及使用,本文是为了深化读者对于基础知识运用而写作的。博主结合雷达目标kalman滤波跟踪过程,将参数交互、仿真结果展示等知识点结合软件制作过程进行了讲解和分析,设计了一个目标跟踪仿真软件。目的是便于读者理解,同时读者可以根据上传的源代码资源进行拓展开发,对应程序可在资源界面下载。


一、软件页面设计

        软件界面由三大部分组成,第一部分是参数输入部分,第二部分是仿真按钮,第三部分是图形展示部分,具体的软件界面设计如图所示。

        参数输入部分的主要作用是实现数据的交互,获取软件界面输入的参数信息,主要分为仿真参数、目标参数雷达参数三个部分,如图所示。

        仿真按钮部分是程序触发部分,包含了目标跟踪的程序主体。通过点击仿真按钮,程序开始运行,仿真结束之后将仿真结果输出到图形展示框。

        图形展示部分是最终的结果展示部分,主要包括目标及雷达位置示意图和跟踪误差示意图。通过函数将图形绘制到软件界面,实现结果的传递。具体的细节可以参照另外一篇文章:

(五)Appdesigner-参数输入及绘图操作icon-default.png?t=N7T8https://blog.csdn.net/h320130/article/details/139999767?spm=1001.2014.3001.5502

二、仿真部分

(一)参数输入

   仿真代码如下:

%参数设定

nf = app.target5.Value;%噪声强度
N_sim = app.sim.Value;
Ts = app.sim1.Value;
N_step = N_sim/Ts; %仿真时长

radar_location=[app.rad1.Value app.rad2.Value];

H = [1 0 0 0
    0 0 1 0];

ini_state(:,1) = [app.target1.Value, app.target2.Value, app.target3.Value, app.target4.Value]';

R_base = [app.rad3.Value 0;
                0  app.rad4.Value]; 

P_0 = 4500*eye(4);

(二)绘图部分

  仿真代码如下:

%%
cla(app.UIAxes);
cla(app.UIAxes_2);
%绘图部分           
plot(app.UIAxes,X_real{1}(1,:),X_real{1}(3,:),"LineWidth",1.2);
app.UIAxes.NextPlot = 'add';
scatter(app.UIAxes,radar_location(1,1),radar_location(1,2),80,'v','filled');
legend(app.UIAxes,'\fontname{宋体}目标','\fontname{宋体}雷达');
xlabel(app.UIAxes,'x(m)','FontSize',14,'Fontname', 'Times New Roman'),ylabel(app.UIAxes,'y(m)','FontSize',14,'Fontname', 'Times New Roman')
set(app.UIAxes,'FontSize',14,'Fontname', 'Times New Roman');
ymax = max([X_real{1}(3,:),radar_location(2)])+3000;
ymin = min([X_real{1}(3,:),radar_location(2)])-3000;
xmax = max([X_real{1}(1,:),radar_location(1)])+3000;
xmin = min([X_real{1}(1,:),radar_location(1)])-3000;
xlim(app.UIAxes,[xmin, xmax]);
ylim(app.UIAxes,[ymin, ymax]);

plot(app.UIAxes_2,RMSE_each_node_sum',"LineWidth",1);
xlabel(app.UIAxes_2,'Frame','FontSize',14,'Fontname', 'Times New Roman'),ylabel(app.UIAxes_2,'RMSE(m)','FontSize',14,'Fontname', 'Times New Roman')
set(app.UIAxes_2,'FontSize',14,'Fontname', 'Times New Roman');

(三)目标追踪程序

  仿真代码如下:

for k = 1:N_step
                % 目标运动设定
                X_real= cell(N_R,1);
                X_real(:) = {zeros(nx,N_step+1)};
                for i = 1:N_Q
                    X_real{i} = track(app,ini_state(:,i),nx,N_step,F,Q);
                end
                % 目标的估计值为一个确定的数,真实值满足其均值的高斯分布
                %%
                %量测信息更新
                Z_real = cell(N_R,N_Q);
                for i = 1:N_R
                    for j = 1:N_Q
                        Z_real{i,j}= H*X_real{j};%其中h为量测更新函数,为N_R*N_Q的元组
                    end
                end
                z_real_every = cell(N_R,N_step);
                z_real_every(:) = {zeros(nz,1)};

                R = cell(N_R,N_step);
                R(:) = {zeros(nz,nz)};

                %% 最优滤波过程(有反馈)
                X_each_node = cell(N_R,N_step);
                X_each_node(:) = {zeros(nx,1)};

                P_each_node = cell(N_R,N_step);
                P_each_node(:) = {zeros(nx,nx)};

                for i1 = 1:N_R
                    X_each_node{i1,N_initial} = ini_state(:,1) + sqrt(P_0)*randn(nx,1);
                    P_each_node{i1,N_initial} = P_0; 
                    RMSE_each_node(i1,N_initial) = (X_each_node{i1,N_initial}(1,1)-X_real{1}(1,N_initial))^2 + (X_each_node{i1,N_initial}(3,1)-X_real{1}(3,N_initial))^2;
                end

                for i = N_initial+1: N_step
                    for i1 = 1:N_R

                        R_mid = R_cal(app,R_base,X_real{1}(:,i),radar_location(i1,:)');


                        R{i1,i} = R_mid;

                        z_real_every{i1,i} = Z_real{i1,1}(:,i) + R_mid*randn(nz,1);


                        [X_each_node{i1,i},P_each_node{i1,i}] = KF(app,X_each_node{i1,i-1},z_real_every{i1,i},P_each_node{i1,i-1},R_mid,F,Q,H);

                        RMSE_each_node(i1,i) = (X_each_node{i1,i}(1,1)-X_real{1}(1,i))^2 + (X_each_node{i1,i}(3,1)-X_real{1}(3,i))^2;

                    end
                end
                RMSE_each_node_sum = RMSE_each_node + RMSE_each_node_sum;
end

            RMSE_each_node_sum = sqrt(RMSE_each_node_sum/N_step);

 


总结

        以上就是今天要讲的内容,本文简单介绍了一种目标追踪仿真软件的设计方法,涉及软件界面设计、图形展示、参数输入等知识,读者可以在博主设计的软件基础上进行修改,实现自己所需的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态规划专题一 斐波那契数问题

目录 题一 最小花费爬楼梯 1、算法解析 1)确定状态: ​编辑2)状态转移方程: ​编辑3)初始化: 4)填表顺序: 5)返回值: 2、代码 题二 第N个泰波那锲数 …

Git 命令行快速入门

前言 (1)新手个人建议使用TortoiseGit这类图形化界面来上手学习。 (2)如果一定需要用命令行进行操作,可以按照B站:程式与网页开发者必备技能!Git 和 GitHub 零基础快速上手,轻松掌握…

odoo模型继承

odoo模型继承 模块化是Odoo一个非常重要的功能。一个模块通常定义一块业务内容,模块之间是可以交互的。所以从已有模块中去继承修改原有模块功能就很有必要。 Odoo中,模型之间也定义了一套继承的逻辑,目前有三种继承方 式: 1、…

学习测试7-ADB的使用

ADB是什么? ADB,即 Android Debug Bridge(安卓调试桥) 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell&…

ScrapySharp框架:小红书视频数据采集的API集成与应用

引言 随着大数据时代的到来,数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台,其丰富的用户生成内容(UGC)为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…

FLinkCDC引起的生产事故(二)

背景: 最近在做实时数据的抽取工作,利用FLinkCDC实时抽取目标库Oracle的数据到Doris中,但是在抽取的过程中,会导致目标库的生产库数据库非常卡顿,为了避免对生产环境的数据库造成影响,对生产环境的数据库利…

BJT交流分析+共发射极(CE)放大器+单片机的中断系统(中断的产生背景+使用中断重写秒表程序+中断优先级)

2024-7-10,星期三,16:58,天气:阴,心情:晴。今天终于阴天啦,有点风凉快一点了,不然真要受不了了,然后没有什么特殊的事情发生,继续学习啦,加油加油…

物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程

前言: 物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程 以下软件操作教程以,佳易王物流单统计分析软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、佳易王物流货运…

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求&#xff0c;原本有一个下拉框&#xff0c;但是条目太多&#xff0c;不好搜索&#xff0c;所以用户要求可以输入查找 修改前 &#xff1a; 修改后&#xff1a; 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…

常用网络概念

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …

将文档做成试卷生成小程序

&#x1f449;将文档题库导入&#xff0c;轻松开启题目随机组卷&#xff0c;生成考试试卷 &#x1f449;创建考试&#xff0c;从题库中抽取试题&#xff0c;配置分值&#xff0c;组成标准的试卷 &#x1f449;如果想要在线组织答题考试的话&#xff0c;进入到考试详情页面&…

大数据信用评分太低,是什么原因引起的?

在大数据时代&#xff0c;个人的大数据信用评分变得尤为重要。它不仅影响着我们能否顺利地获得贷款、信用卡等金融服务&#xff0c;还在很多方面影响着我们的日常生活。那么&#xff0c;哪些原因可能会导致我们的大数据信用评分降低呢?本文将对此进行详细的总结&#xff0c;一…

从0开始搭建Spring-Cloud若依项目开发环境

文章目录 1. 安装Java开发环境配置环境变量 2. Maven安装环境变量配置setting文件配置 3. MySQL安装与配置环境变量配置配置MySQLNavicat配置Idea配置 4. redis安装配置1. 下载Redis安装包2. 安装Redis3. 启动Redis服务4. 配置Redis 5. Nacos环境修改配置文件启动Nacos服务服务…

数一140+上岸|七月强化一定要避开这3个雷区!

当然可以&#xff0c;强化阶段的主要任务就是做题&#xff01; 但是不用一刀切&#xff0c;强化阶段听课和做题可以二八原则&#xff0c;就是听课占20%&#xff0c;做题占80%。 因为自己去自学讲义的话&#xff0c;比如张宇18讲&#xff0c;会漏掉一些重点&#xff0c;有的技…

机器视觉/自然语言/生成式人工智能综合应用实验平台-实训平台-教学平台

AIGC是人工智能1.0时代进入2.0时代的重要标志&#xff0c;MIT 科技评论也将Al合成数据列为2022年十大突破性技术之一&#xff0c;甚至将生成性Al(Generative Al) 称为是AI领域过去十年最具前景的进展。同时&#xff0c;AIGC领域岗位需求数量暴涨。高校方面在人工智能专业与机器…

常见的嵌入式软件体系结构

本文介绍常见的嵌入式软件体系结构。 在嵌入式开发过程中&#xff0c;尤其是MCU为主控的项目开发中&#xff0c;实时性是需要考虑的重要因素&#xff0c;本文介绍常见的2种嵌入式软件体系结构&#xff0c;并对其优缺点作简要分析&#xff0c;另外&#xff0c;还对它们的软件层…

❤️‍FlyFlow: 新增异步子流程节点

FlyFlow 介绍 官网地址&#xff1a;www.flyflow.cc 演示网址&#xff1a;pro.flyflow.cc FlyFlow 借鉴了钉钉与飞书的界面设计理念&#xff0c;致力于打造一款用户友好、快速上手的工作流程工具。相较于传统的基于 BPMN.js 的工作流引擎&#xff0c;我们提供的解决方案显著简…

为什么要考国际人力资源证书?HR不能不知道!

在人力资源领域中&#xff0c;持有专业的人力资源证书并非铁律般的必需。但不容忽视的是&#xff0c;随着时代的进步和行业的不断演进&#xff0c;越来越多的人力资源专业人员开始重视并追求人力资源资格认证。 一张高含金量的证书让HR在求职市场上更具竞争力&#xff0c;更能…

GenAI 技术堆栈架构师指南 - 十种工具

这篇文章于 2024 年 6 月 3 日首次出现在 The New Stack 上。 我之前写过关于现代数据湖参考架构的文章&#xff0c;解决了每个企业面临的挑战——更多的数据、老化的Hadoop工具&#xff08;特别是HDFS&#xff09;以及对RESTful API&#xff08;S3&#xff09;和性能的更大需求…