aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究

内容摘要:基于信号到达角度(AOA)的定位算法是一种常见的无线传感器网络节点自定位算法,算法通信开销低,定位精度较高。由于各种原因,估测的多个节点位置可能存在不可靠位置,提出了一种改进的基于信号到达角的定位方法,通过过滤误差较大的估计位置,来提高定位的精度。仿真结果表明,本文提出的改进算法很好地提高了定位精度。

关键词:无线传感器网络;节点定位;到达角;估计位置过滤

近年来,随着无线通信、集成电路、传感器以及微电系统等技术的飞速发展和日益成熟,被誉为全球未来三大高科技产业之一的无线传感器网络(WSN,Wireless Sensor Network)引起了全世界范围的广泛关注。随着物联网概念的提出,作为其关键技术的传感器技术成为人们研究核心,随着无线传感器网络的应用逐渐深入到人们生活的方方面面,其核心支撑的节点定位技术也得到不断的改进、推广。

在WSN中,传感器节点随机分布在监测区域内,其中部分节点能够通过携带自身定位设备或人工部署的方式获得自身的精确位置,此类节点被称为锚节点(anchor node);其他未知节点(unknown node)只能根据锚节点位置按照某种定位机制估算出自身位置。锚节点所占的比例直接影响到传感器网络的造价。根据是否需要测距,节点定位算法分为两类:基于测距(range-based)的定位算法和无需测距(range-free)的定位算法。Range-free算法仅仅依靠网络连通性等信息就能够实现定位,其主要代表算法有质心算法(Centroid)、DVHop (Distance Vector-Hop)、凸规划(Convex)和APIT(Approximate Perfect Point In Tri-angulation Test)等,无需测距的定位算法对硬件的要求不高,但通常定位精度不高;基于测距的定位算法在定位过程中需要对节点间的角度信息或者距离等进行测量,其典型算法有接收信号强度法(RSSI,Rece ived Signal Strength InDICator)、信号传输时间法(TOA,Time of Arrival)、信号到达角法(AOA,Arrival of Angle)等,通过测量未知节点与锚节点之间的距离或角度信息,再运用三边测量法、三角测量法或最大似然估计法计算未知节点的位置信息。Range-based算法定位精度较高,但对无线传感器网络节点的硬件、成本有一定的要求,未来研究趋势是低成本、高能效的角度或距离测量技术及相关的定位算法。

基于信号到达角度的定位算法是一种典型的基于测距的定位算法,通过某些硬件设备感知发射节点信号的到达方向,计算接收节点和锚节点之间的相对方位或角度,然后再利用三角测量法或其他方式计算出未知节点的位置。本文首先介绍了典型的基于信号到达角度的节点定位算法,在此基础上,提出了一种改进的算法,即在对定位结果进行求精校正的阶段,通过选择过滤误差较大的估计位置,提高系统的定位精度,使最后的定位结果更加有效。

1 理论分析

1.1 基于信号到达角度的定位算法

算法第一步为测量阶段,即未知节点通过特殊设备测量得到在通信范围内的锚节点的信号到达角度信息。

第二步利用夹角射线原则解方程,计算未知节点的估计位置,假设未知节点P(x,y),测量A(x1,y)、B(x2,y2)两个锚节点的信号到达角度信息为α、β,解方程:

7b32053df9bed7e6f3a873fda9ad44bd.png

第3部进行求精校正。当未知节点通信半径内有多个锚节点时,将两个锚节点作为一组分成不同排列组合,其结果会有多个估计位置,将多个估计位置组成的几何图形的质心作为未知节点的最终估计位置。

算法的一般流程图如图1所示。

014477c93e20ce71f4be7a46d19f2691.png

1.2 估计位置过滤

当未知节点的通信半径内有多个锚节点时,对于任意不共线的两个锚节点都能确定一个估计位置,由于锚节点的选择问题,估计位置可能存在某些误差较大的点,将这些估计位置排除,会提高系统的定位精度。

过滤误差较大的估计位置的方法:假设有A(xa,ya),B(xb,yb),C(xc,yc),D(xd,yd),E(xe,ye)5个估计位置,首先计算任意两个估计位置间的距离为Sij(如表1所示),Sij=。

