首页 > 其他分享 >两步加权最小二乘,定位三维目标、N个锚点(锚点数量不限,多于3个即可)

两步加权最小二乘,定位三维目标、N个锚点(锚点数量不限,多于3个即可)

时间:2024-11-12 09:18:24浏览次数:3  
标签:stations 位置 三维 num 锚点 position 二乘 基站

在这里插入图片描述

提供一个MATLAB代码:基于两步加权最小二乘法的三维目标定位算法,利用多个锚点(基站)和时间差到达(TDOA)数据来估计未知目标的位置【可更改锚点数量、位置、待定位点的位置

文章目录

  • 代码功能概述
  • 运行结果
  • 源代码
  • 代码结构和详细说明
  • 总结

代码功能概述

该MATLAB代码通过模拟在三维空间中的目标定位问题,利用随机生成的锚点位置和目标轨迹,采用两步加权最小二乘法(WLS)来进行目标位置的估计。最终,代码将真实目标位置与估计位置进行可视化展示,并输出相关坐标信息。

运行结果

10个锚点时的结果:

在这里插入图片描述

100个锚点时的结果:

在这里插入图片描述
坐标输出(命令行输出的结果):

在这里插入图片描述

程序结构:
在这里插入图片描述

源代码

部分MATLAB代码如下:

% 两步加权最小二乘,定位三维目标、N个锚点
% 2024-11-08/Ver1
%% 初始化
clc;clear;close all;
rng(0);
% 定义参数和待测点位置
num_stations = 100; % 基站数量(锚点数量)
std_var1 = 1e-9; %TDOA误差
% 固定基站位置
stations_position = 100*randn(num_stations,3);
c = 3e8;
% 生成轨迹数组
% 完整代码如下:https://gf.bilibili.com/item/detail/1106620012

代码结构和详细说明

初始化部分

clc; clear; close all;
rng(0);
  • clc:清空命令窗口。
  • clear:清除工作空间中的所有变量,以避免干扰。
  • close all:关闭所有图形窗口。
  • rng(0):设置随机数生成器的种子,确保结果的可重复性。

参数和待测点位置定义

num_stations = 100; % 基站数量(锚点数量)
std_var1 = 1e-9; % TDOA误差
stations_position = 100 * randn(num_stations, 3); % 随机生成基站位置
c = 3e8; % 声速
  • num_stations:定义基站的数量,这里设为100个。
  • std_var1:设定TDOA测量的标准差,模拟测量误差。
  • stations_position:随机生成基站在三维空间中的位置,坐标值遵循正态分布。
  • c:定义声速(单位:米/秒)。

生成目标轨迹

position = 50 * ones(1, 3) + 50 * randn(1, 3);
  • 生成一个目标位置,初始位置为(50, 50, 50)附近的随机点。

TDOA建模

delta = ones(num_stations, 1) * position - stations_position; % 计算未知点与各基站之间的相对位置
r_ideal = (sum(delta.^2, 2)).^(1/2); % 计算理想距离
delta_t = r_ideal / c + std_var1 * randn(size(r_ideal)); % 计算TDOA并添加噪声
r = delta_t * c; % 计算实际距离
  • delta:计算未知目标与各基站之间的相对位置(矢量)。
  • r_ideal:根据相对位置计算目标到各个基站的理想距离。
  • delta_t:根据理想距离计算到达时间,并添加高斯噪声。
  • r:将到达时间转换为实际距离。

距离差计算

Ri = r(2:end, :);
R1 = ones(num_stations - 1, 1) * r(1, :);
R = Ri - R1; % 计算距离差
  • 计算从第一个基站到其他基站的距离差,以便在后续迭代中使用。

迭代初值估算

position_est = mean(stations_position); % 基站位置均值作为初始估计
  • 使用所有基站位置的均值作为初始位置估计。

最小二乘迭代

for i1 = 1:5 % 可设置迭代次数
    ...
end
  • 迭代5次以优化位置估计,每次迭代计算新的位置估计。

粗迭代部分

h = (R(1))^2 + norm(stations_position(1, :))^2 - norm(stations_position(2, :))^2 + 2 * (R(1)) * norm(position_est - stations_position(1, :));
Ga = 2 * (stations_position(1, :) - stations_position(2, :));
B = 2 * norm(position_est - stations_position(2, :));
  • 计算初步的残差h和雅可比矩阵的构造。

细节迭代部分

for i2 = 3:num_stations
    ...
end
  • 在每次迭代中,更新残差h2和雅可比矩阵A,并计算最小二乘解。

最小二乘解

