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,一经查实,立即删除!

相关文章

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

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

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…

图标圆角角度_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;这两者都…

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多次重复计算、显示…

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…

腾讯视频过滤广告简略办法

转载于:https://www.cnblogs.com/rgqancy/articles/5485409.html

Linux系统查看系统硬件,linux怎么查看系统硬件信息

有时候想查看电脑中的系统硬件信息不知道怎么办下面是学习啦小编带来的关于linux怎么查看系统硬件信息的内容&#xff0c;欢迎阅读!linux怎么查看系统硬件信息?查看cpu&#xff1a;lscpu命令&#xff0c;查看的是cpu的统计信息.blueblue-pc:~$ lscpuArchitecture: i686 #cpu架…

designer pyqt5 界面切换_PyQt5快速上手基础篇3-设置窗口标题和图标

前言本节我们为QT Designer生成的UI界面添加图标和窗口标题。一、实例运行1. QT Designer设计UI打开designer.exe,使用默认的Main Window创建&#xff0c;直接点击Create按钮即可设计UI图如下&#xff0c;并保存为test.ui2 将test.ui转换为ui_test.py进入ui_test.py目录&#x…

linux系统gpu test,轻量级显卡测试软件GpuTest 0.4.0版下载,支持windows Linux MAC-站长资讯中心...

说到显卡测试&#xff0c;我们一定会想到3D Mark&#xff0c;可是看着3D Mark那几百兆的大小和小水管的网速&#xff0c;有没有轻量级的测试软件呢&#xff1f;GpuTest就是一款十分小巧的软件&#xff0c;这是一款基于OpenGL的显卡压力测试软件&#xff0c;GpuTest还是一款跨平…

pandas 合并所有列_Python学习:Pandas库

pandas包含数据结构和数据处理工具的设计使得在Python中进行数据清洗和分析非常快捷。pandas经常是和NumPy,Scipy以及数据可视化工具matplotlib一起使用的。pandas支持大部分NumPy语言风格的数组计算&#xff0c;但最大的不同在于pandas是用于处理表格型或异质型数据的。而NumP…

进程和多线程

一、进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的&#xff0c;每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ、Xcode&#xff0c;系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线…

CUMT--Java复习--网络编程

目录 一、Java网络API 1、InetAddress类 2、URL类 3、URLConnection类 4、URLDecoder类和URLEncoder类 二、基于TCP的网络编程 1、Socket类 2、ServerSocket类 三、网络通信过程 一、Java网络API Java中有关网络方面的功能都定义在java.net中。 1、InetAddress类 Jav…

iOS懒加载

1.懒加载基本 懒加载——也称为延迟加载&#xff0c;即在需要的时候才加载&#xff08;效率低&#xff0c;占用内存小&#xff09;。所谓懒加载&#xff0c;写的是其getter方法。说的通俗一点&#xff0c;就是在开发中&#xff0c;当程序中需要利用的资源时。在程序启动的时候不…

【Django】Django Debug Toolbar调试工具配置

正在发愁怎么调试Django&#xff0c;就遇到了Django Debug Toolbar这个利器。 先说遇到的问题&#xff1a; 网上也有教程&#xff0c;不过五花八门的&#xff0c;挨个尝试了一遍&#xff0c;也没有成功运行。最后终于找到问题所在&#xff1a; 从开发服务器日志可知&#xff1a…

python中提取pdf文件某些页_人工智能|Python提取PDF中的文本并朗读

题前的话之前有老师在群里推荐这个&#xff0c;我看了一眼觉得还是蛮有趣的&#xff0c;然后就忘了……昨天又看到这个《宅男福利&#xff01;我50行Python代码让小姐姐给你读Pdf》&#xff0c;今天于是开始自己尝试&#xff0c;谁知道pdfplumber库怎么也安装不了&#xff0c;最…

[UVA315]Network(tarjan, 求割点)

题目链接&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem251 求割点&#xff0c;除了输入用strtok和sscanf处理输入以外&#xff0c;对于求割点的tarjan算法有了进一步理解。 特别注意88行&#xff0…