基于非线性最小二乘法 (NLLS) 分析寻找给定伪距数据的无人机轨迹附matlab代码

简介: 基于非线性最小二乘法 (NLLS) 分析寻找给定伪距数据的无人机轨迹附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

这个项目由两个主要任务组成。第一种是使用非线性最小二乘法(NLLS)分析来确定给定伪距数据的无人机轨迹,并通过将其与真实无人机轨迹匹配来验证这一结果(也给出了)。第二个是计算计算的无人机轨迹的精度稀释(DOP)。

DOP是对任何给定GPS位置数据的精度的测量。五种不同类型的

将计算1个DOP:几何DOP、位置DOP、水平DOP、垂直DOP和时间DOP。它们是x、y、z、t(时钟偏置)分量Vx、Vy、Vz和Vt的方差的函数。

几何DOP是由于卫星在太空中的几何方向而产生的误差。位置DOP是无人机三维位置的误差。水平DOP是指无人机水平位置的误差,而垂直DOP是无人机高度的误差。时间DOP是由于时间精度造成的误差。

DOP值越低,无人机的瞬时位置测量就越好。良好的GDOP或PDOP被认为<5,而PDOP的值>10则非常差。HDOP预计在2-3之间。由于所有卫星都在接收器上方,预计VDOP将高于HDOP,而对于水平坐标,数据是从无人机的所有侧面接收的。

GPS定位问题

假设接收器位于二维地面上。两颗全球定位系统卫星可以用来精确定位其在地球上的位置,前提是如果这两颗卫星的范围由一个圆圈表示,那么将有两个交点,其中只有一个位于地球上。这没有给出范围误差。假设GPS GPS卫星存在距离误差,两个距离圆的交点现在将发生偏移,导致接收器在地球上的位置估计不正确。

这个问题可以通过让第三个GPS卫星解决接收器的位置来解决。假设所有GPS卫星具有相同的时钟/距离误差,则所有三个距离圆都将在接收器位置相交。这可以用来计算时钟偏置,从而计算范围误差。类似地,在三维空间中,我们需要四颗卫星来精确定位接收器的位置。

方法论

这项任务使用了两个给定的数据文件。第一个是GPS伪距F1.txt。该文件包含从无人机到所有可见卫星计算的伪距。第二个是UAVPostion F1.txt。该文件包含无人机的真实位置。图2中的流程图描述了根据给定伪距数据确定无人机轨迹的过程。该过程使用了非线性最小二乘回归。

定义f(x0)和H的方程式可在附录A部分找到。上图中的流程图。向量X0的形式为X0=[x,y,z,cbU],其中cbU是时钟偏置。后者是测量地面GPS接收器中设置的时间。

理想情况下,如果地球上的GPS接收器和GPS卫星都有同步的原子钟,那么只需要三颗卫星就可以精确定位接收器的位置。然而,一个原子钟的价格高达20万美元,这使得它过于昂贵,无法在民用市场上广泛使用。或者,可以用一个便宜的接收器进行简单的权衡,这一次需要四颗卫星来确定接收器的位置。额外的卫星用于获得时钟偏移,即用于计算偏移时间以校正接收器时钟的偏移距离。

⛄ 部分代码

% Clear workspace, close all open figure & clear the command window

clear all

close all;

clc;


% Extract the data from the text file

% Add other folders to path

addpath('../data', '../lib/', '../lib/conversion');


% Load constants

constants();


% Initialise Ground Station Position

% Defining Sydney Ground Station Coordinates

lat        = deg2rad(-34.76);

long       = deg2rad(150.03);

alt        = 680;

pos_llh_gs = [lat;long;alt];


% File Name

uav_data_fpath = 'UAVPosition_F1.txt';


% Import pseudorange data

pseudo_data = importdata('GPS_pseudorange_F1.txt');


% Load ECEF position values of satellites

load ECEFPos


%% Categorising time values


% Vernal Equinox time

equinox_time = 7347737.336;


% Store time data

times     = pseudo_data(:,1) - equinox_time;


% Obtain the unique time values

% nTimes is an array containing the total number of occurences of single time

% value

% timeVal is an array containing all unique timevalues

[total_occurences time_values] = hist(times(:),unique(times));


% Cummulative Time Array

cummulative_times = cumsum(total_occurences);


% Increment time values

% timeVal = timeVal + 1;


%% Observed UAV Positions


% Obtain the polar coordinates of UAV w.r.t Ground Station

[pos_UAV_Cart_obs,pos_UAV_Pol_Obs, pos_ECEF_gs, UAVVel, UAVPos] = UAVpolarCoor(time_values,...

                                        cummulative_times, pseudo_data, ECEFPos, pos_llh_gs);


%% Extract true UAV Position data from text files


% % Obtain polar coordinates of true measurements

[pos_UAV_Pol_True, pos_UAV_Cart_True] = extractUAVtrue(uav_data_fpath,equinox_time);


%% Catalog the position of the satellites during UAV Tracking


% Find satellite position w.r.t ground station

[pos_Sat_Pol_Obs] = findSatPos(ECEFPos, pos_ECEF_gs, pos_llh_gs);



%% Calculate the DOP for each time value


