物联网定位技术|实验报告|实验二 多边定位算法、DV-HOP算法

news2024/11/15 13:29:43
 

在WSN定位中常常采用三边定位算法,试画图推导三边定位的计算公式,并表示为矩阵形式。


目录

1. 实验目标

2. 实验要求

3. 算法介绍

3.1基本内容介绍

3.2迭代多边定位算法

 3.3 DV-HOP算法

4. 算法实现

4.1迭代多边定位算法

第一步:将数据读入内存

第二步:判断锚节的个数

第三步:初始化距离矩阵

第四步:迭代计算

核心代码

(1)计算未知节点位置

(2)更新锚节点、非锚节点集合以及距离矩阵

第五步:计算误差,输出结果

4.2 DV-HOP算法

第一步:将数据读入内存

第二步:判断锚节的个数

第三步:将所有的两点间的距离关系读入距离矩阵

第四步:利用最短路径算法求得两点间的最短路径

第五步:求每个信标节点的校正值

第六步:未知节点计算位置

第七步:计算误差,输出结果​​​​​​​

5.实验结果和分析

5.1 迭代多边定位算法

1、实验结果

2、误差分析

5.2DV-HOP算法

1、实验结果

2、误差分析


物联网定位技术

实验报告

学生姓名

白**

学    号

2008070101

专业班级

物联201

指导老师

曾**

学    院

信息学院

完成时间

2023年3月23日

实验2  多边定位算法、DV-HOP算法

1. 实验目标

 了解典型的无线传感器网络定位算法

 在所给的网络中实现所讲授的无线传感器网络定位算法并进行比较

2. 实验要求

掌握典型的无线传感器网络定位算法基本原理,理解多边定位算法、DV-HOP算法

利用所给的网络数据,实现两种以上的定位算法并进行比较

3. 算法介绍

3.1基本内容介绍

    在本次实验中,共有四个已知的.txt文件,分别命名为:net1_pos.txt、net1_topo_error_free.txt、net1_topo_error_5以及net1_topo_error_10。

        其中,文件net1_pos中给出了实验网络中节点的位置数据。每行表示一个节点的位置信息。格式如下:

        节点序号  节点x坐标 节点y坐标 是否锚节点(1代表锚节点,0代表待定位节点),比如:

                   1         17.8977   106.2282      1

        表示节点1, 其真实位置为(17.8977,106,2282),该节点是锚节点。再比如:

        33   43.4718   95.7603         0

        表示节点33,其真实位置是(43.4718,95.7603),该节点是待定位节点。利用某种定位算法计算出来待定位节点的位置后,就可以根据真实位置计算该节点的定位误差。

         文件 net1_topo_error_free中给出了网络中相邻节点之间的距离信息。每一行表示两个节点之间的距离。格式如下:

        节点1序号  节点2序号 节点之间距离测量值。比如:

               1                  4                   8.3075

        表示节点1和节点4可以相互测量出之间的距离,他们之间的距离是8.3075;

        文件net1_topo_error_5和net1_topo_error_10给出的距离分别是增加了5%10%误差之后的扰动值。

3.2迭代多边定位算法

        算法思想:利用已知信标节点和非信标节点的几组对应关系(两点间距离),对非信标节点进行定位。(某个非信标节点只要已知3个及以上信标节点与其距离即可对其进行定位。)定位成功后的非信标节点转换为信标节点,可辅助对其他非信标节点定位。不断迭代定位过程,知道信标节点集合元素个数在前后两次迭代中数量不变,则迭代终止。

        前提条件:已知位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点

        特别说明:因为在使用迭代多边定位算法对未知节点进行定位时需要利用该节点与3个以上信标节点的直线距离,图是连通图但不是全连通图,所以可能会有部分节点无法定位。

 3.3 DV-HOP算法

         算法思想:先用Floyd算法将图的最短路径和每两个节点间的最小跳数表示出来,将特定位置的节点到参考节点的距离用网络中的节点的平均每跳距离和节点之间的跳数乘积表示,使用三角形定位的方法来获得节点的位置节点。

          前提条件:已知位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点。

          特别说明:图是否为连通图对于迭代多边算法影响可能不会很大,但是在DV-HOP算法中,如果有孤立节点,则会导致程序出错。

4. 算法实现

4.1迭代多边定位算法

第一步:将数据读入内存

        利用Matlab中已有的函数load将文件中的内容以矩阵的方式读入内存。

Data_post = load('net1_pos.txt');

Data_road1 = load('net1_topo-error free.txt');

Data_road2 = load('net1_topo-error 5.txt');

Data_road3 = load('net1_topo-error 10.txt');

culunm_post = size(Data_post);

第二步:判断锚节的个数

tempcount = 0;

