无线传感器网络实验指导书.docx

上传人:b****6 文档编号:7360514 上传时间:2023-01-23 格式:DOCX 页数:12 大小:90.75KB
下载 相关 举报
无线传感器网络实验指导书.docx_第1页
第1页 / 共12页
无线传感器网络实验指导书.docx_第2页
第2页 / 共12页
无线传感器网络实验指导书.docx_第3页
第3页 / 共12页
无线传感器网络实验指导书.docx_第4页
第4页 / 共12页
无线传感器网络实验指导书.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

无线传感器网络实验指导书.docx

《无线传感器网络实验指导书.docx》由会员分享,可在线阅读,更多相关《无线传感器网络实验指导书.docx(12页珍藏版)》请在冰豆网上搜索。

无线传感器网络实验指导书.docx

无线传感器网络实验指导书

无线传感器网络

实验指导书

 

 

信息工程学院

 

实验一质心算法

一、实验目的

掌握合并质心算法的基本思想;

学会利用MATLAB实现质心算法;

学会利用数学计算软件解决实际问题。

二、实验内容和原理

无需测距的定位技术不需要直接测量距离和角度信息。

定位精度相对较低,不过可以满足某些应用的需要。

在计算几何学里多边形的几何中心称为质心,多边形顶点坐标的平均值就是质心节点的坐标。

假设多边形定点位置的坐标向量表示为pi=(xi,yi)T,则这个多边形的质心坐标为:

 

例如,如果四边形ABCD的顶点坐标分别为(x1,y1),(x2,y2),(x3,y3)和(x4,y4),则它的质心坐标计算如下:

 

这种方法的计算与实现都非常简单,根据网络的连通性确定出目标节点周围的信标参考节点,直接求解信标参考节点构成的多边形的质心。

锚点周期性地向临近节点广播分组信息,该信息包含了锚点的标识和位置。

当未知结点接收到来自不同锚点的分组信息数量超过某一门限或在一定接收时间之后,就可以计算这些锚点所组成的多边形的质心,作为确定出自身位置。

由于质心算法完全基于网络连通性,无需锚点和未知结点之间的协作和交互式通信协调,因而易于实现。

三、实验内容及步骤

该程序在Matlab环境下完成无线传感器中的质心算法的实现。

在长为100米的正方形区域,信标节点(锚点)为90个,随机生成50个网络节点。

节点的通信距离为30米。

需完成:

分别画出不同通信半径,不同未知节点数目下的误差图,并讨论得到的结果

所用到的函数:

1.M=min(A)返回A最小的元素.

如果A是一个向量,然后min(A)返回A的最小元素.

如果A是一个矩阵,然后min(A)是一个包含每一列的最小值的行向量。

2.rand

X=rand返回一个单一均匀分布随机数在区间(0,1)。

X=rand(n)返回n--n矩阵的随机数字。

3.S=sum(A)返回A沿其大小不等于1的第一个数组维度的元素的总和。

如果A是一个向量,sum(A)可返回元素的总和。

如果A是一个矩阵,然后sum(A)返回一个行向量包含每个列的总和。

4.inf无穷大

此MATLAB函数返回正无穷大的IEEE算术表示。

除以零和溢出等操作会生成无穷值,从而导致结果因太大而无法表示为传统的浮点值

5.zeros-创建全零数组

X=zeros返回标量0.

X=zeros(n)-由-n矩阵的零返回n.

6.plot(X,Y)画出Y随X变化的2D曲线。

plot(X,Y,o)用o描述(X,Y)这一点。

7.n=norm(v)返回的2-范数或欧氏范数的向量v.

n=norm(v,p)返回向量范数定义的sum(abs(v)^p)^(1/p),这里p是任何正值,Inf或-Inf.

8.s=num2str(A)数值数组转换为字符数组输出,它表示的数字。

输出格式取决于原始值的大小。

num2str是用于标签和标题情节与数字值。

所用到的变量:

xy:

均匀分布的信标节点位置矩阵

n:

未知节点数量

SS:

未知节点位置矩阵

dm:

通信半径

cent:

质心

MM:

未知节点估计坐标矩阵

e:

估计位置和实际位置距离矩阵(误差)

四、源程序

clear

clc

%锚节点节点设置

fori=1:

1:

10%1到10,步长是1;画出锚点,前一个括号是标号。

forj=1:

1:

10

x(j+(i-1)*10)=(i-1)*10;

y(j+(i-1)*10)=(j-1)*10;

end

end

figure%出现图形界面

plot(x,y,'k.');%黑点

holdon%继续画图

axis([01000100]);

xy=[x;y];把X,Y的坐标付给矩阵XY

xy;

holdon

xm=90;

ym=90;

n=50;%未知节点

fori=1:

1:

n

Sx(i)=rand(1,1)*xm;%产生一个一行一列的矩阵;依然是0-1中任意一个值。

