基于AOA定位的GDOP计算

2024-02-10 21:30
文章标签 计算 定位 aoa gdop

本文主要是介绍基于AOA定位的GDOP计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AOA-GDOP

基本原理

AOA定位

AoA(angle of arrival)定位方法,即基于信号到达角度的定位方法,通过阵列天线获取到达信号的相位差,换算成到达角度。此方法优势在于精度较高,所需基站数量少,不需时钟同步。但AoA 测角需使用昂贵的阵列天线;信号解算计算复杂度高,难以支撑大容量、高并发的定位场景;

在这里插入图片描述

基于信号到达角度(AOA)的无线传感器网络定位——最大似然估计_aoa测角_脑壳二的博客-CSDN博客

GDOP

几何因子是表征空间各部分介质对测量结果相对影响大小的一个参数。
用户解的误差 = 几何因子 ∗ 用户等效距离误差 用户解的误差=几何因子*用户等效距离误差 用户解的误差=几何因子用户等效距离误差

AOA定位原理

针对我们面临的具体问题,实质上是角度的误差引起的。

针对求解,已知的参数有各个测向站的坐标和各个测向站接收到的角度。

即N个测向站的坐标均已知,分别为 ( x i , y i ) i = 1 、 2... N (x_i,y_i) \quad i=1、2... N (xi,yi)i=12...N

目标点位置为 ( x , y ) (x,y) (x,y)

因此各个测向站收到的入射角度满足如下关系:
t a n ( α i ) = y − y i x − x i tan(\alpha_i) = \frac{y-y_i}{x-x_i} tan(αi)=xxiyyi
即化简后为:
y i − x i ∗ t a n ( α i ) = − x ∗ t a n ( α i ) + y y_i-x_i*tan(\alpha_i) = -x*tan(\alpha_i) +y yixitan(αi)=xtan(αi)+y
将N个测向站的式子都列出来,并用矩阵形式表示:

[ y 1 − x 1 ∗ t a n ( α 1 ) y 2 − x 2 ∗ t a n ( α 2 ) . . . y N − x N ∗ t a n ( α N ) ] N ∗ 1 = [ − t a n ( α 1 ) 1 − t a n ( α 2 ) 1 . . . − t a n ( α N ) 1 ] N ∗ 2 ∗ [ x y ] 2 ∗ 1 \begin{bmatrix} y_1-x_1*tan(\alpha_1)\\ y_2-x_2*tan(\alpha_2) \\ ... \\ y_N-x_N*tan(\alpha_N)\\ \end{bmatrix}_{N*1}= \begin{bmatrix} -tan(\alpha_1) & 1\\ -tan(\alpha_2) & 1 \\ ... \\ -tan(\alpha_N) & 1\\ \end{bmatrix}_{N*2} * \begin{bmatrix} x\\ y \\ \end{bmatrix}_{2*1} y1x1tan(α1)y2x2tan(α2)...yNxNtan(αN) N1= tan(α1)tan(α2)...tan(αN)111 N2[xy]21
可以根据最小二乘法来求解上述式子:

设上述式子为:
B = A ∗ X \boldsymbol{B} = \boldsymbol{A}*\boldsymbol{X} B=AX
即最小二乘法的求解公式为:
X = ( A T A ) − 1 ( A T B ) \boldsymbol{X}=(\boldsymbol{A}^T\boldsymbol{A})^{-1}(\boldsymbol{A}^T\boldsymbol{B}) X=(ATA)1(ATB)

GDOP求解

α i = a r c t a n ( y − y i x − x i ) \alpha_i = arctan(\frac{y-y_i}{x-x_i}) αi=arctan(xxiyyi)

对上式子左右两边同时微分:
d ( α i ) = − ( y − y i ) ( x − x i ) 2 + ( y − y i ) 2 d x + − ( x − x i ) ( x − x i ) 2 + ( y − y i ) 2 d y + k i d(\alpha_i)=\frac{-(y-y_i)}{(x-x_i)^2+(y-y_i)^2}dx +\frac{-(x-x_i)}{(x-x_i)^2+(y-y_i)^2}dy+ki d(αi)=(xxi)2+(yyi)2(yyi)dx+(xxi)2+(yyi)2(xxi)dy+ki

k i = ( y − y i ) ( x − x i ) 2 + ( y − y i ) 2 d x i + ( x − x i ) ( x − x i ) 2 + ( y − y i ) 2 d y i k_i=\frac{(y-y_i)}{(x-x_i)^2+(y-y_i)^2}dx_i +\frac{(x-x_i)}{(x-x_i)^2+(y-y_i)^2}dy_i ki=(xxi)2+(yyi)2(yyi)dxi+(xxi)2+(yyi)2(xxi)dyi

