基于TDOA的chan算法(定位算法)

这篇具有很好参考价值的文章主要介绍了基于TDOA的chan算法(定位算法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Chan算法原理

TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。

Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。

该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定位和三个点以上参与定位。
基于TDOA的chan算法(定位算法)
已知坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1, y_1), (x_2, y_2), (x_3, y_3) (x1,y1),(x2,y2),(x3,y3),假设第未知点的坐标是 ( x , y ) (x, y) (x,y)根据几何关系定义一下关系表达式:

r i = ( x i − x ) 2 + ( y i − y ) 2 r_i = \sqrt{(x_i-x)^2+(y_i-y)^2} ri=(xix)2+(yiy)2 … … … ( 1 ) \dots\dots\dots(1) (1)

r i , 1 = r i − r 1 = ( x i − x ) 2 + ( y i − y ) 2 − ( x 1 − x ) 2 + ( y 1 − y ) 2 r_{i,1}=r_i-r_1=\sqrt{(x_i-x)^2+(y_i-y)^2}-\sqrt{(x_1-x)^2+(y_1-y)^2} ri,1=rir1=(xix)2+(yiy)2 (x1x)2+(y1y)2 … … … ( 2 ) \dots\dots\dots(2) (2)

根据(1)另有如下关系:先令 K i = x i 2 + y i 2 K_i=x_i^2+y_i^2 Ki=xi2+yi2

r i 2 = x i 2 + y i 2 = K i − 2 x i x − 2 y i y + x 2 + y 2 r_i^2=x_i^2+y_i^2=K_i-2x_ix-2y_iy+x^2+y^2 ri2=xi2+yi2=Ki2xix2yiy+x2+y2 … … … ( 3 ) \dots\dots\dots(3) (3)

根据(2)另外有如下关系:

r i 2 = ( r i , 1 + r i ) 2 r_i^2=(r_{i,1}+r_i)^2 ri2=(ri,1+ri)2 … … … ( 4 ) \dots\dots\dots(4) (4)

将(3)代入(4)可推出如下关系(关键):

r i , 1 2 + 2 r i , 1 r 1 = x i 2 + y i 2 − 2 x i x − 2 y i y + 2 x 1 x + 2 y 1 y − ( x 1 2 + y 1 2 ) = r i 2 − r 1 2 r_{i,1}^2+2r_{i,1}r_1=x_i^2+y_i^2-2x_ix-2y_iy+2x_1x+2y_1y-(x_1^2+y_1^2)=r_i^2-r_1^2 ri,12+2ri,1r1=xi2+yi22xix2yiy+2x1x+2y1y(x12+y12)=ri2r12 … … … ( 5 ) \dots\dots\dots(5) (5)

进一步,令 x i , 1 = x i − x 1 x_{i,1}=x_i-x_1 xi,1=xix1,有

r i , 1 2 + 2 r i , 1 r 1 = ( K i − K 1 ) − 2 x i , 1 x − 2 y i , 1 y r_{i,1}^2+2r_{i,1}r_1=(K_i-K_1)-2x_{i,1}x-2y_{i,1}y ri,12+2ri,1r1=(KiK1)2xi,1x2yi,1y

这里(5)是关键一步:消除了未知数的平方项,仅保留一系列的线性方程。当 i = 1 , 2 , 3 i = 1, 2, 3 i=1,2,3时,有如下表达式:
基于TDOA的chan算法(定位算法)
通过消元法进行求解:
基于TDOA的chan算法(定位算法)
接下来就是如何求解 ( x , y ) (x,y) (x,y)

首先,令
基于TDOA的chan算法(定位算法)
有如下非常简洁的形式:
基于TDOA的chan算法(定位算法)
其中只有 r 1 r_1 r1是未知的。因此要想求出未知坐标 ( x , y ) (x,y) (x,y),由式(9)可知,首先要求出 r 1 r_1 r1

接下来,将式(9)代入到式(3), r i 2 = x i 2 + y i 2 = K i − 2 x i x − 2 y i y + x 2 + y 2 , i = 1 r_i^2=x_i^2+y_i^2=K_i-2x_ix-2y_iy+x^2+y^2, i = 1 ri2=xi2+yi2=Ki2xix2yiy+x2+y2,i=1可以化为如下形式:

( q 1 2 + q 2 2 − 1 ) r 1 2 − 2 [ q 1 ( x 1 − p 1 ) + q 2 ( y 1 − p 2 ) ] r 1 + [ ( x 1 − p 1 ) 2 + ( y 1 − p 2 ) 2 ] = 0 … … … ( 10 ) (q_1^2+q_2^2-1)r_1^2-2[q_1(x_1-p_1)+q_2(y_1-p_2)]r_1+[(x_1-p_1)^2+(y_1-p_2)^2]=0\dots\dots\dots(10) (q12+q221)r122[q1(x1p1)+q2(y1p2)]r1+[(x1p1)2+(y1p2)2]=0(10)

a ∗ r 2 + b ∗ r + c = 0 , r = r 1 a*r^2+b*r+c=0,r = r_1 ar2+br+c=0r=r1

式子(10)是 r 1 r_1 r1的一元二次方程。求解式(10)可得 r r r的两个根,根据先验信息可以舍去一个无效的根,将有效的 r r r代会到式(9)中可求出未知点的坐标。文章来源地址https://www.toymoban.com/news/detail-406165.html

代码

clear all;
clc;
%% 初始化数值
c = 3120.77;              % 标准值
t1 = 0.22 * 0.0001;       % 传感器1的时间延迟 
t2 = 0.58 * 0.0001;       % 传感器2的时间延迟

x1 = 0;     y1 = 0.5;           % 传感器1
x2 = 0;     y2 = 0;             % 传感器2
x3 = 0.5;   y3 = 0;             % 传感器3
  

s1 = c * t1;    % 时延距离 s1 = r21
s2 = c * t2;    % 试验距离 s2 = r31


%% 求解未知点
k1 = x1^2 + y1^2;   % 中间值
k2 = x2^2 + y2^2;
k3 = x3^2 + y3^2;

p1_molecule = (y2 - y1)*s2^2 - (y3 - y1)*s1^2 + (y3 - y1)*(k2 - k1) - (y2 - y1)*(k3 - k1);
p1_denominator = (x2 - x1)*(y3 - y1) - (x3 - x1)*(y2 - y1);
p1 = p1_molecule / (p1_denominator*2);
q1 = ((y2 - y1)*s2 - (y3 - y1)*s1)/((x2 - x1)*(y3 - y1)-(x3 - x1)*(y2 - y1));

p2_molecule = (x2 - x1)*s2^2 - (x3 - x1)*s1^2 + (x3 - x1)*(k2 - k1) - (x2 - x1)*(k3 - k1);
p2_denominator = (x3 - x1)*(y2 - y1) - (x2 - x1)*(y3 - y1);
p2 = p2_molecule / (p2_denominator * 2);
q2 = ((x2 - x1)*s2 - (x3 - x1)*s1)/((x3 - x1)*(y2 - y1)-(x2 - x1)*(y3 - y1));
%% 求取方程
a = q1^2 + q2^2 -1;
b = -2*((x1 - p1)*q1 + (y1 - p2)*q2);
c = (x1 - p1)^2 + (y1 - p2)^2;

r1 = (-b + sqrt(b^2 - 4*a*c))/(2*a);
r2 = (-b - sqrt(b^2 - 4*a*c))/(2*a);

if r1 > 0
    x = p1 + q1*r1;
    y = p2 + q2*r1;
else
    x = p1 + q1*r2;
    y = p2 + q2*r2;
end

disp('未知点坐标: ')
disp(x), disp(y)

