无线网络协议原理实验报告2Word下载.doc
《无线网络协议原理实验报告2Word下载.doc》由会员分享,可在线阅读,更多相关《无线网络协议原理实验报告2Word下载.doc(8页珍藏版)》请在冰豆网上搜索。
![无线网络协议原理实验报告2Word下载.doc](https://file1.bdocx.com/fileroot1/2022-10/4/62e8e1f0-599d-4e64-b646-3b18a794fb19/62e8e1f0-599d-4e64-b646-3b18a794fb191.gif)
LEACH协议仿真实验
实验类别
操作性()验证性()设计性(√)综合性()其它()
实验目的及要求
(1)实验目的
通过此实验使学生加深理解leach成簇协议,分析算法优、缺点。
(2)实验要求
a)编写簇头选举代码;
b)编写普通节点加入簇代码;
c)编写能量消耗代码;
d)和PEGASIS协议实验结果对比并分析原因。
e)尝试对节点初始能量不均匀情况改进簇头选举算法。
成绩评定表
类别
评分标准
分值
得分
合计
上机表现
积极出勤、遵守纪律
主动完成实验设计任务
30分
程序代码
比较规范、基本正确
功能达到实验要求
实验报告
及时递交、填写规范
内容完整、体现收获
40分
说明:
评阅教师:
日期:
2015年月日
实验内容
实验内容:
1编写WSN网络节点生成代码
2编写簇头选举代码
3编写普通节点加入簇代码
4编写路由能量消耗代码
5尝试对节点初始能量不均匀情况改进簇头选举算法(可选)
6画出分簇效果图
7和PEGASIS协议能量消耗性能对比并分析原因
实验准备:
1了解并掌握matlab软件的基本操作
实验中会使用到的matlab函数:
rand():
随机数生成函数
Round():
四舍五入取整函数
Plot():
二维曲线绘图函数
2掌握LEACH协议的基本类容,根据簇的划分以及簇头的选择编写代码
并得到仿真结果。
(1)设置区域范围、节点坐标、区域内节点数目、节点成为簇头概率以及各种能量和最大轮数的设定。
(2)利用rand()函数创建随机的传感器网络,并设定汇聚节点位置。
(3)根据节点能量是否大于零来判断节点是否死亡并在图中画出节点的位置,死亡的节点用红点表示,没有死亡的普通节点用“。
”表示并用plot()函数画出
这些节点的曲线图。
(4)根据LEACH协议中簇头节点的选取要求选出簇头,根据簇头节点的坐标用
plot()函数在图上将簇头表示黑*,并计算簇头节点到汇聚节点的距离,将距
离与通信路径进行比较计算出各簇头的能量消耗。
(5)选取正常节点的相关簇头,在n个节点中选取出节点类型为N且能量大于
零的节点,计算这些节点到汇聚界定的距离,设定距离最小最小簇头数为1,
计算该节点与各簇头的距离,取最小距离的簇头节点为该节点簇头,并计算
出各普通节点的能量消散。
(6)用plot()函数画出各簇头节点和普通节点的划分图。
实验步骤:
一、代码编写
clear;
xm=100;
ym=100;
%设置区域为100*100
sink.x=0.5*xm;
sink.y=0.5*ym;
%汇聚节点坐标
n=100%区域内节点数目
p=0.1;
%节点成为簇头的概率
Eo=0.5;
%节点初始能量
ETX=50*0.000000001;
%发射单位报文损耗能量
ERX=50*0.000000001;
%接收单位报文损耗能量
Efs=10*0.000000000001;
%自由空间能量
Emp=0.0013*0.000000000001;
%衰减空间能量
EDA=5*0.000000001;
%多路径衰减能量
rmax=20%最大的轮数
do=sqrt(Efs/Emp);
%计算通信路径do
下面利用for循环语句和rand()函数在n个节点中随机生成普通节点类型的节点,并表示出它的坐标以及初始能量,普通类型节点用‘N’表示,
fori=1:
1:
n%随机生成普通节点类型的节点
S(i).xd=rand(1,1)*xm;
S(i).yd=rand(1,1)*ym;
S(i).G=0;
//
S(i).type='
N'
;
%普通节点类型用‘N’表示
S(i).E=Eo;
End
定义汇聚节点的位置坐标
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
cluster=1;
利用for循环语句使每一个节点都没有簇头节点
forr=0:
rmax
if(mod(r,round(1/p))==0)
fori=1:
1:
n
S(i).G=0;
end
end
holdoff;
figure
(1);
利用for语句判断每个节点是否死亡,如果节点能量小于零则节点死亡,并用plot()函数在图上表示出该节点的位置,用‘red.’表示死亡的节点。
反之则节点没有死亡,将节点类型定义为普通节点,并用并用plot()函数在图上表示出该节点的位置,用‘。
’表示未死亡的普通节点。
n%判断节点是否死亡
if(S(i).E<
=0)
plot(S(i).xd,S(i).yd,'
red.'
);
holdon;
if(S(i).E>
0)
S(i).type='
;
plot(S(i).xd,S(i).yd,'
o'
);
plot(S(n+1).xd,S(n+1).yd,'
x'
);
red.'
利用for语句和if语句根据LEACH协议的簇头选取规则在n个节点中选出簇头节点,将簇头节点的类型用‘C’表示,并将选出的接待点的坐标赋值给簇头C(cluster),并用plot()函数将簇头节点的位置在图中用‘k*’表示。
然后计算该点到汇聚节点的距离并将该距离赋值给簇头到汇聚节点的距离C(cluster).distance。
并记录得到的簇头节点是n个节点中的哪一个,给簇头的X、Y坐标赋值并将簇头总数加一。
最后通过比较各簇头节点到汇聚加节点的距离和通信半径的距离计算出簇头节点的能量耗散
n%簇头的选择
if(S(i).E>
temp_rand=rand;
if((S(i).G)<
if(temp_rand<
=(p/(1-p*mod(r,round(1/p)))))
S(i).type='
C'
S(i).G=round(1/p)-1;
C(cluster).xd=S(i).xd;
C(cluster).yd=S(i).yd;
plot(S(i).xd,S(i).yd,'
k*'
);
distance=sqrt((S(i).xd-S(n+1).xd)^2+(S(i).yd-S(n+1).yd)^2);
C(cluster).distance=distance;
C(cluster).id=i;
X(cluster)=C(cluster).xd;
Y(cluster)=C(cluster).yd;
cluster=cluster+1;
distance;
if(distance>
do)
S(i).E=S(i).E-((ETX+EDA)*4000+Emp*4000*(distance*distance*distance*distance));
end
if(distance<
=do)
S(i).E=S(i).E-((ETX+EDA)*4000+Efs*4000*(distance*distance));
end
end
end
利用for循环对普通节点进行簇的划分即对普通节点选取相关簇头,对n个节点中依次选出普通节点计算它与汇聚节点之间的距离记为min_dis,然后将该普通节点与全部的簇头节点进行距离计算并与它与汇聚节点的距离进行比较,将距离的最小值赋值给min_dis。
然后计算普通节点和簇头