Q = std_var1^2 * (0.5 * eye(num_stations - 1) + 0.5 * ones(num_stations - 1));
W = (B * Q * B')^(-1); % 计算加权矩阵
u_star = (Ga' * W * Ga)^(-1) * Ga' * W * h; % 计算最小二乘解
  • 构造加权矩阵W,计算最小二乘解u_star,用于更新位置估计。

结果绘图

figure;
hold on
plot3(stations_position(:, 1), stations_position(:, 2), stations_position(:, 3), 'r*'); % 绘制基站位置
plot3(position(1), position(2), position(3), 'ok'); % 绘制真实目标位置
plot3(position_est(1), position_est(2), position_est(3), '.b'); % 绘制估计目标位置
view([7, 32]);
xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴');
legend('锚点', '真实值', '估计值');
  • 可视化锚点、真实位置和估计位置,便于观察定位效果。

输出结果

fprintf('真实值坐标:%s\n', num2str(position));
fprintf('估计值坐标:%s\n', num2str(position_est));
  • 打印真实目标位置和估计位置的坐标。

总结

该MATLAB代码实现了基于两步加权最小二乘法的三维目标定位方法。通过模拟随机生成的锚点和目标位置,展示了如何通过迭代优化算法来提高位置估计的准确性。代码结构清晰,适合用于理解和实现基于TDOA的三维定位算法。

如代码有疑问,可联系博主
在这里插入图片描述

标签:stations,位置,三维,num,锚点,position,二乘,基站
From: https://blog.csdn.net/2401_86544394/article/details/143625853

相关文章

  • SLAM学习1三维刚体运动,实践
    一、Eigen库配置在Ubuntu中输入以下命令下载Eigensudoapt-getinstalllibeigen3-dev下载后可以在/usr/include/eigen3/下查看到Eigen库的头文件,也可以输入如下命令查看sudoupdatedblocateeigen3二.pangolin配置 1、pangolin依赖及工具安装基于Ubuntu18.04版本,在终......
  • 实景三维赋能地灾风险管控
    在当今社会,随着城市化进程的加速以及工业化的发展,地质灾害成为了威胁人们生命财产安全的重要因素之一。特别是在全球气候变化的背景下,极端天气事件的增多导致地质灾害的发生频率和强度都有所上升。因此,如何有效地进行地质灾害的风险管控,成为当前亟待解决的问题之一。实景三维技......
  • python计算最小二乘法(附代码详细解释)
    最小二乘法(LeastSquaresMethod)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。在回归分析中,其目的是找到一条直线(对于简单线性回归而言)或者一个超平面(对于多元线性回归),使得观测值与预测值之间误差的平方和最小。这种方法拟合直线相对于理论线性拟合直......
  • 【老生谈算法】matlab实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)——递归最小二乘
    MATLAB实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)1、文档下载:本算法完整讲解和全套实现源码见下资源,有需要的朋友可以点击进行下载说明文档(点击下载)本算法文档【老生谈算法】Matlab实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)及其应用更多matlab算法原理及源码详......
  • 国土空间规划实景三维智能可视化分析平台
    国土空间规划是实现国家可持续发展的重要手段,随着信息技术的不断进步,实景三维智能可视化分析平台的建设成为了提升规划科学性和实施有效性的关键工具。本文将探讨国土空间规划实景三维智能可视化分析平台的建设内容,以期为国土空间规划的现代化管理提供参考。 ......
  • 三维在工艺流程图应用越来越多,不要守着老思想,认为它花里胡哨
    在科技快速发展的当下,三维技术正逐步渗透到工业设计的每一个角落,其中三维工艺流程图的应用尤为引人注目。这一技术不仅打破了传统二维工艺流程图的局限,更以其直观性、精确性和高效性,为工业生产带来了革命性的变化。一、三维工艺流程图的应用价值1.提升设计效率与精度三维......
  • 同三维T610UHK USB单路4K60采集卡
    USB单路4K60HDMI采集卡,支持1路4K60HDMI输入和1路4K60HDMI环出,1路MIC输入+1路LineIN音频输入和1路音频输出,录制支持4K60、1080P120,TYPE-C接口,环出支持1080P240HDR一、产品简介:同三维T610UHK是一款USB单路4K60HDMI采集卡,TYPE-C接口,采集预览/录制最高支持4K60Hz、1080P120......
  • 数字孪生三维可视化场景如何搭建?
    数字孪生三维可视化场景是一种强大的工具,能够帮助我们模拟和展示现实世界中的复杂环境和系统。从数据采集到交互设计,通过一系列步骤,可以有效地搭建出逼真动态的数字孪生三维场景。数据采集与处理:收集相关场景的物理数据,如建筑结构、设备信息、环境参数等。对数据进行清洗、整......
  • 三维模型服务发布
    三维模型服务发布此次介绍是以超图软件为基础来讲解的。在发布三维模型前需要做好以下准备:软件授权安装(Superidesktop和SuperServer软件)数据准备(需要发布三维模型的shp数据)创建数据源文件首先打开SuperIdesktop软件,新建数据源。会弹出数据源保存路径窗口,建立路径后和数据源......
  • c语言中三维数组
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>intmain(void){doubletensu[2][4][3]={{{3,4,2},{2,4,4},{2,4,3},{1,5,8}},{{4,4,2},{2,8,4},{2,8,9},{1,8,5}}};inti,j,k;for(i=0;i<2;......