到了这里,关于基于TDOA的chan算法(定位算法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于改进遗传算法的配电网故障定位(matlab代码)

    该程序复现文章《基于改进遗传算法的配电网故障定位》,将改进的遗传算法应用于配电网故障定位中, 并引入分级处理思想, 利用配电网呈辐射状的特点, 首先把整个配电网划分为主干支路和若干独立区域, 再利用该算法分别对各独立区域进行故障定位, 然后进行全局寻优, 这

    2024年04月25日
    浏览(50)
  • 自动驾驶定位算法:基于多传感器融合的状态估计(muti-Sensors Fusion)

    1、传感器(Sensor)选取 自动驾驶系统中用于状态估计(State Estimation)的常用传感器包括GPS/GNSS、IMU、激光雷达(Lidar)。 状态估计(State Estimation)选用传感器需要考虑哪些因素: 1)误差不相关性。也就是说,用于Sensor Fusion的传感器其中单个传感器(Sensor Measurement)测量失败,不会导

    2024年04月13日
    浏览(46)
  • 基于halcon实现视觉定位框架(C#做主算法,C#、MFC、Qt二次开发)【附源码】

    本文主要实现halcon二次开发,基于C#做视觉算法的编辑,已C#做用户空间,然后使用C#、C++(MFC、Qt)分别实现调用,从而实现多相机的使用。 换句话说就是:C#做算法及主界面开发,然后把生成的控件dll移交给C#或者MFC或者QT进行二次调用实现二次开发,这里主要想展示的是多

    2024年01月19日
    浏览(81)
  • (七)【Jmeter】线程(Threads(Users))之bzm-Arrivals Thread Group

    简述 操作路径如下: 作用:通过自动调整并发用户数来实现具体需要达到每秒处理多少个请求的需求。 配置:设置到达率、持续时间等参数。 使用场景:模拟实际用户按照特定 到达率 进行并发访问。 优点:支持模拟突发流量,更贴近实际用户行为。 缺点:配置较为复杂

    2024年02月19日
    浏览(40)
  • go chan基本使用

    怎么理解这个缓冲,我个人的理解是是执行这个chan 操作的时候是否发送阻塞。 操作:读和写。 读取的时候,我们都应该要是阻塞的,例如我们的socket、的recv函数。当然取决于你设置的是阻塞的套接字还是非阻塞的套接字了。 无缓冲的chan,讲究读写对称,也就是你在读的时

    2024年02月01日
    浏览(38)
  • 深入理解 go chan

    go 里面,在实际程序运行的过程中,往往会有很多协程在执行,通过启动多个协程的方式,我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信,不同于以往多线程程序的那种通信方式,在 go 里面是通过 channel (也就是 chan 类型)来进行通信的, 实现的方式

    2024年02月01日
    浏览(38)
  • 【算法原理和代码实战】德州扑克计算概率4-2法则原理(基于概率论和统计学的基本原理),详细计算步骤,具体算法代码实例。

    德州扑克计算概率的4-2法则是一种简便的计算方法,用于估算在德州扑克中获得某种牌型的概率。4-2法则的原理是基于概率论和统计学的基本原理,通过观察德州扑克中的牌型组合和可能性,得出一个简单的计算公式。 在德州扑克的前三张公共牌(翻牌圈)之后,如果你需要

    2024年02月14日
    浏览(53)
  • 机器学习:基于梯度下降算法的逻辑回归实现和原理解析

    当涉及到二元分类问题时,逻辑回归是一种常用的机器学习算法。它不仅简单而且有效,通常是入门机器学习领域的第一步。本文将介绍逻辑回归的基本概念、原理、应用场景和代码示例。 逻辑回归是一种用于解决二元分类问题的统计学习方法。尽管其名称中包含\\\"回归\\\"一词

    2024年02月09日
    浏览(53)
  • 机器学习:基于梯度下降算法的线性拟合实现和原理解析

    当我们需要寻找数据中的趋势、模式或关系时,线性拟合和梯度下降是两个强大的工具。这两个概念在统计学、机器学习和数据科学领域都起着关键作用。本篇博客将介绍线性拟合和梯度下降的基本原理,以及它们在实际问题中的应用。 线性拟合是一种用于找到数据集中线性

    2024年02月10日
    浏览(37)
  • GO 语言中 chan 的理解

    chan 是 Go 语言中的一个,用于实现并发通信。chan 可以用于在不同的 goroutine 之间传递数据,实现数据的同步和异步传输。 在底层实现上,chan 是通过一个结构体来表示的,这个结构体包含了一个指向数据的指针和两个指向信道的指针。其中,一个指针用于发送数据,另

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包