for i = 1:culunm_post(1)

    if Data_post(i,4) == 1

        tempcount = tempcount+1;

    end

end

if tempcount < 3

    disp('锚节点少于3个,DV-hop算法无法执行');

        return;

end

第三步:初始化距离矩阵

        将与锚节点有关的路径读入距离矩阵,先将距离矩阵全部赋值为无穷大,再将每个节点到自身的距离规定为0,在边的信息中,如果有端点为锚节点的,就更新其两点间的距离。

    for i = 1:culunm_road(1)

        if(Data_road(i,1) <= anchors_n)

            matrix(Data_road(i,1),Data_road(i,2)) = Data_road(i,3);

        elseif(Data_road(i,2) <= anchors_n)

            matrix(Data_road(i,2),Data_road(i,1)) = Data_road(i,3);

        end

    end

第四步:迭代计算

        逐一判断每一个非信标节点是否有3个以上锚节点与其相关,如果有3个以上的信标节点与其相关则根据:

        其中x,y为未定位的节点的实际位置(x1,y1),(x2,y2),……是已知的锚节点到该未知节点的距离。

        根据以上两个矩阵的转换,可以求得:,其中x为一个一行两列的矩阵,分别表示未知节点定位后的坐标位置x,y。

         定位成功后,把该点的标号加入锚节点集合中并从非锚节点集合中删除,并在距离矩阵中加入与该节点相关的边的信息。

        不断迭代运行第四步,直至锚节点集合中元素个数不再变化。

核心代码

(1)计算未知节点位置

point = temp(1,3)^2 - temp(1,1)^2 - temp(1,2)^2;

for ii = 2:k-1

A(ii-1,:) = 2*[temp(1,1) - temp(ii,1) temp(1,2) - temp(ii,2)];

b(ii-1,:) = [temp(ii,3)^2 - temp(ii,1)^2 - temp(ii,2)^2 - point];

end

Ans = inv(transpose(A)*A)*transpose(A)*b;    

estimated(j,1) = Ans(1,1);

estimated(j,2) = Ans(2,1);

(2)更新锚节点、非锚节点集合以及距离矩阵

anchors_n_t = anchors_n_t + 1;

anchors(anchors_n_t) = j;

Locate=find(all == j);

all(Locate) = [];

for m = 1:culunm_road(1)

if(Data_road(m,1) == j)

matrix(Data_road(m,1),Data_road(m,2)) = Data_road(m,3);

elseif(Data_road(m,2) == j)

matrix(Data_road(m,2),Data_road(m,1)) = Data_road(m,3);

end

end

第五步:计算误差,输出结果

4.2 DV-HOP算法

第一步:将数据读入内存

利用Matlab中已有的函数load将文件中的内容以矩阵的方式读入内存。

第二步:判断锚节的个数

第三步:将所有的两点间的距离关系读入距离矩阵

for i =1:culunm_road(1)

matrix(Data_road(i,1),Data_road(i,2)) = Data_road(i,3);

matrix(Data_road(i,2),Data_road(i,1)) = Data_road(i,3);

end

shortest_path = matrix;

第四步:利用最短路径算法求得两点间的最短路径

for k=1:nodes_n

   for i=1:nodes_n

       for j=1:nodes_n

           if shortest_path(i,k)+shortest_path(k,j)<shortest_path(i,j)

             shortest_path(i,j) = shortest_path(i,k)+shortest_path(k,j);

             jump_n(i,j) = jump_n(k,j);

           end

       end

   end

End

第五步:求每个信标节点的校正值

        利用函数:

anchor_to_anchor=shortest_path(1:anchors_n,1:anchors_n);

for i=1:anchors_n

   hopsize(i)=sum(sqrt(sum(transpose((repmat(true(i,:),anchors_n,1)...

              - true(1:anchors_n,:)).^2))))/sum(anchor_to_anchor(i,:));

End

第六步:未知节点计算位置

        先通过距离=跳数*校正值求得未知节点到每个锚节点的距离,再根据最小二乘法计算具体位置。

obtained_hopsize=hopsize(find(shortest_path(i,1:anchors_n)==...

     min(shortest_path(i,1:anchors_n))));        unknown_to_anchors_dist=transpose(obtained_hopsize(1)*...

     shortest_path(i,1:anchors_n));

A=2*(estimated(1:anchors_n-1,:)-repmat(estimated(anchors_n,:),...

     anchors_n-1,1));

anchors_location_square=transpose(sum(transpose...

     (estimated(1:anchors_n,:).^2)));

dist_square=unknown_to_anchors_dist.^2;

b=anchors_location_square(1:anchors_n -1)-...

    anchors_location_square(anchors_n)-dist_square(1:anchors_n-1)+..

          dist_square(anchors_n);

estimated(i,:)=transpose(A\b);

