当前位置:文档之家› 无线传感器网络实验指导书

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

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

信息工程学院 实验一 质心算法 一、实验目的 掌握合并质心算法的基本思想; 学会利用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矩阵的随机数字。

12341234,,44xxxxyyyyxy



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 %锚节点节点设置 for i=1:1:10%1到10,步长是1;画出锚点,前一个括号是标号。 for j=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.'); %黑点 hold on %继续画图 axis([0 100 0 100]); xy=[x;y];把X,Y的坐标付给矩阵XY xy; hold on

xm=90; ym=90; n=50; %未知节点 for i=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轴'); hold on end dm=30 ;%通信半径 m=100; 一共100个点; for j=1:1:n%未知节点循环;每一个未知节点都与在通讯围所有的锚点算一遍距离,放到一个矩阵中,通讯距离以外的点为零。 SS=[Sx(j);Sy(j)]; k=0;%表示通信半径的信标节点数 for i=1:1:m d=norm((xy(:,i)-SS),2);%2数就是求直线距离;不管行,第i列; if d<=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 if k~=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') ; hold on plot([cent(1,j) Sx(j)],[cent(2,j) Sy(j)],'R--') ;%估计位置和真实位置连接 title('Centroid'); hold on MM=[cent(1,j);cent(2,j)]; e(j)=norm((MM-SS),2); %定位误差 end % figure/dm % axis([0 n 0 1]) % j=1:1:n % plot(j,e(j) ,'-r.') % hold on % 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,然后使用多边测量法确定节点的位置。

图1 DV hop 算法示意图 三、实验容及步骤 该程序在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,close all; 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('* 红色信标节点 . 黑色未知节点') %~~~~~~~~~~~~~~~~~~~~~~~~~~~~初始化节点间距离、跳数矩阵~~~~~~~~~~~~~~~~~~~~~~ for i=1:NodeAmount for j=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;%初始跳数矩阵

相关主题