• 大小: 5KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-05-20
  • 语言: Matlab
  • 标签: WSN  leach  matlab  

资源简介

无线传感器网络中leach分簇算法,代码编写考虑较全面,无错误。

资源截图

代码片段和文件信息

clear;%清除內存變量

xm=100;%x軸範圍
ym=100;%y軸範圍

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

n=50;%節點總數

p=0.1;%簇頭概率

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=1000;%總輪數

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‘;%節點類型為普通

    plot(S(i).xdS(i).yd‘o‘);
    hold on;%保持所畫的圖像
end%為每個節點隨機分配坐標,並設置初始能量為E0,節點類型為普通

S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xdS(n+1).yd‘hr‘);%繪製基站節點 红色五角星形

flag_first_dead=0;%第一個死亡節點的標誌變量

for r=1:1:rmax%開始每輪循環
  r+1%顯示輪數
    if(mod(rround(1/p))==0)
       for i=1:1:n
           S(i).G=0;
       end
    end%如何輪數正好是一個週期的整數倍,則設置S(i).E為0

     hold off;%每輪圖片重新繪製
     cluster=0;%初始簇頭數為0
     dead=0;%初始死亡節點數為0
     
     figure(1);

     for i=1:1:n
         if(S(i).E<=0)
         plot(S(i).xdS(i).yd‘red .‘);
         dead=dead+1;%將能量小於等於0的節點繪製成紅色,並將死亡節點數增加1
         
         if(dead==1)
           if(flag_first_dead==0)
             first_dead=r %第一個節點的死亡輪數
             save ltest first_dead;
             flag_first_dead=1;
           end
         end%將能量小於等於0的節點繪製成紅色,並將死亡節點數增加1
           
         hold on;
         else
             S(i).type=‘N‘;
             plot(S(i).xdS(i).yd‘o‘);%繪製其他節點
             hold on;
         end

         
     end

     plot(S(n+1).xdS(n+1).yd‘hr‘);%繪製基站

     Dead(r+1)=dead; %每輪有死亡節點數
     save ltest Dead(r+1);%將此數據存入ltest文件
     
     for i=1:1:n
         if(S(i).E>0)
           if(S(i).G<=0)
            temp_rand=rand;%取一個隨機數
            if(temp_rand<=(p/(1-p*mod(rround(1/p)))))%如果隨機數小於等於
            S(i).type=‘C‘;%此節點為此輪簇頭
            S(i).G=round(1/p)-1;%S(i).G設置為大於0,此週期不能再被選擇為簇頭
            cluster=cluster+1;%簇頭數加1
            C(cluster).xd=S(i).xd;
            C(cluster).yd

评论

共有 条评论