48dfb5fe660186d611a4beab51cec010.png

设定一个距离阈值d,且节点与自身的距离取为∞,当表中存在某一行的距离值均大于d时,认为该点为不可靠位置,不参与计算。若A、B、C、D为可靠位置,则将4个位置构成的几何图形的质心

cc41bfee61d1d6fc22bf67058ed419ba.png作为未知节点的最终估计位置。

基于上述思想,对原有算法最后一步进行了求精,即求多个估计位置的平均值时,排除了误差较大的位置,对算法进行了改进,为了陈述上的统一,对于改进后的算法称为基于信号到达角度的改进定位算法(Improved AOA LOCalization Algorithm for Wireless Sensor Net work,IAOA)。

算法的适用条件:

1)无线传感器网络节点部署在二维平面内,传感器节点都搭载有特殊硬件,可测得在通信半径内的邻居锚节点的信号到达的角度值。

2)只有当估计位置个数大于等于3个时,才进行估计位置的过滤。对于只有两个估计位置的,直接取两个点的中点作为节点的最后估计位置。当只有一个估计位置时,该位置则为节点的最终估计位置。

2 仿真分析

为检验改进算法的性能,用MATLAB仿真工具对基于信号到达角度的定位算法(AOA)和本文提出的算法(IAOA)进行仿真实验。

2.1 仿真环境设置

在100 mx100 m的监测区域内,随机部署传感器节点。传感器节点数目为N,锚节点数目为n,传感器节点的通信半径r,角度测量偏差△。

定位误差:节点实际位置和估计位置之间的距离。

定位覆盖率:能够进行定位的未知节点数与总的未知节点个数之比。

为了保证实验的准确性,针对不同情况,本文分别进行了多次仿真,观察、统计仿真结果,对多次结果求平均作为最后的评价结果。

取N=50,n=10,r=50,△=3°(基于射频的到达信号的角度测量标准偏差值在3°左右),d=0.08r,未知节点的定位误差如图2所示。

可见,IAOA的平均定位误差较小,算法的定位精度有了一定的提升。

599dea7bc500fdbd3c750db99c6cf210.png

2.2 节点通信半径对定位结果的影响

节点通信半径是直接影响算法定位效果的重要因素,节点的通信半径越大,覆盖的监测区域越大,未知节点的邻居锚节点数目就越多,定位的覆盖率和定位精度可能就越高,图3分别给出了节点通信半径在10~50时,两种算法的定位精度与定位覆盖率的情况。

从图3(a)可以看出,随着节点通信半径的增大,两种算法的定位误差都在逐渐下降,当r=30时,改进算法的定位精度明显高于原有算法。继续增大节点的通信半径,定位精度提升的效果不是很明显。图3(b)表明,改进算法的定位覆盖率与原算法基本一致,没有多少改进,由于必须有多个估计位置时,算法才对结果进行排除求精,所以算法仅仅是对定位精度进行了提升,并没有解决不能定位的盲区问题。因此,下文中将只针对定位精度对两种算法进行比较。

2.3 锚节点个数对定位精度的影响

一般来说,锚节点个数越多,未知节点监测到的锚节点数越多,定位覆盖率就越高,定位误差相对较小,定位性能就越好。但是,锚节点数量增多势必会增加网络的成本,两者之间的矛盾是不可避免的,实际情况下,在能够满足定位需求的前提下,锚节点数目应尽可能的少。下面将观察锚节点数量对算法定位精度的影响。

343a955ceaf2621e57bfa9f84fdc3781.png

由图4可见,随着锚节点个数的增加,算法的定位精度都有所提升,但是改进算法下降较快,定位精度较高;当锚节点个数达到20时,改进算法其定位精度趋于平缓。

2.4 节点密度对定位精度的影响

单位面积上部署的节点数量,称为节点密度。对于一定的监测区域,当节点密度高时,在通信半径相同的情况下,未知节点更容易被更多的锚节点监测到,定位精度相对较高。

实验中,节点的通信半径r固定不变,锚节点密度(锚节点与所有节点的比例)为10%,改变节点数量,观察实验结果。

06ad2b0f48126116ef2f8bb14a54c08c.png

