• 大小: 9KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: Matlab
  • 标签:

资源简介

在matlab上仿真运行,结果比LEACH算法表现更好。

资源截图

代码片段和文件信息

clear;%清除内存变量

xm=100;%x轴范围
ym=100;%y轴范围

sink.x=0.5*xm;%基站x轴
sink.y=0.5*ym;%基站y轴

n=100;%节点总数

p=0.4;%簇头概率

E0=0.02;%初始能量
ETX=50*0.000000000001;%传输能量,每bit
ERX=50*0.000000000001;%接收能量,每bit
Efs=10*0.000000000001;%耗散能量,每bit
EDA=5*0.000000000001;%融合能耗,每bit

cc=0.6;%融合率

rmax=300;%总轮数

CM=32;%控制信息大小
DM=4000;%数据信息大小

figure(1);%显示图片

%画出随机生成的节点
for i=1:1:n
    S(i).xd=rand(11)*xm;
    S(i).yd=rand(11)*ym;
    S(i).G=0;%每一周期结束此变量为0
    S(i).E=E0;%设置初始能量为E0
    S(i).type=‘N‘;%节点类型为普通
    S(i).qtype=‘O‘;
    plot(S(i).xdS(i).yd‘o‘);
    hold on;%保持所画的图像
end%为每个节点随机分配坐标,并设置初始能量为E0,节点类型为普通

%画出分区框
x1=0:sink.x/50:xm;
y1=sink.y;
x2=sink.x;
y2=0:sink.y/50:ym;
plot(x1y1‘b-.‘x2y2‘b-.‘);
hold on

%画出SINK节点
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xdS(n+1).yd‘*‘);%绘制基站节点

flag_first_dead=0;%第一个死亡节点的标志变量

%stop

figure(2)
%分区算法
%画出分区框
x1=0:sink.x/50:xm;
y1=sink.y;
x2=sink.x;
y2=0:sink.y/50:ym;
plot(x1y1‘b-.‘x2y2‘b-.‘);
hold on
for i=1:1:n
   if((S(i).xd<=50)&&(S(i).yd>=50))
      plot(S(i).xdS(i).yd‘go‘);
      hold on
      S(i).qtype=‘A‘;
    end
    if((S(i).xd<=50)&&(S(i).yd<50))
       plot(S(i).xdS(i).yd‘yo‘);
       hold on
       S(i).qtype=‘B‘;
     end
     if((S(i).xd>50)&&(S(i).yd>=50))
        plot(S(i).xdS(i).yd‘bo‘);
        hold on;
        S(i).qtype=‘C‘;
     end
     if((S(i).xd>50)&&(S(i).yd<50))
         plot(S(i).xdS(i).yd‘ro‘);
         hold on;
         S(i).qtype=‘D‘;
     end
end
plot(S(n+1).xdS(n+1).yd‘*‘);%绘制基站节点
hold on

%stop%程序调试断点

%开始每轮循环
for r=1:1:rmax
  r+1%显示轮数
    if(mod(r15)==0)
       for i=1:1:n
           S(i).G=0;
       end
    end%如何轮数正好是一个周期的整数倍,则设置S(i).G为0

     hold off;%每轮图片重新绘制
     cluster=0;%初始簇头数为0
     dead=0;%初始死亡节点数为0
     

     A_c=0;
     B_c=0;
     C_c=0;
     D_c=0;
     
     figure(3);
     
     x1=0:sink.x/50:xm;
     y1=sink.y;
     x2=sink.x;
     y2=0:sink.y/50:ym;
     plot(x1y1‘b-.‘x2y2‘b-.‘);
     hold on

     
     
    %stop%GAF算法调试点
     %GAF算法的具体实现
     for i=1:1:n
         if((A_c>=1)&&(B_c>=1)&&(C_c>=1)&&(D_c>=1))
             break;
          end
          if(S(i).E>0)
              if(S(i).G<=0)
                  temp_rand=rand;
                  if(temp_rand<=(p/(1-p*mod(rround(1/p)))))%如果随机数小于等于
                     if(S(i).qtype==‘A‘)
                          if(A_c<2)
                                 A_c=A_c+1;
                                 S(i).type=‘C‘;
                                 S(i).G=round(1/p)-1;
                                 cluster=cluster+1;
                                 C(cluster).xd=S(i).xd;
                                 C(cluster).yd=S(i).yd;
                                 plot(S(i).xdS(i).yd‘k*‘);
                                 hold on;
                                 distance=sqrt((S(i).xd-(S(n+1).xd))^2+(S(i).yd-(S(n+1).yd))^2);
                                 

评论

共有 条评论

相关资源