无线传感器网络实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无线传感器网络
实验指导书
信息工程学院
实验一 质心算法
一、实验目的
掌握合并质心算法的基本思想;
学会利用MATLAB 实现质心算法;
学会利用数学计算软件解决实际问题。
二、实验内容和原理
无需测距的定位技术不需要直接测量距离和角度信息。定位精度相对较低,不过可以满足某些应用的需要。
在计算几何学里多边形的几何中心称为质心,多边形顶点坐标的平均值就是质心节点的坐标。
假设多边形定点位置
的坐标向量表示为p i = (x i ,y i )T ,则这个多边形的
质心坐标为:
例如,如果四边形 ABCD 的顶点坐标分别为 (x 1, y 1),(x 2, y 2), (x 3, y 3) 和(x 4,y 4),则它的质心坐标计算如下:
这种方法的计算与实现都非常简单,根据网络的连通性确定出目标节点周围的信标参考节点,直接求解信标参考节点构成的多边形的质心。
锚点周期性地向临近节点广播分组信息,该信息包含了锚点的标识和位置。当未知结点接收到来自不同锚点的分组信息数量超过某一门限或在一定接收时间之后,就可以计算这些锚点所组成的多边形的质心,作为确定出自身位置。由于质心算法完全基于网络连通性,无需锚点和未知结点之间的协作和交互式通信协调,因而易于实现。
三、实验内容及步骤
该程序在Matlab 环境下完成无线传感器中的质心算法的实现。在长为100米的正方形区域,信标节点(锚点)为90个,随机生成50个网络节点。节点的通信距离为30米。
需完成:
分别画出不同通信半径,不同未知节点数目下的误差图,并讨论得到的结果
所用到的函数:
1. M = min(A)返回A 最小的元素.
如果A 是一个向量,然后min(A)返回A 的最小元素.
如果A 是一个矩阵,然后min(A)是一个包含每一列的最小值的行向量。
2. rand
()12341234,,44x x x x y y y y x y ++++++⎛⎫= ⎪⎝⎭
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
%锚节点节点设置
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