2024数维杯A题可运行思路代码文章成品

2024-05-11 05:20

本文主要是介绍2024数维杯A题可运行思路代码文章成品,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

为了能够精确地确定飞行器在三维空间中的位置,理论上至少需要从三个不同位置的发射源接收TOA数据。下面是使用TOA数据确定位置所需的计算基础和原理:
单个TOA数据:
单个TOA测量可以确定接收器与发射源之间的距离,这在三维空间中形成一个球面,发射源位于球心,球面上的每一点都是可能的接收器位置。
两个TOA数据:
使用来自两个不同发射源的TOA数据,可以确定两个球面的交集,这在理想情况下是一个圆。圆上的每一点都可能是接收器的位置。
三个TOA数据:
三个不同位置发射源的TOA数据提供了三个球面,理论上这三个球面会在空间中相交于一点。这一点就是接收器的确切位置。在实际应用中,由于测量误差,这三个球面可能不会完美相交于一点,因此需要采用数学优化方法(如最小二乘法)来找到最佳估计位置。
四个及以上TOA数据:
虽然理论上三个数据点足以确定位置,但在实际应用中,使用四个或更多的TOA数据可以增强定位的准确性和鲁棒性。多余的测量可以用来提高对误差的容忍度,特别是在信号可能受到干扰或多径效应影响的环境中。

达到时间差信息TOA
对于TDOA,如果接受到的时间准确,需要三个TDOA信息并且他们能够确定四个设备相互之间的时间差即可对目标进行定位,数学表达式如下:

在这里插入图片描述

其中分别表示第i个信号源的坐标信息,表示接收到接收到的第i个信号源的利用TDOA计算出来的相对时间,为接受信号的参考相对时间差。为飞行器的位置信息。联立这三个方程组求解即可得到飞行器的位置信息。
TDOA(到达时间差)是一种常用于无线电定位和声音信号处理中的技术。它依赖于测量从多个发射源到达接收器的信号时间差异来确定接收器的位置。在实际应用中,如确定飞行器的位置,通常至少需要三个TDOA测量来准确地定位一个对象在三维空间中的位置。
这是因为每个TDOA测量可以定义一个双曲面,而两个这样的双曲面相交将形成一个双曲线。如果只有两个测量,那么可能会存在两个潜在的交点(解决方案),这使得定位具有不确定性。当引入第三个TDOA测量时,这三个双曲面的交点通常会在空间中仅有一个唯一的交点,从而提供了明确的位置信息。

多普勒频率差信息DFD
多普勒频率差(DFD)信息是基于相对运动引起的频率变化来进行测量和定位的技术。具体来说,由于飞行器与两个发射源之间存在相对速度,接收到的同一信号在两个发射源处的频率将会有所不同。这种频率的差异可以用来估计飞行器的位置。
多普勒频率差的计算DFD 计算方法可以表示为:

其中
f是发射信号的频率
c是信号传播速度(例如光速)0
v1和 v2是飞行器相对于发射源1和发射源2的速度向量
d1和 d2是飞行器相对于发射源1和发射源2的位移向量
就像TDOA技术一样,DFD技术通常需要多个数据点来准确确定飞行器的位置。理论上,要在三维空间中准确定位一个物体,至少需要三个独立的DFD测量。每个DFD测量可以为定位提供一个方程,通过解这些方程可以求出飞行器的位置。
原因如下:
二维空间:至少需要两个DFD测量来解析出飞行器在平面上的位置。
三维空间:需要三个或更多的DFD测量,因为每个DFD提供的信息只足以定义一个平面上的位置。三个不同的测量可以定义出一个交点,即飞行器的位置。
到达角度信息AOA
到达角度信息(AOA,Angle of Arrival)是指接收器可以从信号中获取的信号发射源相对于接收器的到达角度。这种技术通常用于定位系统,尤其是在无线通信和雷达系统中。AOA通过测量入射信号的方向来确定发射源的位置。

定位原理
二维空间:三个不同位置的RSSI测量值可以帮助构建三个圆,这些圆的交点即为发射源的可能位置。
三维空间:需要四个RSSI测量值来构建四个球,这些球的交点定义了发射源的位置。
方程组数学表达式如下:

其中分别表示第i个信号源的坐标信息。为飞行器的位置信息。联立这三个方程组求解即可得到飞行器的位置信息。

问题二
不考虑数据偏差的情况我们采用混合的信息来预测飞行器导航定位结果。
发射源4的到达角度信息AOA和达到时间信息 TOA来处理。
求解结果见excel文件:‘导航定位结果.xlsx’。其中部分内容见表1
表1问题二部分结果
时间/s X坐标/m Y坐标/m Z坐标/m
0.01 80.62727 -29.3188 1116.417
0.02 72.76079 25.74116 1114.589
0.03 10.4081 -8.38121 1100.086
0.04 37.90999 78.65837 1114.397
0.05 33.6431 -13.6943 1103.762
0.06 93.01123 -71.8146 1116.176
0.07 90.45526 0.231349 1117.563
0.08 45.8248 24.46634 1107.898

在这里插入图片描述

问题三
实时筛选机会信号:
机会信号中的TOA(Time of Arrival)和 RSSI(Received Signal Strength Indicator)分析:
TOA和RSSI都是在无线通信和定位系统中使用的技术,用于估计设备的位置。尽管它们的目的相同,但这两种技术在实现、准确性和受环境影响的方式上有显著差异。

面对数据误差的处理
处理带有误差的数据确定导航位置时,RSSI可能更具挑战性,因为它受环境因素的影响更大,而这些环境因素往往难以预测和量化。相比之下,尽管TOA也需要高精度的时间测量设备和良好的同步,但它的误差类型通常更容易通过技术手段(如改进硬件或使用更精确的时钟)进行控制和补偿。
由于RSSI与TOA的数据能够同时转换为距离数据,因此两者不同的数据会使得预测的困难。因此我们可以给它们同样的评价方式来选取每次获取的新信号中偏差更小的机会信号。因为DFD和AOA的信息无法独立或者联合求解出导航器的位置,同时我们将TDOA与TOA归纳为同一类机会信号(统一用TOA代表)。同时为了消除一部分的偏差影响,我们采用以下的优化方法:当接收到新机会信号时,定义
损失函数如下:

我们首先对两个损失函数分别优化求最小值获取对应的飞行器位置信息,公式如下:

再利用来计算对应的和来计算对应的,并选取与中更小的那一组作为筛除偏差较大的机会信号的结果,对应的即为这一轮机会信号对应的预测位置。

##【腾讯文档】2024数维杯助攻合集
## https://docs.qq.com/doc/DVVBER216eHJKc29y

这篇关于2024数维杯A题可运行思路代码文章成品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978615

相关文章

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js