武
汉
工
程
大
学
计算机科学与工程学院
《无线网络协议原理》实验报告
专业班级
实验地点
学生学号
指导教师
学生姓名
实验时间
实验项目 实验二:LEACH 协议仿真实验 实验类别 操作性( )
验证性()
设计性( √
)
综合性( )
其它( )
实验目的及要求
(1)实验目的 通过此实验使学生加深理解 leach 成簇协议,分析算法优、缺点。
(2)实验要求 a)
编写簇头选举代码; b) 编写普通节点加入簇代码; c) 编写能量消耗代码; d) 和 PEGASIS 协议实验结果对比并分析原因。
e) 尝试对节点初始能量不均匀情况改进簇头选举算法。
成 绩 评 定 表 类
别 评 分 标 准 分值 得分 合
计 上机表现 积极出勤、遵守纪律 主动完成实验设计任务
0 30 分
程序代码 比较规范、基本正确 功能达到实验要求
0 30 分
实验报告 及时递交、填写规范 内容完整、体现收获
0 40 分
说明:
评阅教师:
日 期:
年
月
日
实 验 内 容 一、实验目的 1 编写 WSN 网络节点生成代码 2 编写簇头选举代码 3 编写普通节点加入簇代码 4 编写路由能量消耗代码 5 尝试对节点初始能量不均匀情况改进簇头选举算法(可选)
6 画出分簇效果图 7 和 PEGASIS 协议能量消耗性能对比并分析原因
二、实验准备
1、实验中会用到的库函数有 rand()函数:随机数生成函数,即生成 0~1 的随机数,里面参数表示矩阵大小 Round()函数:四舍五入取整函数 Plot()函数:二维曲线绘图函数 2、掌握 LEACH 协议的基本类容,根据簇的划分以及簇头的选择编写代码
并得到仿真结果。
设置区域范围、节点坐标、区域内节点数目、节点成为簇头概率以及各种能
量和最大轮数的设定 利用 rand()函数创建随机的传感器网络,并设定汇聚节点位置 根据节点能量是否大于零来判断节点是否死亡并在图中画出节点的位置,死 亡的节点用红点表示,没有死亡的普通节点用“。”表示并用 plot()函数画出 这些节点的曲线图 根据 LEACH 协议中簇头节点的选取要求选出簇头,根据簇头节点的坐标用 plot()函数在图上将簇头表示黑*,并计算簇头节点到汇聚节点的距离,将距 离与通信路径进行比较计算出各簇头的能量消耗 选取正常节点的相关簇头,在 n 个节点中选取出节点类型为 N 且能量大于 零的节点,计算这些节点到汇聚界定的距离,设定距离最小最小簇头数为 1, 计算该节点与各簇头的距离,取最小距离的簇头节点为该节点簇头,并计算 出各普通节点的能量消散 用 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 1、下面利用 for 循环语句和 rand()函数在 n 个节点中随机生成普通节点类型的节点,并表示出它的坐标以及初始能量,普通类型节点用‘N’表示。(请按要求在“*”处填上合适的代码)
for ****** for i=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";
S(i).E=Eo;
end ****
End 定义汇聚节点的位置坐标 S(n+1).xd=sink.x;
S(n+1).yd=sink.y; cluster=1; 利用 for 循环语句初始化每个节点的簇头节点 for r=0:1:rmax
if(mod(r, round(1/p) )==0)
for i=1:1:n
S(i).G=0;
end
end
hold off;
figure(1); 2、请分析下段代码的功能。
for i=1:1:n
if (S(i).E<=0)
plot(S(i).xd,S(i).yd,"red .");
hold on;
end
if (S(i).E>0)
S(i).type="N";
plot(S(i).xd,S(i).yd,"o");
hold on;
end
end plot(S(n+1).xd,S(n+1).yd,"x");
plot(S(n+1).xd,S(n+1).yd,"red ."); cluster=1;
功能:利用 for 语句判断每个节点是否死亡,如果节点能量小于零则节点死亡,并用 plot()函数在图上表示出该节点的位置,用‘red.’表示死亡的节点。反之则节点没有死亡,将节点类型定义为普通节点,并用并用 plot()函数在图上表示出该节点的位置,用‘。’表示未死亡的普通节点。并表示出汇聚节点的位置,并将其记为第一个簇头,判断节点是否死亡 。
3、利用 for 语句和 if 语句根据 LEACH 协议的簇头选取规则在 n 个节点中选出簇头节点,将簇头节点的类型用‘C’表示,并将选出的接待点的坐标赋值给簇头 C(cluster),并用 plot()函数将簇头节点的位置在图中用‘k*’表示。然后计算该点到汇聚节点的距离并将该距离赋值给簇头到汇聚节点的距离 C(cluster).distance。并记录得到的簇头节点是 n 个节点中的哪一个,给簇头的 X、Y 坐标赋值并将簇头总数加一。最后通过比较各簇头节点到汇聚加节点的距离和通信半径的距离计算出簇头节点的能量耗散(请按要求补全下列横线处的代码)
for i=1:1:n //簇头的选择
if(S(i).E>0)
temp_rand=rand;
if ((S(i).G)<=0)
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)=
S(i).xd
;
Y(cluster)=
S(i).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
end
end 4、利用 for 循环对普通节点进行簇的划分即对普通节点选取相关簇头,首先初始化该点的通信最短距离,即该点到汇聚节点的距离,并记录下它的簇头为汇聚节点。然后将该普通节点与全部的簇头节点进行距离计算并与它与汇聚节点的距离进行比较,将距离的最小值赋值给 min_dis。然后计算普通节点和簇头节点的能量耗散,记录该普通节点的簇头节点和到簇头节点的距离。(请按要求补全下列横线处的代码)
for i= 1:1:n
//选取正常节点的相关簇头
if ( S(i).type=="N" && S(i).E>0 )
if(cluster-1>=1)
min_dis=
sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 )
;
min_dis_cluster=
1
;
for
c=1:1:cluster-1
temp=min(min_dis,
sqrt( (S(i).xd-C(c).xd)^2 + (S(i).yd-C(c).yd)^2 )
);
if ( temp<min_dis )
min_dis=temp
;
min_dis_cluster=c;
;
end
end
if (min_dis>do)
//普通节点能量耗散
S(i).E=
S(i).E- ( ETX*(4000) + Emp*4000*( min_dis * min_dis * min_dis * min_dis));
;
end
if
(min_dis<=do)
S(i).E= S(i).E- ( ETX*(4000) + Efs*4000*( min_dis *
min_dis))
;
end
if(min_dis>0)
//簇头节点能量耗散
S(C(min_dis_cluster).id).E =
S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 )
;
end
S(i).min_dis=
min_dis
;
S(i).min_dis_cluster=
min_dis_cluster
;
end
end
end
hold on; 5、分析下列代码的功能。
[vx,vy]=voronoi(X,Y);
plot(X,Y,"r*",vx,vy,"b-");
hold on;
axis([0 xm 0 ym]);
功能:输出对区域内节点的划分图。
四、实验分析 请根据仿真结果对测试结果进行分析
>> LEACH
n = 100 rmax = 20
推荐访问: 无线网络 原理 协议上一篇:三极管特性仿真,模电实验报告
下一篇:教科版五年级下册科学实验报告单
在伟大祖国73华诞之际,我参加了单位组织的“光影铸魂”主题党日活动,集中观看了抗美援朝题材影片《长津湖》,再一次重温这段悲壮历史,再一次深刻感悟伟大抗美援朝精神。1950年10月,新中国刚刚成立一年,
根据省局党组《关于举办习近平谈治国理政(第四卷)读书班的通知》要求,我中心通过专题学习、专题研讨以及交流分享等形式,系统的对《习近平谈治国理政》(第四卷)进行了深入的学习与交流,下面我就来谈一谈我个人
《习近平谈治国理政》(第四卷)是在百年变局和世纪疫情相互叠加的大背景下,对以习近平同志为核心的党中央治国理政重大战略部署、重大理论创造、重大思想引领的系统呈现。它生动记录了新一代党中央领导集体统筹两个
《真抓实干做好新发展阶段“三农工作”》是《习近平谈治国理政》第四卷中的文章,这是习近平总书记在2020年12月28日中央农村工作会议上的集体学习时的讲话。文章指出,我常讲,领导干部要胸怀党和国家工作大
在《习近平谈治国理政》第四卷中,习近平总书记强调,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。从嘉兴南湖中驶出的小小红船,到世界上最大的执政党,在中国共产党的字典里,“人民”一词从来都
党的十八大以来,习近平总书记以马克思主义战略家的博大胸襟和深谋远虑,在治国理政和推动全球治理中牢固树立战略意识,在不同场合多次围绕战略策略的重要性,战略和策略的关系,提高战略思维、坚定战略自信、强化战
《习近平谈治国理政》第四卷集中展示了以习近平同志为核心的党中央在百年变局和世纪疫情相互叠加背景下,如何更好地坚持和发展中国特色社会主义而进行的生动实践与理论探索;对于新时代坚持和发展什么样的中国特色社
在党组织的关怀下,我有幸参加了区委组织部组织的入党积极分子培训班。为期一周的学习,学习形式多样,课程内容丰富,各位专家的讲解细致精彩,对于我加深对党的创新理论的认识、对党的历史的深入了解、对中共党员的
《习近平谈治国理政》第四卷《共建网上美好精神家园》一文中指出:网络玩命是新形势下社会文明的重要内容,是建设网络强国的重要领域。截至2021年12月,我国网民规模达10 32亿,较2020年12月增长4
刚刚召开的中国共产党第十九届中央委员会第七次全体会议上讨论并通过了党的十九届中央委员会向中国共产党第二十次全国代表大会的报告、党的十九届中央纪律检查委员会向中国共产党第二十次全国代表大会的工作报告和《