【MATLAB例程】AOA与TDOA混合定位例程,适用于二维环境、3个锚点的定位|附代码下载链接

在这里插入图片描述

本 MATLAB 程序实现了基于 Angle of Arrival (AOA)Time Difference of Arrival (TDOA) 的二维定位方法,通过自适应融合最小二乘优化,实现对未知目标的高精度估计。本例中固定使用了 3 个基站(锚点),算法框架支持扩展到更多基站。
直接运行后可得到二维、3个锚点的TDOA(到达时间差)与AOA(到达角度)的混合定位方法的定位结果展示与对比

文章目录

  • 程序简介
    • 系统模型与参数
    • TDOA建模
    • AOA建模
    • AOA/TDOA混合定位方法
  • 运行结果
  • MATLAB源代码

程序简介

系统模型与参数

  • 目标位置:未知点 p=[x,y]⊤\mathbf{p} = [x, y]^\topp=[x,y]

  • 锚点位置:第 iii 个基站坐标为 si=[xi,yi]⊤\mathbf{s}_i = [x_i, y_i]^\topsi=[xi,yi]i=1,2,3i = 1, 2, 3i=1,2,3

  • 噪声模型

    • AOA噪声:高斯白噪声 N(0,σθ2)\mathcal{N}(0, \sigma_\theta^2)N(0,σθ2),默认 σθ=10−2\sigma_\theta = 10^{-2}σθ=102
    • TDOA噪声:高斯白噪声 N(0,σt2)\mathcal{N}(0, \sigma_t^2)N(0,σt2),默认 σt=10−10\sigma_t = 10^{-10}σt=1010

TDOA建模

TDOA测量基于不同基站之间接收到信号的时间差。对于目标到第 iii 个基站的理想距离为:

ri=∥p−si∥2r_i = \| \mathbf{p} - \mathbf{s}_i \|_2 ri=psi2

TDOA观测值定义为:

Δri=ri−r1+ni,i=2,3\Delta r_i = r_i - r_1 + n_i, \quad i=2,3 Δri=rir1+ni,i=2,3

对应时间差:

Δti=Δric,c为光速\Delta t_i = \frac{\Delta r_i}{c}, \quad c \text{ 为光速} Δti=cΔri,c 为光速

最终形成的观测方程:

Ri=ri−r1,i=2,3R_i = r_i - r_1, \quad i=2,3 Ri=rir1,i=2,3

用于构建非线性约束方程,后续由最小二乘方法迭代解算。

AOA建模

AOA 使用信号到达方向(角度)进行定位。第 iii 个基站测得的理想角度为:

θi=arctan⁡2(y−yi,x−xi)\theta_i = \arctan2(y - y_i, x - x_i) θi=arctan2(yyi,xxi)

加入角度噪声 nθ,i∼N(0,σθ2)n_{\theta,i} \sim \mathcal{N}(0, \sigma_\theta^2)nθ,iN(0,σθ2) 后,构造以下线性测量模型:

sin⁡(θi)(x−xi)−cos⁡(θi)(y−yi)=0\sin(\theta_i)(x - x_i) - \cos(\theta_i)(y - y_i) = 0 sin(θi)(xxi)cos(θi)(yyi)=0

整理成最小二乘形式 Hp=Y\mathbf{H}\mathbf{p} = \mathbf{Y}Hp=Y

Hi=[sin⁡(θi)−cos⁡(θi)],Yi=xisin⁡(θi)−yicos⁡(θi)\mathbf{H}_i = \begin{bmatrix} \sin(\theta_i) & -\cos(\theta_i) \end{bmatrix}, \quad \mathbf{Y}_i = x_i \sin(\theta_i) - y_i \cos(\theta_i) Hi=[sin(θi)cos(θi)],Yi=xisin(θi)yicos(θi)

所有基站数据合并后估计目标位置:

p^AOA=(H⊤H)−1H⊤Y\hat{\mathbf{p}}_{AOA} = (\mathbf{H}^\top \mathbf{H})^{-1} \mathbf{H}^\top \mathbf{Y} p^AOA=(HH)1HY

AOA/TDOA混合定位方法