% Calculate the best and worst satellite configurations according to DOP

[bestSatConfig, worstSatConfig, DOP, maxDOPIndex, minDOPIndex] = findDOP(UAVVel, pos_Sat_Pol_Obs);


%% Save relevant data as a structured array for plotting


plotData.timeArray         = times;

plotData.pos_UAV_Cart_obs  = pos_UAV_Cart_obs;

plotData.pos_UAV_Pol_Obs   = pos_UAV_Pol_Obs;

plotData.pos_ECEF_gs       = pos_ECEF_gs;

plotData.UAVVel            = UAVVel;

plotData.UAVPos            = UAVPos;

plotData.pos_UAV_Pol_True  = pos_UAV_Pol_True;

plotData.pos_UAV_Cart_True = pos_UAV_Cart_True;

plotData.pos_Sat_Pol_Obs   = pos_Sat_Pol_Obs;

plotData.bestSatConfig     = bestSatConfig;

plotData.worstSatConfig    = worstSatConfig;

plotData.DOP               = DOP;

plotData.maxDOPIndex       = maxDOPIndex;

plotData.minDOPIndex       = minDOPIndex;

plotData.nTimes            = total_occurences;

plotData.pseudo_data       = pseudo_data;

plotData.cumArray          = cummulative_times;


%% Plot graphs

plotq1B(plotData)

⛄ 运行结果

⛄ 参考文献


⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
9天前
|
机器学习/深度学习 存储 算法
基于Actor-Critic(A2C)强化学习的四旋翼无人机飞行控制系统matlab仿真
基于Actor-Critic强化学习的四旋翼无人机飞行控制系统,通过构建策略网络和价值网络学习最优控制策略。MATLAB 2022a仿真结果显示,该方法在复杂环境中表现出色。核心代码包括加载训练好的模型、设置仿真参数、运行仿真并绘制结果图表。仿真操作步骤可参考配套视频。
27 0
|
23天前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,turbo码以及BCH码
本程序系统基于BP译码的LDPC误码率MATLAB仿真,分析不同码长、码率、信道对译码性能的影响,并与卷积码、Turbo码及BCH编译码进行对比。升级版增加了更多码长、码率和信道的测试,展示了LDPC码的优越性能。LDPC码由Gallager在1963年提出,具有低复杂度、可并行译码等优点,近年来成为信道编码研究的热点。程序在MATLAB 2022a上运行,仿真结果无水印。
54 0
|
2月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
113 19
|
3月前
|
算法 Perl
【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析
本文介绍了基于MATLAB的多模光纤模场分布仿真分析,详细阐述了多模光纤的概念、实现方法、仿真技术,并利用模式耦合方程分析方法,通过理论和仿真模型设计,展示了不同模式下的光场分布及其受光纤参数影响的分析结果。
75 4
【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析
|
2月前
|
算法 数据挖掘 vr&ar
基于ESTAR指数平滑转换自回归模型的CPI数据统计分析matlab仿真
该程序基于ESTAR指数平滑转换自回归模型,对CPI数据进行统计分析与MATLAB仿真,主要利用M-ESTAR模型计算WNL值、P值、Q值及12阶ARCH值。ESTAR模型结合指数平滑与状态转换自回归,适用于处理经济数据中的非线性趋势变化。在MATLAB 2022a版本中运行并通过ADF检验验证模型的平稳性,适用于复杂的高阶自回归模型。
|
3月前
|
算法 测试技术 SoC
基于直流潮流的IEEE30电力系统停电分布及自组织临界性分析matlab仿真
本研究提出一种基于直流潮流的算法来分析电力系统的停电分布及自组织临界性。算法迭代更新参数并模拟线路随机断开,运用粒子群优化计算关键值,并评估线路接近容量极限的概率。通过改变参数β和μ,分析不同线路可靠性和容量增加方式下的停电分布,并探索系统趋向临界状态的过程及停电概率分布。该方法基于IEEE30测试系统,利用MATLAB2022a实现,简化处理有功功率流动,适用于评估电力系统稳定性及预防大规模停电事故。
|
4月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
207 12
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于Qlearning强化学习的小车弧线轨迹行驶控制matlab仿真
**MATLAB 2022a仿真实现Q-learning控制小车弧线行驶,展示学习过程及奖励变化。Q-learning是无模型强化学习算法,学习最优策略以稳定行驶。环境建模为二维平面,状态包括位置、朝向,动作涵盖转向、速度。奖励函数鼓励保持在轨迹上,用贝尔曼方程更新Q表。MATLAB代码动态显示轨迹及奖励随训练改善。**
81 15
|
4月前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
3月前
|
算法
蜂窝网络下行链路的覆盖率和速率性能matlab仿真分析
此程序在MATLAB2022a环境下运行,基于随机几何模型评估蜂窝网络的下行链路覆盖率和速率性能。通过模拟不同场景下的基站(BS)配置与噪声情况,计算并绘制了各种条件下的信号干扰加噪声比(SINR)阈值与覆盖率概率的关系图。结果显示,在考虑噪声和不同基站分布模型时,覆盖率有显著差异,提出的随机模型相较于传统网格模型更为保守但也更加贴合实际基站的分布情况。

热门文章

最新文章