图5表明,当网络监测区域不变时,随着网络中节点数目的增多,节点密度增大时,算法的定位精度都在提高,且改进算法依旧能有较好的定位精度,但是节点数目的增加势必会增大节点间的通信量,能耗也随之增加,因此,节点数目的选择应综合考虑,达到所需要的定位精度即可。

3 结论

文中提出的算法对基于信号到达角度的定位算法进行了改进,对最后的估计位置进行了选择滤除,仿真实验表明,本算法在定位精度方面与改进前方法有较大的提高,应用范围也更加广泛。但是改进算法对锚节点的密度有局限性,即网络内未知节点的邻居锚节点平均数目大于3时,算法才能体现出其优越性,所以改进算法不能有效解决网络中锚节点密度较低时,定位覆盖率低的问题,网络中不能定位的盲区问题还有待进一步研究。

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

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

相关文章

R语言-时间日期函数

R语言时间日期函数 1. 返回当前日期时间,有两种方式: Sys.time() date() 举例 format(Sys.time(), "%a %b %d %X %Y %Z")#[1] "周五 五月 06 14:17:40 2016 CST"format(Sys.time(), "%H:%M:%OS3")#[1] "14:17:40.6…

各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学

你家该大扫除了吗?如何打扫厨房可是个大问题厨房的卫生问题今天一一教你解决洗碗池洗碗池经常不擦,污渍会积得很厚,陈旧老污渍怎么清除呢?方法:白醋 用毛巾裹在水龙头上,倒上白醋。因为白醋具有腐蚀性&…

php按id获取整条数据库,Ajax取得数据库的json值,想通过id获取对应信息,但是都默认获取第一条了...

PHP<?PHP header("Content-Type: text/html; charsetutf-8");include(conn.php);//链接数据库$sql select id,article_name,check_box,radio_box,content,input_name,input_number,input_title,input_describe from article;$res mysqli_query($conn,$sql);$da…

服务器系统及软件常见漏洞

服务器系统及软件常见漏洞 漏洞名称允许Traceroute探测远端WWW服务支持TRACE请求远端WWW服务提供了对WebDAV的支持远端WEB服务器上存在/robots.txt文件远端VNC服务正在运行远端HTTP服务器类型和版本信息泄漏远端DNS服务允许递归查询远程代理服务器允许连接任意端口远程代理服务…

链式存储结构 php,【PHP 实现数据结构】链式队列

什么是链式队列队列是一种“先进先出”的存储结构,是一种特殊的线性表&#xff0c;于它只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。通常队列可以分为顺序队列和链式队列两种实现&#xff0c;顺序队列顾名思义就是采用顺序存储&#xff0…

base64_encode() 和 base64_decode() 8bit图片通过网络传输

一、为什么要使用base64编码&#xff1f; Base64是一种基于64个可打印字符来表示二进制数据的表示方法。 有些网络传送渠道并不支持所有的字节&#xff0c;例如传统的邮件只支持可见字符的传送&#xff0c;像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制…

图标圆角角度_UI设计中图标的规范及原则【附全套视频】

icon是一种图标格式&#xff0c;用于系统图标、软件图标等&#xff0c;这种图标扩展名为*.icon、*.ico。常见的软件或windows桌面上的那些图标一般都是ICON格式的。icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文件(WAR)的根的相对路…

设计模式(十一):从文Finder中认识组合模式(Composite Pattern)

上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern)&#xff0c;今天我们就从文件系统中来认识一下“组合模式”&#xff08;Composite Pattern&#xff09;。说到组合模式&#xff0c;在此我想聊一下在类图中有组合与聚合的关系&#xff0c;这两者都…

PHP7不能用string类名,解决thinkphp php7 Cannot use ‘String’ as class name as it is reserved...

我有一网站之前用php7运行thinkphp没有什么问题&#xff0c;但是最近发现开启验证码的时候发现有错误Cannot use String as class name as it is reserved在google baidu搜索了一下还是没有解决方法于是自己动手解决&#xff0c;看来我是第一个分享出来的人原因&#xff1a;有一…

python序列化对象的函数_使 Python 对象可序列化的函数

