基于测距的定位技术仿真——三边测量法
仿真软件——MATLAB

1、定位算法的实现
1.1基本原理

1) 已知三点位置(x1,y1),(x2,y2),(x3,y3)(x_1,y_1 ),(x_2,y_2 ),(x_3,y_3)
2) 已知未知点 (x0,y0)(x_0, y_0) 到三点距离d1,d2,d3 d_1,d_2,d_3
3) 以d1,d2,d3 d_1,d_2,d_3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式:
(x1−x0)2+(y1−y0)2=d21(x_1-x_0)^2+(y_1-y_0)^2=d_1^2
(x2−x0)2+(y2−y0)2=d22(x_2-x_0)^2+(y_2-y_0)^2=d_2^2
(x3−x0)2+(y3−y0)2=d23(x_3-x_0)^2+(y_3-y_0)^2=d_3^2

1.2解法推导

设未知点位置为 (x,y)(x, y), 令其中的第一个球形 P1P_1 的球心坐标为 (0, 0),P2P_2 处于相同纵坐标,球心坐标为(d,0),P3 (d, 0),P_3 球心坐标为(i,j) (i, j),三个球形半径分别为r1,r2,r3,z r_1, r_2, r_3,z为三球形相交点与水平面高度。则有:
r12=x2+y2+z2r_{12} = x^2+y^2+z^2
r22=(x−d)2+y2+z2r_{22} = (x-d)^2+y^2+z^2
r32=(x−i)2+(x−j)2+z2r_{32} = (x-i)^2+(x-j)^2+z^2
当 z = 0 时, 即为三个圆在水平面上相交为一点,首先解出 x:
x=((r21−r22+d2))2dx =\frac {((r_1^2-r_2^2+d^2))}{2d}
将公式二变形,将公式一的z2 z^2 代入公式二,再代入公式三得到 y 的计算公式:
y=((r21−r23−x2+(x−i)2+j2))2jy = \frac{((r_1^2-r_3^2-x^2+(x-i)^2+j^2))}{2j}

1.3代码实现
1.3.1 主文件locac3.m

%*********locac3.m****************
%---采用三边定位法对未知节点定位---------
clear;
len=1000; %参考节点数
maxx=1000;%参考节点分布的最大横坐标
maxy=1000;%参考节点分布的最大纵坐标
%------参考点[cx,cy]-----------------
cx=maxx*rand(1,len);
cy=maxy*rand(1,len);
plot(cx,cy,'k^');%参考节点图
%--------未知节点(mx,my)-----------
mlen=200;  %未知点数
mx=maxx*rand(1,mlen);
my=maxy*rand(1,mlen);
hold on;
plot(mx,my,'go'); %盲节点图
%---------定位估计----------------------
wucha_p=0.00001;   %定位误差
for p=1:mlen %对每个未知盲节点[xa,ya,xb,yb,xc,yc]=find_three_p(cx,cy); %从参考点中任意选出三点da=sqrt((mx(p)-xa)^2+(my(p)-ya)^2);db=sqrt((mx(p)-xb)^2+(my(p)-yb)^2);dc=sqrt((mx(p)-xc)^2+(my(p)-yc)^2);[locx(p),locy(p)]=triposition(xa,ya,da,xb,yb,db,xc,yc,dc); %计算定位坐标        plot(locx(p),locy(p),'r*');
end
legend('参考节点','盲节点','定位节点','Location','SouthEast');
title('三边测量法的定位');
wdot=0;%统计定位正确的点数
for p=1:mlendr(p)=sqrt((locx(p)-mx(p))^2+(locy(p)-my(p))^2);   if dr(p)<wucha_pwdot=wdot+1;    end
end
disp('未知节点定位准确率:');
wdot/mlen

1.3.2 find_three_p.m

function [xa,ya,xb,yb,xc,yc]=find_three_p(x,y)
%从N点中随机选出不同的三点
% 输入:x,y是N点的坐标
%输出:xa,ya,xb,yb,xc,yc
%     为选出的任意三点的坐标
len=length(x);
% 取一点
t=fix(len*rand(1,1))+1;
ma=t;
xa=x(t);
ya=y(t);
%取第二点
while(1)t=fix(len*rand(1,1))+1;if(t~=ma)       mb=t;xb=x(t);yb=y(t);      break;end
end
%取第三点
while(1)t=fix(len*rand(1,1))+1;if (t~=ma)&&(t~=mb)       mc=t;xc=x(t);yc=y(t);     break;end
end

1.3.3 triposition.m

