-
大小: 8KB文件類型: .m金幣: 1下載: 0 次發(fā)布日期: 2021-05-24
- 語言: Matlab
- 標簽: matlabLeach??
資源簡介
LEACH協(xié)議在matlab上的仿真代碼,并配有簡單的性能輸出
代碼片段和文件信息
function?LEACH_o?=?LEACH_o()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?初始化參數(shù)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close?all;
clear;%清除變量
xm=200;%設(shè)置區(qū)域為200*200
ym=200;
sink.x=100;%sink(匯聚)節(jié)點坐標
sink.y=350;
n=500;%區(qū)域內(nèi)的節(jié)點數(shù)目
p=0.02;%?節(jié)點成為簇頭的概率
Eo=1;%節(jié)點初始能量
ETX=50*0.000000001;%發(fā)射單位報文損耗能量
ERX=50*0.000000001;%接收單位報文損耗能量
Efs=10*0.000000000001;%自由空間能量
Emp=0.0013*0.000000000001;%衰減空間能量
EDA=5*0.000000001;%多路徑衰減能量
rmax=2500;%最大的輪數(shù)
do=sqrt(Efs/Emp);?%計算do?通信半徑
flag_first_dead=0;%第一個節(jié)點死亡的標志變量
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%隨機生成n個節(jié)點、定義sink節(jié)點%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);%輸出圖形
for?i=1:1:n?%遍歷節(jié)點
????S(i).xd=rand(11)*xm;%1行1列矩陣
????XR(i)=S(i).xd;%隨機生成的X軸
????S(i).yd=rand(11)*ym;
????YR(i)=S(i).yd;%隨機生成的Y軸
????S(i).G=0;%
????S(i).type=‘N‘;%節(jié)點類型為普通
????plot(S(i).xdS(i).yd‘b:o‘);%輸出節(jié)點,用o表示
????hold?on;
end
S(n+1).xd=sink.x;%匯聚節(jié)點X軸坐標
S(n+1).yd=sink.y;%匯聚節(jié)點Y軸坐標
%plot(S(n+1).xdS(n+1).yd‘x‘);?%輸出匯聚節(jié)點,用x表示
hold?off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%開始每輪競選和傳輸%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
aa=0.05;
bb=0.07;
cc=0.1;
for?EE=[aabb]
????for?i=1:1:n?%遍歷節(jié)點
????????S(i).Eo=Eo;%記錄初始能量為E0
????????S(i).Ec=S(i).Eo;%設(shè)置初始能量
????????S(i).type=‘N‘;????????
????end
????for?r=0:1:rmax%遍歷每一輪
????????dead=0;%節(jié)點死亡數(shù)
????????packets_TO_BS=0;%傳輸sink節(jié)點報文數(shù)
????????packets_TO_CH=0;%傳輸簇頭的報文數(shù)
????????PACKETS_TO_CH(r+1)=0;%每輪傳送到簇頭的報文數(shù)
????????PACKETS_TO_BS(r+1)=0;%每輪傳送到基站的報文數(shù)????????
????????for?i=1:1:n%遍歷節(jié)點
????????????S(i).type=‘N‘;
????????????%Ea(r+1i)=S(i).Ec;
????????????if(mod(r?round(1/p))==0)%如果一輪循環(huán)結(jié)束
????????????????S(i).G=0;%重置所有節(jié)點成為備選簇頭
????????????????%S(i).Eo=S(i).Ec;%更新節(jié)點初始能量值
????????????end
????????????if?(S(i).Ec<=0)%檢查是否有節(jié)點死亡
????????????????dead=dead+1;%節(jié)點死亡數(shù)+1
????????????end
????????end
????????STATISTICS(r+1).DEAD=dead;%記錄r輪累計死亡節(jié)點數(shù)
????????DEAD(r+1)=dead;%記錄r輪后死亡節(jié)點數(shù)
????????if?(dead==1)%記錄第一個節(jié)點死亡
????????????if(flag_first_dead==0)%第一個節(jié)點死亡周期
????????????????first_dead=r+1;%第一個節(jié)點死亡輪數(shù)
????????????????flag_first_dead=1;%第一個死亡節(jié)點標志
????????????end
????????end
????????countCHs=0;%簇頭計數(shù)量
????????cluster=0;%C(cluster)簇頭數(shù)組中的編號量
????????for?i=1:1:n%遍歷所有節(jié)點
????????????if(S(i).Ec>0)%節(jié)點剩余能量大于0
????????????????temp_rand=rand;%生成隨機數(shù)
????????????????if?((S(i).G)<=0)%判斷i是否為候選簇頭
????????????????????switch?EE
????????????????????????case?aa
????????????????????????????Tn?=?p?/?(1?-?p?*?mod(rround(1/p)));
????????????????????????????%ETaa(r+1i)=S(i).Ec;
????????????????????????case?bb
????????????????????????????if?(mod(r100)==0)
????????????????????????????????p=1.2*p;
????????????????????????????????Tn?=?p?/?(1?-?p?*?mod(rround(1/p)));
????????????????????????????????p
????????????????????????????end???????????????????????????
????????????????????????????%ETbb(r+1i)=S(i).Ec;
????????????????????????case?cc
????????????????????????????p=p*(1/r+1);
??????????????
評論
共有 條評論