-
大小: 5KB文件类型: .zip金币: 1下载: 0 次发布日期: 2021-06-18
- 语言: Matlab
- 标签: MATLABLEACH
资源简介
本代码是基于MATLAB平台的无线传感器网络中LEACH协议的仿真源代码,注释清楚,适合初学者学习
代码片段和文件信息
clear;
%PARAMETERS
% dimensions x(m) y(m)
xm=100;
ym=100;
%x and y Coordinates of the Sink
sink.x=0.5*xm;
sink.y=0.5*ym;
%Number of Nodes in the field
n=100
%Optimal Election Probability of a node to become cluster head
p=0.05; %Variable
%Energy Model (all values in Joules)
%Initial Energy
Eo=0.02;
ETX=50*0.000000001;
ERX=50*0.000000001;
%Transmit Amplifier types
Efs=10*0.000000000001;
Emp=0.0013*0.000000000001;
%Data Aggregation Energy
EDA=5*0.000000001;
%maximum number of rounds
rmax=50
%PARAMETERS Done
%Computation of do
do=sqrt(Efs/Emp);
%Creation of the random Sensor Network
figure(1);
hold off;
for i=1:1:n
% S(i).xd=rand(11)*xm;
% XR(i)=S(i).xd;
%S(i).yd=rand(11)*ym;
%YR(i)=S(i).yd;
load(‘XR.mat‘)
load(‘YR.mat‘)
S(i).xd=XR(i);
S(i).yd=YR(i);
S(i).G=0; %这个函数小于等于0才能去选拔簇头,也是为了让当选的簇头不再重复当选簇头设置的变量
S(i).E=Eo; %初始能量
%initially there are no cluster heads only nodes
S(i).type=‘N‘;
plot( XR(i)YR(i)‘o‘);
end
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xdS(n+1).yd‘x‘);
%First Iteration
figure(1);
%counter for CHs
countCHs=0;
%counter for CHs per round
rcountCHs=0;
cluster=1;
countCHs;
rcountCHs=rcountCHs+countCHs;
flag_first_dead=0; %这几句代码是干什么用的?
for r=1:1:rmax
r
%Operation for epoch
if(mod(r round(1/p) )==0) %满足这个条件就清零
for i=1:1:n
S(i).G=0;
S(i).cl=0;
end
end
hold off;
%Number of dead nodes
dead=0;
%counter for bit transmitted to bases Station and to Cluster Heads
packets_TO_BS=0;
packets_TO_CH=0;
%counter for bit transmitted to bases Station and to Cluster Heads per round
PACKETS_TO_CH(r+1)=0;
PACKETS_TO_BS(r+1)=0;
figure(1);
for i=1:1:n
%checking if there is a dead node
if (S(i).E<=0)
plot(S(i).xdS(i).yd‘red .‘);
dead=dead+1;
hold on;
end
if S(i).E>0
S(i).type=‘N‘;
plot(S(i).xdS(i).yd‘o‘);
hold on;
end
end
plot(S(n+1).xdS(n+1).yd‘x‘); %基站用x表示
STATISTICS(r+1).DEAD=dead;
DEAD(r+1)=dead;
%When the first node dies
if (dead==1)
if(flag_first_dead==0)
first_dead=r %第一个节点死亡的轮数
flag_first_dead=1;
end
end
countCHs=0;
cluster=1;%定义一个从1开始的下标参数,真正簇头个数应该减去1(因为从1开始,所以第一个选出的簇头应该是2-1=1,如果从0开始,就不用减去1)
for i=1:1:n
if(S(i).E>0)
temp_rand=rand; %rand是函数 ,没有括号表示生成0-1的随机数
if ( (S(i).G)<=0) %表示该节点可以进行簇头选举
%Election of Cluster Heads
if(temp_rand<= (p/(1-p*mod(rround(1/p))))) %簇头选举公式
countCHs=countCHs+1;
packets_TO_BS=packets_TO_BS+1;
PACKETS_TO_BS(r+1)=packets_TO_BS;
S(i).type=‘C‘; %C表示什么?
S(i).G=round(1/p)-1; %????赋予一个大于0的数,该节点就不能进行簇头选取(当选过的簇头不能进行簇头选举)
C(cluster).xd=S(i).xd;
C(cluster).yd=S(i).yd; %簇头位置坐标
plot(S(i).xdS(i).yd‘k*‘);
distance(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1003 2018-03-29 20:30 XR.mat
文件 1003 2018-03-29 20:30 YR.mat
文件 420 2018-03-29 20:28 xy.m
文件 6951 2018-04-24 18:59 LEACH2_G.m
- 上一篇:视频车辆检测
- 下一篇:LEACH多跳传输协议matlab实现
评论
共有 条评论