资源描述:
《无线传感器网络实验指导书.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、无线传感器网络实验指导书信息工程学院实验一质心算法一、实验目的掌握合并质心算法的基本思想;学会利用MATLAB实现质心算法;学会利用数学计算软件解决实际问题。二、实验容和原理无需测距的定位技术不需要直接测量距离和角度信息。定位精度相对较低,不过可以满足某些应用的需要。在计算几何学里多边形的几何中心称为质心,多边形顶点坐标的平均值就是质心节点的坐标。假设多边形定点位置的坐标向量表示为pi=(xi,yi)T,则这个多边形的质心坐标为:例如,如果四边形ABCD的顶点坐标分别为(x1,y1),(x2,y2),(x3,y3)和(x4,y4)
2、,则它的质心坐标计算如下:这种方法的计算与实现都非常简单,根据网络的连通性确定出目标节点周围的信标参考节点,直接求解信标参考节点构成的多边形的质心。锚点周期性地向临近节点广播分组信息,该信息包含了锚点的标识和位置。当未知结点接收到来自不同锚点的分组信息数量超过某一门限或在一定接收时间之后,就可以计算这些锚点所组成的多边形的质心,作为确定出自身位置。由于质心算法完全基于网络连通性,无需锚点和未知结点之间的协作和交互式通信协调,因而易于实现。三、实验容及步骤该程序在Matlab环境下完成无线传感器中的质心算法的实现。在长为100米的正
3、方形区域,信标节点(锚点)为90个,随机生成50个网络节点。节点的通信距离为30米。需完成:分别画出不同通信半径,不同未知节点数目下的误差图,并讨论得到的结果所用到的函数:1.M=min(A)返回A最小的元素.如果A是一个向量,然后min(A)返回A的最小元素.如果A是一个矩阵,然后min(A)是一个包含每一列的最小值的行向量。2.randX=rand返回一个单一均匀分布随机数在区间(0,1)。X=rand(n)返回n--n矩阵的随机数字。3.S=sum(A)返回A沿其大小不等于1的第一个数组维度的元素的总和。如果A是一个向量,s
4、um(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
5、)^p)^(1/p),这里p是任何正值,Inf或-Inf.8.s=num2str(A)数值数组转换为字符数组输出,它表示的数字。输出格式取决于原始值的大小。num2str是用于标签和标题情节与数字值。所用到的变量:xy:均匀分布的信标节点位置矩阵n:未知节点数量SS:未知节点位置矩阵dm:通信半径cent:质心MM:未知节点估计坐标矩阵e:估计位置和实际位置距离矩阵(误差)四、源程序clearclc%锚节点节点设置fori=1:1:10%1到10,步长是1;画出锚点,前一个括号是标号。forj=1:1:10x(j+(i-1)*10
6、)=(i-1)*10;y(j+(i-1)*10)=(j-1)*10;endendfigure%出现图形界面plot(x,y,'k.');%黑点holdon%继续画图axis([01000100]);xy=[x;y];把X,Y的坐标付给矩阵XYxy;holdonxm=90;ym=90;n=50;%未知节点fori=1:1:nSx(i)=rand(1,1)*xm;%产生一个一行一列的矩阵;依然是0-1中任意一个值。Sy(i)=rand(1,1)*ym;plot(Sx(i),Sy(i),'r*');%红星xlabel('x轴');yla
7、bel('y轴');holdonenddm=30;%通信半径m=100;一共100个点;forj=1:1:n%未知节点循环;每一个未知节点都与在通讯围所有的锚点算一遍距离,放到一个矩阵中,通讯距离以外的点为零。SS=[Sx(j);Sy(j)];k=0;%表示通信半径的信标节点数fori=1:1:md=norm((xy(:,i)-SS),2);%2数就是求直线距离;不管行,第i列;ifd<=dm是否在围,取出信标节点,放到XX,yy中xx(j,i)=xy(1,i);第1行第i列;%X坐标都给了XXyy(j,i)=xy(2,i);第2
8、行第i列;k=k+1;elsexx(j,i)=0;yy(j,i)=0;endendifk~=0%k不等于零cent(:,j)=[sum(xx(j,:));sum(yy(j,:))]/k;%第j行的所有列elsecent(:,j)=0;令第j列的所有