第七步:计算误差,输出结果

5.实验结果和分析

5.1 迭代多边定位算法

1、实验结果

(1)无扰动值时的迭代多边定位算法

        说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置。

(2)5%误差扰动值时的迭代多边定位算法

        说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置,蓝色连线表示某个节点实际位置与估计位置的误差。

(3)10%误差扰动值时的迭代多边定位算法

         说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置,黄色连线表示某个节点实际位置与估计位置的误差。

2、误差分析

         三次定位中,误差(方差)分别为:0.00034774693255881、3.12382496620916、5.57479034010724。

         可以看出,随着扰动比例的不断提高,该算法的定位精准度在不断下降。这是由于迭代多边定位算法是通过取N和圆的交点来进行定位的,一旦出现了扰动,将改变两点间的距离,使得用于定位的部分圆半径不正确,出现定位不准确或定位点不合实际的情况。

5.2DV-HOP算法

1、实验结果

         说明:蓝色“*”表示已知点的数据,红色圆点表示无扰动值时估计数据,蓝色圆点表示5%扰动值时估计数据,黄色圆点表示10%扰动值时估计数据,连线表示误差情况。

2、误差分析

         三次定位中,误差(方差)分别为:8.37509461994741、8.68160286181840、8.64112751102005。

         可以看出,DV-HOP在有扰动值的情况下误差变化不大,但是定位也不是很准确,误差在1以内的点极少,几乎每个点都存在误差。 

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

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

相关文章

STM32HAL库USART外设配置流程及库函数讲解

HAL库中USART外设配置流程及库函数讲解 一说到串口通信&#xff0c;及必须说一下aRS-232/485协议。232协议标准物理接口就是我们常用的DB9串口线 RS-232电平&#xff1a; 逻辑1&#xff1a;-15~-3 逻辑0&#xff1a; 3~15 COMS电平&#xff1a; 逻辑1&#xff1a;3.3 逻辑0&a…

文件操作【下篇】

文章目录 &#x1f5c3;️5.文件的随机读写&#x1f4c1;5.1. fseek&#x1f4c1;5.2. ftell&#x1f4c1;5.3. rewind &#x1f5c3;️6.文本文件和二进制文件&#x1f5c3;️7.文件读取结束的判定&#x1f4c1;7.1. 被错误使用的 feof &#x1f5c3;️8.文件缓冲区 &#x1f…

如何使用YOLOv8推荐的Roboflow来制作训练自己的数据集

YOLOv8是Ultralytics开发的YOLO目标检测和图像分割模型的最新版本&#xff0c;相较于之前的版本&#xff0c;YOLOv8可以更快速有效地识别和定位图像中的物体&#xff0c;以及更准确地分类它们。 YOLOv8需要大量的训练数据来实现最佳性能。为了让YOLOv8能够有效地识别自己的应用…

【UE】保存游戏的demo

效果 注意左上角的打印信息&#xff0c;每当我按下k键&#xff0c;值就加1。当我关闭后重进游戏&#xff0c;按下k键&#xff0c;值是从上次退出游戏的值开始累加的。 步骤 1.新建蓝图&#xff0c;父类为“SaveGame” 命名为“MySaveGame”并打开 新建一个整型变量&#xff0c…

ODOO业财一体贸易行业ERP全面管理系统(核心流程简介)

前言&#xff1a; 贸易行业的两大管理难点在&#xff1a; 1.订单的跟踪效率&#xff1a;订单从报价、寄样、采购材料、委外加工、质检、入库、出库、收款&#xff0c;跟踪环节多&#xff0c;信息分散&#xff0c;跟单员难以把握订单执行进度&#xff0c;因此也导致延期交货等…

户外电源强制国标发布或加速行业洗牌 未来产品将往大容量及轻量化发展

一、户外电源行业概述 户外电源是一种内置锂离子电池的低碳绿色小型储能设备&#xff0c;又称“大号充电宝”、“便携式储能”。是电化学储能的分支&#xff0c;优在“便捷”&#xff0c;具有多次循环充放电、适配广泛、安全便捷的特点&#xff0c;在户外各场景中应用广泛受到…

Ubuntu安装k8s的Dashboard

介绍 Dashboard 是基于网页的 Kubernetes 用户界面。您可以使用 Dashboard 将容器应用部署到Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群本身及其附属资源。您可以使用Dashboard 获取运行在集群中的应用的概览信息&#xff0c;也可以创建或者…

从Allegro进行反标

从Allegro进行反标 目的反标流程常见问题 目的 通过反标&#xff0c;可以将Allegro中交换的管脚或重新编排的位号&#xff0c;一键更新到原理图中。 反标流程 从Capture输出最新网表文件&#xff1a; Capture Menu -> Tools -> Creat Netlist将最终的PCB设计文件放在…