详见代码中的注释。

运行结果

运行结果如下:
在这里插入图片描述
命令行输出的定位结果与误差:
在这里插入图片描述

MATLAB源代码

程序结构如下:
在这里插入图片描述
部分代码如下:

% AOA与TDOA混合定位例程,适用于二维环境、3个锚点的定位
% 作者:matlabfilter
% 2025-07-05/Ver1%% 初始化
clc;clear;close all;
rng(0);
% 定义参数和待测点位置
num_stations = 3; % 基站数量(锚点数量)
TDOA_noise = 1e-10; %TDOA误差
AOA_noise = 1e-2; % AOA 角度噪声
% 固定基站位置
stations_position = 100*randn(3,2);
c = 3e8;
% 待定位点
position = 0*ones(1,2)+5*randn(1,2);
% TDOA 建模
delta = ones(3,1)*position - stations_position; %未知点与各基站之间的相对位置(矢量)
r_ideal = (sum(delta.^2,2)).^(1/2); %计算移动台到各个基站的实际距离(标量)
delta_t = r_ideal/c+TDOA_noise*randn(size(r_ideal));
r = delta_t*c;
Ri = r(2:end,:);
R1 = ones(2,1)*r(1,:);
R = Ri-R1; %表示从[2,i]开始MS与基站i和基站1的距离差%% AOA定位
% 计算目标到各基站的距离
num_station = size(stations_position, 1);
% true_distances = vecnorm(stations_position - position, 2, 2);% 模拟接收到的AOA(此时是角度理想值,后面要加噪声)
azimuth_angles = atan2(position(2) - stations_position(:, 2), position(1) - stations_position(:, 1));% 假设测量的AOA角度和距离上加一些噪声
azimuth_angles = azimuth_angles + AOA_noise * randn(num_station, 1);
% 使用最小二乘法进行定位估计 直接求解(无需距离)
H = zeros(1*num_station,2);
Y = zeros(1*num_station,1);

完整代码的下载链接:https://download.csdn.net/download/callmeup/91274669

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

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

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

相关文章

磐维数据库panweidb集中式集群配置VIP【添加、删除和修改】

0 说明 panweidb集中式集群为了防止主备切换后应用连接无法切换到新主库,需要配置vip,应用可以只通过该ip与数据库连接,不用感知数据库在哪个节点上。 panweidb中配置 VIP主要依赖 CM 组件的 VIP 仲裁功能,通过回调脚本在主备切换…

python的保险业务管理与数据分析系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具:Navicat/SQLyog等都可以 保险行业…

R语言如何接入实时行情接口

目录 1. 安装必要的R包 2. 导入库 3. 连接WebSocket 4. 处理连接成功后的操作 5. 处理接收到的消息 6. 处理连接关闭和错误 7. 发送心跳数据 8. 自动重连机制 9. 启动连接和重连 总结 在数据分析和金融研究中,实时行情数据的获取至关重要,但市…

Redis数据安全性分析

Redis高可用与数据安全机制深度解析前置知识:Redis基础安装与使用(主从复制、哨兵集群、Cluster集群搭建)一、Redis性能压测工具 工具名称:redis-benchmark核心作用:快速基准测试Redis性能使用场景:评估不同…

差分和前缀和

差分和前缀和的原理、用法和区别。前缀和(Prefix Sum)核心思想:预处理数组的前缀和,快速回答「区间和查询」 适用场景:数组静态(更新少、查询多),需要频繁计算任意区间的和1. 定义与…

C++并发编程-12. 用内存顺序实现内存模型

前情回顾 前文我们介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。全局一致性模型同步模型(获取和释放)松散模型memory_order_seq_cst memory_order_seq_cst代表全局一致性顺序&#…

AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践

AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践 希望对大家有用! 目录AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践希望对大家有用!一、传统测试之殇:工业质检的切肤之痛二、智能缺陷检测系统架构1. …

二、深度学习——损失函数

二、损失函数损失函数定义:损失函数是用来衡量模型参数的质量的函数,衡量方式是比较网络输出和真实输出的差异别名:损失函数(loss function),代价函数(cost function),目…