from copy import deepcopyfrom str import basestringdef enserializable(model):"""本函数用于将对象可序列化&#xff0c;且返回的字典都是新的(deepcopy)"""if isinstance(model, dict):model deepcopy(model)to_pop []for k in model:# 过…

Activity(二)

多个Activity之间的调用 建立一个Activity 配置layout文件夹下fragment_main.xml文件 在layout下新建other.xml文件 xml文件创建的id需要编译才能生成 在同一工程src文件夹下新建class文件 查找id并作关联 加入监听器&#xff0c;调用另一个Activity的类 调用监听器 注&#xf…

php用asp文件js,asp下用fso生成js文件的代码

asp下用fso生成js文件的代码更新时间&#xff1a;2008年06月24日 23:47:54 作者&#xff1a;asp下使用fso生成js代码的方法Set fso Server.CreateObject("Scripting.FileSystemObject")set fdfso.createtextfile(server.MapPath("../category.js"),true)…

relativelayout中按键不能点_CNC | M80/M800系列系统常见按键和外部存储器故障

一、按键无效现象1.操作人员对机床操作时画面无反应现象M80/M800系列系统在使用键盘或触摸屏输入时&#xff0c;请勿连击键盘按键&#xff0c;输入一 次即可。键盘每向NC输入一次&#xff0c;NC系统需要计算一次&#xff0c;连续的多次重复输入&#xff0c;NC多次重复计算、显示…

Problem J

Total Submission(s) : 102 Accepted Submission(s) : 60 Problem Description有一楼梯共M级&#xff0c;刚开始时你在第一级&#xff0c;若每次只能跨上一级或二级&#xff0c;要走上第M级&#xff0c;共有多少种走法&#xff1f;Input输入数据首先包含一个整数N&#xff0c…

百度AI人脸检测测颜值php,百度AI人脸识别测颜值源码app

百度AI人脸识别测颜值源码app是由百度AI官方提供的&#xff0c;将人脸识别分为了两个接口&#xff0c;v2与vv3。需要根据文档权限来选择接口类型&#xff0c;这款软件非常方便用户学习和体验。想要学习相关信息的朋友可以来看看哦。百度AI人脸识别测颜值介绍百度AI人脸识别测颜…

python3 换源_CentOS 7.5 下 python3 安装及 pip 换源

从EPEL仓库安装Python3CentOS 7.5 默认python2的环境,可使用yum直接安装python3,之后切换/bin中的python向python3,查看版本yum install python3 -yls -l /bin/pythonpython -Vrm /bin/pythonln -s /bin/python3 /bin/pythonpython -V此时pip仍为py2,可以使用pip3或python -m p…

php使用redis存储

一、Redis扩展模块 # wget https://codeload.github.com/phpredis/phpredis/zip/develop -O phpredis.zip # unzip phpredis.zip # cd phpredis-develop/ # /usr/local/php/bin/phpize # ./configure --with-php-config/usr/local/php/bin/php-config # make # make install 二…

vs2015如何连接oracle,VS2015中C#连接Oracle数据库

硬件环境&#xff1a;Win10 64位 VS2015 ODP.Net for VS2015配置ODP.NetOracle Developer Tools for Visual Studio 12.1.0.2.4 下载次文件Oracle Data Provider for .NET 4 12.1.0.2.0Oracle Providers for ASP.NET 4 12.1.0.2.0下载完成后运行MSI安装程序进行安装&#xff0…

sql数据导入错误代码: 0x80004005_PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR...

抛出异常Oracle有三种类型的异常错误&#xff1a;1&#xff0e; 预定义&#xff08;Predefined&#xff09;异常ORACLE预定义的异常情况大约有24个。对这种异常情况的处理&#xff0c;无需在程序中定义&#xff0c;由ORACLE自动将其引发。2&#xff0e; 非预定义&#xff08;Pr…

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

【转】作者&#xff1a;xwdreamer 出处&#xff1a;http://www.cnblogs.com/xwdreamer 对于指针和常量&#xff0c;有以下三种形式都是正确的&#xff1a; const char * myPtr &char_A;//指向常量的指针 char * const myPtr &char_A;//常量的指针 const char * con…