%一、m函数triposition.m文件内容
%一、m函数*****************triposition.m**************************%
function [locx,locy]=triposition(xa,ya,da,xb,yb,db,xc,yc,dc)
%              三点定位法                          %
%输入:
%   1.参考节点A(xa,ya),B(xb,yb),C(xc,yc)
%   2.定位节点D(locx,locy)到这三点的距离分别为da,db,dc
%返回:
%   (locx,locy)为计算的定位节点D点的位置坐标
%
syms x y   %f符号变量
%--------------求解方程组------------------------------------
f1='2*x*(xa-xc)+xc^2-xa^2+2*y*(ya-yc)+yc^2-ya^2=dc^2-da^2';
f2='2*x*(xb-xc)+xc^2-xb^2+2*y*(yb-yc)+yc^2-yb^2=dc^2-db^2';
[xx,yy]=solve(f1,f2,x,y); %解关于x,y的符号方程组,得到解的符号表示,并存入xx,yy
px=eval(xx);  %解的数值px(1),px(2)
py=eval(yy);  %解的数值py(1),py(2)
locx=px;
locy=py;

2、仿真结果和分析
2.1 仿真结果

2.2 结果分析
三边定位算法是最容易实现的定位算法之一,只需要较低的成本就可以实现。但是,也存在着定位精度不高,算法鲁棒性不好,节点不规则布置引起的定位误差等。为了降低定位误差,提高算法的鲁棒性,可以使用基于加权处理的三边测量定位算法。第一步,依据位置节点与锚节点的通信质量选取符合条件的锚节点参与定位计算;第二步,依据改进的三边测量定位算法计算出未知节点的多个估算坐标;第三步,利用权重函数计算未知节点坐标

Trilateration Algorithm相关推荐

  1. 三角定位PHP实现,自己琢磨出来的三角定位法,还真有这么回事

    随着移动平台迅猛的发展,各种 LBSNS(Location-based Social Networking Services)应用真可谓是层出不穷.不懂?那我举个例子,陌陌和微信的"查找附近 ...

  2. What are Triangulation, Trilateration, and Multilateration?

    目录 1. 概要 2. Triangulation 3. Trilateration 4. Multilateration 1. 概要 Triangulation.Trilateration和Mult ...

  3. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

  4. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(五)分水岭算法(watershed algorithm)

    8.5 分水岭算法(watershed algorithm) 1.基于拓扑理论的数学形态学的分割方法. 2.基本思想:把图像看作测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局 ...

  5. C++ algorithm的sort函数总结

    sort函数 sort对给定区间进行排序,支持各种数据类型,迭代器,结构体,自定义排序规则 stable_sort 对给定区间进行稳定排序,且可保证相等元素的原本相对次序在排序后保持不变 partia ...

  6. SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm

    matlab 编译loransac,lapack mex ranH.c时一直链接错误. 原来mex在编译多个文件时要把所有的C文件都列出来.命令如下: mex loransacH.mex.c ranH ...

  7. C++/C++11中头文件algorithm的使用

    <algorithm>是C++标准程序库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板).<algorithm>定义了设计用于元素范围的函数集合.任何对 ...

  8. 2018/8/27 A Modified PSO Algorithm with Exponential Decay Weight

    信息: 2017年                            会议 题目: A Modified PSO Algorithm with Exponential Decay Weight 总 ...

  9. count http://www.cplusplus.com/reference/algorithm/count/

    // count algorithm example#include <iostream>#include <algorithm>#include <vector> ...

最新文章

  1. 八个最致命的Linux命令!
  2. Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
  3. ssh(Spring+Spring mvc+hibernate)——applicationContext.xml
  4. 简单了解线程和进程、多进程和多线程、并发和并行的区别
  5. SQL Server 自动化运维系列
  6. hpux 下查看内存的的大小的几种方法:
  7. 计算机创建文档教案,计算机基础知识教案
  8. mysql数据库简单查询试题_面试题: mysql数据库 已看1 简单的sql练习
  9. PHP代码中解决出现中文乱码的问题
  10. 1526B - I Hate 1111
  11. 【博弈论】耶鲁大学公开课--博弈论Problem Set 1--Solution
  12. 计算机网络常用五种编码方式,五种常见的基带数字编码方式
  13. Word复制表格样式变化问题
  14. 计算机二级access分数分布_计算机二级office题型及分值分布
  15. ASCII码对照表--符号/十进制/十六进制
  16. 育网云盘签约北京市大兴区黄村镇第一中心小学云端租赁服务
  17. Linux设备驱动编程第三版-笔记
  18. python读取图片的格式_python读取图片并修改格式与大小的方法
  19. 数字基建-高速公路智慧建造管控平台
  20. 你可能不了解的《唐诗三百首》

热门文章

  1. Nifi实时同步mysql_nifi实现数据库到数据库之间数据同步
  2. 经济寒冬之下如何逆袭?强烈推荐几位大牛!
  3. 戴尔venue11pro刷linux,科技教程:戴尔Venue11Pro测评
  4. Django 新建自定义用户后无法创建表的问题
  5. 新版H5小游戏管理平台系统+适用于商家活动
  6. win10找不到打印机_新版Windows 10的外设Bug:重启后找不到USB打印机端口
  7. 解读通往8K/3D VR直播之路
  8. 网站安全之——Cookie窃取和 Session劫持
  9. php serv u提权脚本,.NET/Perl/PHP 三个版本的 ServU提权程序 -电脑资料
  10. 横河川仪压力变送器故障代码_压力变送器常见故障及分析