• 大小: 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

评论

共有 条评论

相关资源