假设有N个测向站,即可以将上面两个式子写为矩阵的形式:
d A = F ∗ d r + d X \boldsymbol{dA}=\boldsymbol{F}*\boldsymbol{dr}+\boldsymbol{dX} dA=Fdr+dX

d A = [ d ( α 1 ) d ( α 2 ) . . . d ( α N ) ] N ∗ 1 d r = [ d x d y ] 2 ∗ 1 d X = [ k 1 k 2 . . . k N ] N ∗ 1 \boldsymbol{dA}= \begin{bmatrix} d(\alpha_1)\\ d(\alpha_2) \\ ... \\ d(\alpha_N)\\ \end{bmatrix}_{N*1} \quad \boldsymbol{dr}= \begin{bmatrix} dx\\ dy \\ \end{bmatrix}_{2*1} \quad \boldsymbol{dX}= \begin{bmatrix} k_1\\ k_2 \\ ... \\ k_N\\ \end{bmatrix}_{N*1} dA= d(α1)d(α2)...d(αN) N1dr=[dxdy]21dX= k1k2...kN N1

F = [ − ( y − y 1 ) ( x − x 1 ) 2 + ( y − y 1 ) 2 − ( x − x 1 ) ( x − x 1 ) 2 + ( y − y 1 ) 2 − ( y − y 2 ) ( x − x 2 ) 2 + ( y − y 2 ) 2 − ( x − x 2 ) ( x − x 2 ) 2 + ( y − y 2 ) 2 . . . − ( y − y N ) ( x − x N ) 2 + ( y − y N ) 2 − ( x − x N ) ( x − x N ) 2 + ( y − y N ) 2 ] N ∗ 2 \boldsymbol{F}= \begin{bmatrix} \frac{-(y-y_1)}{(x-x_1)^2+(y-y_1)^2} & \frac{-(x-x_1)}{(x-x_1)^2+(y-y_1)^2}\\ \frac{-(y-y_2)}{(x-x_2)^2+(y-y_2)^2} & \frac{-(x-x_2)}{(x-x_2)^2+(y-y_2)^2} \\ ... \\ \frac{-(y-y_N)}{(x-x_N)^2+(y-y_N)^2} & \frac{-(x-x_N)}{(x-x_N)^2+(y-y_N)^2}\\ \end{bmatrix}_{N*2} F= (xx1)2+(yy1)2(yy1)(xx2)2+(yy2)2(yy2)...(xxN)2+(yyN)2(yyN)(xx1)2+(yy1)2(xx1)(xx2)2+(yy2)2(xx2)(xxN)2+(yyN)2(xxN) N2

求解目标:目标点定位误差 d r \boldsymbol{dr} dr

伪逆法提示如下:

A + A^+ A+ A A A的左逆: A + = ( A T ⋅ A ) − 1 ⋅ A T A^+=(A^T\cdot A)^{-1}\cdot A^T A+=(ATA)1AT

A + A^+ A+ A A A的右逆: A + = A T ⋅ ( A ⋅ A T ) − 1 A^+=A^T\cdot(A\cdot A^T)^{-1} A+=AT(AAT)1

故利用伪逆法可得:
d r = ( F T F ) − 1 F T ( d A − d X ) \boldsymbol{dr} = (\boldsymbol{F}^T\boldsymbol{F})^{-1}\boldsymbol{F}^T(\boldsymbol{dA}-\boldsymbol{dX}) dr=(FTF)1FT(dAdX)
C = ( F T F ) − 1 F T = ( c i j ) 2 ∗ 2 \boldsymbol{C} = (\boldsymbol{F}^T\boldsymbol{F})^{-1}\boldsymbol{F}^T=(c_{ij})_{2*2} C=(FTF)1FT=(cij)22,因此公式可化为:
P d r = E [ d r ⋅ d r T ] = C { E [ d A ⋅ d A T ] + E [ d X ⋅ d X T ] } C T \boldsymbol{P_{dr}} = E[\boldsymbol{dr}·{\boldsymbol{dr}}^T] = \boldsymbol{C}\{ E[\boldsymbol{dA} · \boldsymbol{{dA}}^T]+E[\boldsymbol{dX}·{\boldsymbol{dX}}^T]\}\boldsymbol{C}^T Pdr=E[drdrT]=C{E[dAdAT]+E[dXdXT]}CT
其中:
E [ d A ⋅ d A T ] = [ σ α 1 2 0 . . . 0 0 σ α 2 2 . . . 0 . . . . . . . . . . . . 0 0 0 σ α N 2 ] N ∗ N E[\boldsymbol{dA} · \boldsymbol{{dA}}^T]=\begin{bmatrix} {\sigma^2_{\alpha_1}} & 0 &...& 0\\ 0 & {\sigma^2_{\alpha_2}} &...& 0\\ ...&...&...&...\\ 0 &0&0&{\sigma^2_{\alpha_N}} \\ \end{bmatrix}_{N*N} E[dAdAT]= σα120...00σα22...0.........000...σαN2 NN