Sy(i)=rand(1,1)*ym;

plot(Sx(i),Sy(i),'r*');%红星

xlabel('x轴');

ylabel('y轴');

holdon

end

dm=30;%通信半径

m=100;一共100个点;

forj=1:

1:

n%未知节点循环;每一个未知节点都与在通讯范围内所有的锚点算一遍距离,放到一个矩阵中,通讯距离以外的点为零。

SS=[Sx(j);Sy(j)];

k=0;%表示通信半径内的信标节点数

fori=1:

1:

m

d=norm((xy(:

i)-SS),2);%2范数就是求直线距离;不管行,第i列;

ifd<=dm是否在范围内,取出信标节点,放到XX,yy中

xx(j,i)=xy(1,i);第1行第i列;%X坐标都给了XX

yy(j,i)=xy(2,i);第2行第i列;

k=k+1;

else

xx(j,i)=0;

yy(j,i)=0;

end

end

ifk~=0%k不等于零

cent(:

j)=[sum(xx(j,:

));sum(yy(j,:

))]/k;%第j行的所有列

else

cent(:

j)=0;令第j列的所有元素为零。

end

plot(cent(1,j),cent(2,j),'o');

holdon

plot([cent(1,j)Sx(j)],[cent(2,j)Sy(j)],'R--');%估计位置和真实位置连接

title('Centroid');

holdon

MM=[cent(1,j);cent(2,j)];

e(j)=norm((MM-SS),2);%定位误差

end

%figure/dm

%axis([0n01])

%j=1:

1:

n

%plot(j,e(j),'-r.')

%holdon

%title('Centroid')

%E=sum(e)/n

E=sum(e)/(n*dm);

disp(['定位误差=',num2str(E)]);%将结果转换成字符串输出

 

实验二DV-hop算法

一、实验目的

掌握DV-hop算法的基本思想;

学会利用MATLAB实现DV-hop算法;

学会利用数学计算软件解决实际问题。

二、实验内容和原理

DV-Hop算法解决了低锚点密度引发的问题,它根据距离矢量路由协议的原理在全网范围内广播跳数和位置。

已知锚点L1与L2、L3之间的距离和跳数。

L2计算得到校正值(即平均每跳距离)为(40+75)/(2+5)=16.42m。

假设传感器网络中的待定位节点A从L2获得校正值,则它与3个锚点之间的距离分别是L1=3×16.42,L2=2×16.42,L3=3×16.42,然后使用多边测量法确定节点的位置。

 

图1DVhop算法示意图

三、实验内容及步骤

该程序在Matlab环境下完成无线传感器中的DV-Hop算法的实现。

在长为100米的正方形区域,随机生成100个网络节点,其中信标节点(锚点)为8个,未知坐标节点为92个。

节点的通信距离为50米。

可算出最短路经算法计算节点间跳数、每个信标节点的校正值并可用用跳数估计距离。

(1000-1000,300个节点,60个信标节点)

所用到的函数:

参见上节:

质心算法;

需完成:

1)运行程序,生成随机分布的节点;

2)更正程序中的错误,求每个信标节点的校正值;

3)继续运行程序,利用跳数估计待求节点的距离。

四、源程序

%~~~~~~~~~~DV-Hop算法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

%BorderLength-----正方形区域的边长,单位:

m

%NodeAmount-------网络节点的个数

%BeaconAmount---信标节点数

%Sxy--------------用于存储节点的序号,横坐标,纵坐标的矩阵

%Beacon----------信标节点坐标矩阵;BeaconAmount*BeaconAmount

%UN-------------未知节点坐标矩阵;2*UNAmount

%Distance------未知节点到信标节点距离矩阵;2*BeaconAmount

%h---------------节点间初始跳数矩阵

%X---------------节点估计坐标初始矩阵,X=[x,y]'

%R------------------节点的通信距离,一般为10-100m

clear,closeall;

BorderLength=100;

NodeAmount=100;

BeaconAmount=8;

UNAmount=NodeAmount-BeaconAmount;

R=50;

%D=zeros(NodeAmount,NodeAmount);%未知节电到信标节点距离初始矩阵;BeaconAmount行NodeAmount列

h=zeros(NodeAmount,NodeAmount);%初始跳数为0;NodeAmount行NodeAmount列

X=zeros(2,UNAmount);%节点估计坐标初始矩阵

%~~~~~~~~~在正方形区域内产生均匀分布的随机拓扑~~~~~~~~~~~~~~~~~~~~

C=BorderLength.*rand(2,NodeAmount);

%带逻辑号的节点坐标

Sxy=[[1:

NodeAmount];C];%将1-NodeAmount与C上下合到一起,产生一个总矩阵。

Beacon=[Sxy(2,1:

BeaconAmount);Sxy(3,1:

BeaconAmount)];%信标节点坐标

