基于非线性最小二乘法 (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电子书和数学建模资料


相关文章
|
8天前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
|
2月前
|
机器学习/深度学习 算法 数据处理
基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真
本项目基于最小二乘法,利用Matlab对太阳黑子活动进行模型参数辨识和预测。通过分析过去288年的观测数据,研究其11年周期规律,实现对太阳黑子活动周期性的准确建模与未来趋势预测。适用于MATLAB2022a版本。
|
1月前
|
机器学习/深度学习 存储 算法
基于Actor-Critic(A2C)强化学习的四旋翼无人机飞行控制系统matlab仿真
基于Actor-Critic强化学习的四旋翼无人机飞行控制系统,通过构建策略网络和价值网络学习最优控制策略。MATLAB 2022a仿真结果显示,该方法在复杂环境中表现出色。核心代码包括加载训练好的模型、设置仿真参数、运行仿真并绘制结果图表。仿真操作步骤可参考配套视频。
68 0
|
5月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
363 12
|
4月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于Qlearning强化学习的小车弧线轨迹行驶控制matlab仿真
**MATLAB 2022a仿真实现Q-learning控制小车弧线行驶,展示学习过程及奖励变化。Q-learning是无模型强化学习算法,学习最优策略以稳定行驶。环境建模为二维平面,状态包括位置、朝向,动作涵盖转向、速度。奖励函数鼓励保持在轨迹上,用贝尔曼方程更新Q表。MATLAB代码动态显示轨迹及奖励随训练改善。**
97 15
|
5月前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
4月前
【光波电子学】MATLAB绘制光纤中线性偏振模式LP之单模光纤的电场分布(光斑)
该文章介绍了如何使用MATLAB绘制单模光纤中线性偏振模式LP₀₁的电场分布,并提供了相关的数学公式和参数用于模拟光纤中的光斑分布。
54 0
|
6月前
|
算法
基于极大似然法和最小二乘法系统参数辨识matlab仿真,包含GUI界面
该程序对比了基于极大似然法和最小二乘法的系统参数辨识,输出辨识收敛曲线和误差。在MATLAB2022a中运行,显示了测试结果。核心代码涉及矩阵运算和循环,用于更新和计算系统参数。算法原理部分解释了辨识的目的是建立数学模型,并介绍了极大似然法(基于概率统计)和最小二乘法(基于误差平方和最小化)两种方法。
|
6月前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
116 6

热门文章

最新文章