Java:MybatisPlus--条件构造器

1、条件构造器类别 ①wrapper&#xff1a;抽象类&#xff0c;条件类的顶层&#xff0c;提供了一些获取和判断相关的方法。 ②AbstractWrapper&#xff1a;抽象类&#xff0c;Wrapper的子类&#xff0c;提供了所有的条件相关方法。 ③AbstractLambdaWrapper&#xff1a;抽象类…

对矩阵规模序列<5,10,3,12,5,50,6>,求矩阵链最优括号化方案

对矩阵规模序列<5,10,3,12,5,50,6>,求矩阵链最优括号化方案 理解符号的含义 n6 矩阵A1A2A3A4A5A6 本质是找一个最优的子结构 1.重要的递推公式 2.关键是求最小的m[i,j]就是乘积次数最少的。 k 的位置只有 j − i 种可能 3.下面是详细的解题的方案 根据矩阵链乘法问题&am…

网络工程师经常搞混的路由策略和策略路由,两者到底有啥区别?

当涉及到网络路由时&#xff0c;两个术语经常被混淆&#xff1a;策略路由和路由策略。虽然这些术语听起来很相似&#xff0c;但它们实际上有着不同的含义和用途。在本文中&#xff0c;我们将详细介绍这两个术语的区别和应用。 一、路由策略 路由策略是指一组规则&#xff0c;用…

算法套路九——二叉树广度优先遍历(层序遍历)

算法套路九——二叉树广度优先遍历&#xff08;层序遍历&#xff09; 算法示例LeetCode102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 法一&#xff1a;双数组…

二极管初识

二极管初识 二极管的主要参数如下&#xff1a; 一般的二极管可以在正向或反向偏置条件下工作。 当二极管正向偏置时&#xff0c;需要经过一定的电压降&#xff08;硅为0.7V&#xff0c;锗为0.3V&#xff09;&#xff0c;才能让电流开始流动。此后&#xff0c;二极管上的电压…

【Vue】学习笔记-绑定样式/条件样式

绑定样式/条件样式 绑定样式条件渲染 绑定样式 class样式 写法 :class"xxx" xxx可以是字符串&#xff0c;对象&#xff0c;数组 字符串写法适用于&#xff1a;类名不确定&#xff0c;要动态获取。 对象写法适用于&#xff1a;要绑定多个样式&#xff0c;个数不确定&…

如何给ClickHouse表生成随机真实测试数据

学习ClickHouse数据库&#xff0c;通常需要下载官网一些示例数据。我们也可以通过内置函数generateRandom快速生成测试数据&#xff0c;从而测试学习一些特性的性能及底层原理。 函数语法 generateRandom函数基于给定schema生成随机数据&#xff0c;用于填充测试表。不是所有类…

【SSM】SpringMVC(三:SpringMVC拦截器)

文章目录 1. 登录案例2. 拦截器2.1 应用2.2 拦截器的执行原理2.3 拦截器执行的时机2.4 拦截器的实现方法2.5 拦截器的实现步骤2.6 开发拦截器 1. 登录案例 【login.jsp】 <%--Created by IntelliJ IDEA.User: BeyongDate: 2023/4/17Time: 11:43To change this template use…

【虹科】深度相机对比测评:虹科HK OAK-D Pro VS 英特尔RealSense D435i

虹科致力于为用户提供最优的机器视觉解决方案。本文将用虹科的AI深度相机与英特尔的深度相机来做图像的对比测试&#xff0c;那么它们有哪些性能差异呢&#xff1f; 虹科深度相机 HK OAK-D Pro有两个核心功能&#xff1a;红外激光点阵投影仪和红外照明LED。 红外激光点阵投影…

不能使用chatGPT?这3个平替甚至比chatGPT更强

不能使用chatGPT&#xff1f;这3个平替甚至比chatGPT更强 chatGPT&#xff0c;一款由OpenAI开发的新型AI聊天机器人&#xff0c;正在势如破竹地改变着许多人的工作和生活方式。作为一款基于大语言模型的聊天机器人&#xff0c;chatGPT能够理解自然语言并进行人机对话。与传统的…

SeeThroughNet:通过保留类概率信息来恢复辅助损失

文章目录 SeeThroughNet: Resurrection of Auxiliary Loss by Preserving Class Probability Information摘要本文方法Class Probability Preserving PoolingSeeThroughNet SeeThroughNet: Resurrection of Auxiliary Loss by Preserving Class Probability Information 摘要 …

华为OD机试真题(Java),计算最大乘积(100%通过+复盘思路)

一、题目描述 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c; 如果没有符合条件的两个元素&#xff0c;返回0。 二、输入描述 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 < 数组长度<100&am…