UN=[Sxy(2,(BeaconAmount+1):

NodeAmount);Sxy(3,(BeaconAmount+1):

NodeAmount)];%未知节点坐标

%画出节点分布图

plot(Sxy(2,1:

BeaconAmount),Sxy(3,1:

BeaconAmount),'r*',Sxy(2,(BeaconAmount+1):

NodeAmount),Sxy(3,(BeaconAmount+1):

NodeAmount),'k.')

xlim([0,BorderLength]);

ylim([0,BorderLength]);

title('*红色信标节点.黑色未知节点')

%~~~~~~~~~~~~~~~~~~~~~~~~~~~~初始化节点间距离、跳数矩阵~~~~~~~~~~~~~~~~~~~~~~

fori=1:

NodeAmount

forj=1:

NodeAmount

Dall(i,j)=((Sxy(2,i)-Sxy(2,j))^2+(Sxy(3,i)-Sxy(3,j))^2)^0.5;%所有节点间相互距离

if(Dall(i,j)<=R)&(Dall(i,j)>0)

h(i,j)=1;%初始跳数矩阵

elseifi==j

h(i,j)=0;%自己到自己的距离

elseh(i,j)=inf;

end

end

end

%~~~~~~~~~~~最短路经算法计算节点间跳数~~~~~~~~~~~~~~~~~~~~

fork=1:

NodeAmount

fori=1:

NodeAmount

forj=1:

NodeAmount

ifh(i,k)+h(k,j)

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

end

end

end

end

h

%~~~~~~~~~~~~~求每个信标节点的校正值~~~~~~~~~~~~~~~~~~~~~~~~~~

h1=h(1:

BeaconAmount,1:

BeaconAmount);%从大矩阵中取出信标节点的跳数

D1=Dall(1:

BeaconAmount,1:

BeaconAmount);%从大矩阵中取出信标节点的距离

fori=1:

BeaconAmount

dhop(i,1)=sum(D1(i,:

))/sum(h1(i,:

));%每个信标节点的平均每跳距离

end

D2=Dall(1:

BeaconAmount,(BeaconAmount+1):

NodeAmount);%新标节点与未知节点的距离,逗号前面是行的范围,后面是列的范围。

fori=1:

BeaconAmount

forj=1:

UNAmount

ifmin(D2(:

j))==D2(i,j)

Dhop(1,j)=dhop(i,j);%未知节点从最近的信标获得校正值

end

end

end

Dhop

%~~~~~~~~~~~~~~~~用跳数估计距离~~~~~~~~~~~~~~~~~~~

hop1=h(1:

BeaconAmount,(BeaconAmount+1):

NodeAmount)%未知节点到信标跳数,BeaconAmount行UNAmount列

fori=1:

UNAmount

hop=Dhop(1,i);%hop为从最近信标获得的校正值

Distance(:

i)=hop*hop1(:

i);%%Beacon行UN列;

end

%%~~~~~~~~~~~~~最小二乘法求未知点坐标~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

d=Distance;

fori=1:

2

forj=1:

(BeaconAmount-1)

a(i,j)=Beacon(i,j)-Beacon(i,BeaconAmount);

end

end

%a为第一个信标节点和最后一个信号节点的坐标差值,保留最后一个信标节点

%a'

A=-2*(a');

%d=d1';

form=1:

UNAmount

fori=1:

(BeaconAmount-1)

B(i,1)=d(i,m)^2-d(BeaconAmount,m)^2-Beacon(1,i)^2+Beacon(1,BeaconAmount)^2-Beacon(2,i)^2+Beacon(2,BeaconAmount)^2;

%前九个信标节点到未知节点的距离平方

%最后信标节点到未知节点的距离平方

%前九个信标节点横坐标平方

%最后信标节点到未知节点的横坐标平方

%前九个信标节点纵坐标平方

%最后信标节点纵坐标平方

end

X1=inv(A'*A)*A'*B;%inv是求逆矩阵

X(1,m)=X1(1,1);

X(2,m)=X1(2,1);

end

%X为估计的未知节点位置

fori=1:

UNAmount

error(Z,i)=(((X(1,i)-UN(1,i))^2+(X(2,i)-UN(2,i))^2)^0.5);%估计出的信号位置到实际位置间的距离

end

avgerror(Z)=sum(error(Z,:

))/UNAmount;%平均错误

Accuracy(Z)=avgerror(Z)/R;%节点精确度

R=R+10;

end

%%~~~~~~~~~~~~~~~~~~~~~~~~画出节点精确度图~~~~~~~~~~~~

%Accuracy

figure;plot(20:

10:

90,Accuracy,'-o')

xlabel('通信半径/m');

ylabel('定位精度/100%');

title('节点精确度');

D

D

D

D

D

U

U

U

U

U

D

D

D

D

D

U

U

U

U

U

D

D

D

D

D

U

U

U

U

U

U

U

U

U

U

U

U

U

U

U

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1