面向数据报的套接字通道技术详解

数据报通道基础 通道特性与创建方式 java.nio.channels.DatagramChannel类实例代表数据报通道,默认处于阻塞模式。通过configureBlocking(false)方法可将其配置为非阻塞模式。创建数据报通道需调用其静态open()方法,若用于IP组播则需指定组播组的地址类型…

147.在 Vue3 中使用 OpenLayers 地图上 ECharts 模拟飞机循环飞行

🧩 效果预览 👇 飞机从多个城市起飞并向其他城市飞行,动画流畅,地图可缩放拖拽: 📦 一、项目技术栈 技术用途Vue 3现代前端框架OpenLayers地图底图渲染ECharts ol-echarts飞机飞行动画渲染ol-echarts将 …

OCR与PDF解析的区别

我们日常所接触的文档中,经常能碰到多语言混合的文档。比如论文试卷、财报研报、跨国票据都含有多种语言和文字。要将文档中的内容识别并提取务必需要使用到OCR技术,而传统的OCR工具在处理这类型文档的时候有局限性。早期的 OCR 系统识别精度有限&#x…

Java 单例类详解:从基础到高级,掌握线程安全与高效设计

作为一名Java开发工程师,你一定对**单例模式(Singleton Pattern)**不陌生。它是23种经典设计模式中最简单也是最常用的一种,用于确保一个类在整个应用程序中只有一个实例存在。单例广泛应用于系统配置、数据库连接池、日志管理器、…

面向对象设计

你列出的这些属于 C 高级开发中面向对象设计与架构设计的核心知识,也是面试高级工程师岗位必问的内容。下面我按顺序,深入讲解每一项概念、原理、用途,并穿插 C 示例。✅ 1. 设计原则(SOLID)SOLID 是面向对象设计的五大…

IntelliJ IDEA让我的开发效率翻倍:从新手到高效开发者的进阶之路

IntelliJ IDEA让我的开发效率翻倍:从新手到高效开发者的进阶之路 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用…

css sprites使用

CSS Sprites 是一种将多个小图标或背景图像合并到一个大图中的技术。通过减少HTTP请求次数,可以显著提高页面加载速度。其核心原理是:通过设置元素的背景图(background-image)为这个大图,然后调整背景位置(…

分布式爬虫在电商平台商品数据大规模采集中的技术应用

在电商平台商品数据大规模采集场景中,分布式爬虫凭借其高效、可扩展、抗风险的特性,成为突破单节点爬虫性能瓶颈的核心技术方案。以下从技术架构、关键技术点、电商场景适配及挑战应对四个维度,解析其具体应用:一、分布式爬虫的核…

Linux的`if test`和`if [ ]中括号`的取反语法比较 笔记250709

Linux的if test和if 中括号的取反语法比较 笔记250709 Linux的 test命令(或等价中括号写法 [空格expression空格])的用法详解. 笔记250709 四种取反语法: if ! test -e xxx ;then... 和 if test ! -e xxx ;then... 和 if ! [ -e xxx ] ;then... 和 if …

记录使用ubuntu16.04编译aosp(android8.1与10)遇到的问题

一、前言: 本来打算用wsl来编译AOSP,但是折腾了好几天,以失败告终。后来使用vmware反而成功了。 本篇同样会把wsl遇到的问题与尝试记录下来。 环境:vmware ubuntu16.04。 为什么会使用ubuntu16.04呢,因为在公司有一…

hiredis window之RFDMap

简介 RFDMap用于将socket分配映射成连续的文件描述符,同时管理回收的文件描述符,因为ae构架中管理fd与对应事件处理器使用的是数据,fd作为数组下标 结构 #mermaid-svg-zQz2LTrKRi0LQTII {font-family:"trebuchet ms",verdana,arial…

RustFS一款Rust 驱动的 高性能 分布式存储系统

演示地址:https://play.rustfs.com/browser 访问账号(默认 rustfsadmin)。 访问密钥(默认 rustfsadmin)。 下载mc https://dl.min.io/client/mc/release可以直接在 Linux 系统上安装 mc(,然后访…