E [ d X ⋅ d X T ] = [ k 1 ∗ k 1 k 1 ∗ k 2 . . . k 1 ∗ k N k 2 ∗ k 1 k 2 ∗ k 2 . . . k 2 ∗ k N . . . . . . . . . . . . k N ∗ k 1 k N ∗ k 2 . . . k N ∗ k N ] N ∗ N E[\boldsymbol{dX} · \boldsymbol{{dX}}^T]=\begin{bmatrix} k_1*k_1 & k1*k_2 &...& k_1*k_N\\ k_2*k_1 & k_2*k_2 &...& k_2*k_N\\ ...&...&...&...\\ k_N*k_1 &k_N*k_2&...&k_N*k_N \\ \end{bmatrix}_{N*N} E[dXdXT]= k1k1k2k1...kNk1k1k2k2k2...kNk2............k1kNk2kN...kNkN NN

因为 E [ d X ⋅ d X T ] E[\boldsymbol{dX} · \boldsymbol{{dX}}^T] E[dXdXT]中:

d x i dx_i dxi d y j dy_j dyj之间相互独立,且 d x i dx_i dxi d x j dx_j dxj i ≠ j i\neq j i=j的时候也相互独立,即:

d x i ∗ d y j = 0 i = 1 , 2 , . . . N j = 1 , 2 , . . . , N d x i ∗ d x j = 0 i ≠ j dx_i*dy_j=0 \quad i=1,2,...N\quad j=1,2,...,N\\ dx_i*dx_j=0 \quad i\neq j dxidyj=0i=1,2,...Nj=1,2,...,Ndxidxj=0i=j

假设各测向站在各个分量上的标准差大小一样,故设:
σ x i 2 = σ y i 2 = σ s 2 i = 1 , 2 , . . . , N d x i ∗ d x i = σ s 2 = d y i ∗ d y i \sigma^2_{x_i} = \sigma^2_{y_i} = \sigma^2_{s} \quad \quad i=1,2,...,N \\ dx_i*dx_i = \sigma^2_{s} = dy_i*dy_i σxi2=σyi2=σs2i=1,2,...,Ndxidxi=σs2=dyidyi
故:
E [ d X ⋅ d X T ] = σ s 2 ∗ [ 1 ( x − x 1 ) 2 + ( y − y 1 ) 2 0 . . . 0 0 1 ( x − x 2 ) 2 + ( y − y 2 ) 2 . . . 0 . . . . . . . . . . . . 0 0 . . . 1 ( x − x N ) 2 + ( y − y N ) 2 ] N ∗ N E[\boldsymbol{dX} · \boldsymbol{{dX}}^T]=\sigma^2_{s}*\begin{bmatrix} \frac{1}{(x-x_1)^2+(y-y_1)^2} & 0 &...& 0\\ 0 & \frac{1}{(x-x_2)^2+(y-y_2)^2} &...& 0\\ ...&...&...&...\\ 0 &0&...&\frac{1}{(x-x_N)^2+(y-y_N)^2} \\ \end{bmatrix}_{N*N} E[dXdXT]=σs2 (xx1)2+(yy1)210...00(xx2)2+(yy2)21...0............00...(xxN)2+(yyN)21 NN

E [ d A ⋅ d A T ] + E [ d X ⋅ d X T ] = ( α i j ) 2 ∗ 2 E[\boldsymbol{dA} · \boldsymbol{{dA}}^T]+E[\boldsymbol{dX}·{\boldsymbol{dX}}^T] = (\alpha_{ij})_{2*2} E[dAdAT]+E[dXdXT]=(αij)22

在这里插入图片描述

这篇关于基于AOA定位的GDOP计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Java - BigDecimal 计算分位(百分位)

日常开发中,如果使用数据库来直接查询一组数据的分位数,就比较简单,直接使用对应的函数就可以了,例如:         PERCENT_RANK() OVER(PARTITION BY 分组列名 ORDER BY 目标列名) AS 目标列名_分位数         如果是需要在代码逻辑部分进行分位数的计算,就需要我们自己写一个工具类来支持计算了 import static ja