• 大小: 5KB
    文件类型: .m
    金币: 2
    下载: 2 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: WSN  LEACH  multihop  

资源简介

在传统的LEACH协议上进行改进,增加了多跳传输环节,距离基站较远的簇头可以选择距离基站较近的簇头进行数据转发,该代码采用matlab实现。

资源截图

代码片段和文件信息

clear; 
con=0; 
xm = 200;ym = 200; 
sink.x =0.5 * xm; 
sink.y = ym + 50; 
n =100;     
p=0.05;%(成为簇头的最佳比例) 
%Energy Model  
Eo = 1;%(最初能量) 
%Eelec=Etx=Erx 
ETX1=0.000000001; 
ERX1=0.000000001; 
ETX2=0.0000000001; 
ERX2=0.0000000001; 
%Transmit Amplifier types  EfsEmp 
%Data Aggregation Energy 
EDA=5*0.000000001; 
INFINITY = 999999999999999;    
%maximum number of rounds 
rmax=3000;                    
  %循环次数 
dead=0; 
 
%%%%%%%%%%%%%%%%%%%%%%%%% END OF PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%% 
 
%随机分布节点 
figure(1); 
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; 
    %initially there are no cluster heads only nodes 
    S(i).type=0;%普通节点 
    S(i).E=Eo; 
    plot(S(i).xdS(i).yd‘o‘);   
    hold on;   
end 
 
%计算节点间的距离 
for i=1:1:n 
  for j=1:1:n 
   distance(ij)=((S(i).xd-(S(j).xd))^2 + (S(i).yd-(S(j).yd) )^2 )^(1\2); 
  end 
end 
 
%覆盖半径 
R=((xm*ym)/(5*pi))^(1\2); 
%增加通信距离 
L=75; 
 
%基站坐标 
S(n+1).xd=sink.x; 
S(n+1).yd=sink.y; 
plot(S(n+1).xdS(n+1).yd‘x‘);   
 
%大循环 
for r=1:1:45     
     ss=rem((r+3)4)+1;  
     if rem(r-14)==0 
     figure;         
     end 
         E=0;         
 for i=1:1:n               
     E=E+S(i).E;        
    subplot(22ss)plot (S(i).xdS(i).yd‘o‘); 
     hold on; 
    subplot(22ss) plot (S(n+1).xdS(n+1).yd‘x‘); 
     if S(i).type==1            
        S(i).type=0; 
     end      
 end 
%计数死亡节点 
  
 for i=1:1:n 
    %checking if there is a dead node 
     if (S(i).E<=0) 
        subplot(22ss)plot(S(i).xdS(i).yd‘b*‘);   
        hold on; 
        if S(i).type==0 
           dead=dead+1; 
           S(i).type=2; 
        end 
    end 
 end  
 if (n-dead<=10)%节点全部死亡退出循环 
    break; 
 end 
   
 countCHs=1; 
 cluster=1;  
       
 for k=1:1:10       
   for i=1:1:n 
   c(i)=rand; 
     if(S(i).E*n>=E && S(i).type ==0) 
      %如果该节点在候选集合中 
        %Election of Cluster Heads 
         if( c(i) <= (p/(1-p*mod(rround(1/p))))) 
            countCHs = countCHs+1; 
            S(i).type = 1; 
            C(cluster).type=S(i).type; 
            C(cluster).xd = S(i).xd; 
            C(cluster).yd = S(i).yd; 
            C(cluster).id = i; 
            C(cluster).E=S(i).E;  

评论

共有 条评论