資源簡介
MATLAB平臺的LEACH協(xié)議代碼.對于搞畢業(yè)設計的人還是很好的東西。
代碼片段和文件信息
clear;
%%%%%%%%%%%%%%%%%%%%%%%%%????參數(shù)初始化??????%%%%%%%%%%%%%%%%%%%%%%%%
xm=100;%待投放節(jié)點的場景范圍
ym=100;
sink.x=0.5*xm;%基站的位置
sink.y=0.5*ym;
n=100;%節(jié)點總數(shù)
data_packet=4000;%每個節(jié)點采集數(shù)據(jù)形成的數(shù)據(jù)包大小
p=0.05;%期望蔟頭占所有節(jié)點的百分比
%能量模型
Eo=0.05;%初始能量
ETX=50*0.000000001;%Eelec=Etx=Erx
ERX=50*0.000000001;
Efs=10*0.000000000001;%放大器的兩個參數(shù)
Emp=0.0013*0.000000000001;
EDA=5*0.000000001;%融合單位數(shù)據(jù)所要消耗的能量
rmax=1999;%運行的總輪數(shù)
do=sqrt(Efs/Emp);%能量損耗的界限值:大于它則符合friss?free?space?model,小于它則符合two-ray?ground?model
%%%%%%%%%%%%%%%%%%%%%%%%%????參數(shù)初始化結(jié)束????%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%????簇的建立??????????%%%%%%%%%%%%%%%%%%%%%%%%%
for?i=1:1:n
????S(i).xd=rand(11)*xm;%隨機生成節(jié)點的坐標
????S(i).yd=rand(11)*ym;
????S(i).G=0;%節(jié)點是否屬于集合G的標志
????S(i).type=‘N‘;%表征普通節(jié)點???
????S(i).E=Eo;%初始化節(jié)點能量
end
S(n+1).xd=sink.x;%畫出基站節(jié)點‘x‘
S(n+1).yd=sink.y;
firstflag=0;
firstflag_round=0;
for?r=0:1:rmax%開始循環(huán)
????r?%輸出當前的輪數(shù)
????dead=0;%統(tǒng)計總的死亡節(jié)點數(shù)??
????if(mod(r?round(1/p)?)==0)%G為最近1/p輪不是簇頭的節(jié)點集
????????for?i=1:1:n
????????????S(i).G=0;
????????end
????end
????for?i=1:1:n
????????if?(S(i).E<=0)
????????????dead=dead+1;%統(tǒng)計總的死亡節(jié)點個數(shù)???
????????else
????????????S(i).type=‘N‘;
????????end
????end
????if(dead>0?&&?firstflag==0)
????????firstflag=1;
????????firstflag_round=r;
????end
????if?(dead?==?n)%如果節(jié)點全部死亡退出循環(huán)
????????break;
????end
????STATISTICS(r+1).DEAD=dead;%統(tǒng)計第r+1輪的死亡節(jié)點數(shù)
????%%%%%%%%%%%%%%%%%%%%%%%%%第一階段:簇首節(jié)點的選擇
????cluster=1;%記錄簇的個數(shù)
????for?i=1:1:n
????????if(S(i).E>0?&&?(S(i).G)<=0)%屬于候選節(jié)點集合
????????????temp_rand=rand;%生成一個0-1的隨機數(shù)?????
????????????if(temp_rand<=?(p/(1-p*mod(rround(1/p)))))%若生成的隨機數(shù)小于門限值T(n),就成為簇頭
????????????????S(i).type=‘C‘;%標志該節(jié)點為簇頭
????????????????S(i).G=round(1/p)-1;%標志該節(jié)點在最近的1/p輪中不會再成為簇頭
????????????????C(cluster).xd=S(i).xd;%記錄簇頭的位置
????????????????C(cluster).yd=S(i).yd;
????????????????C(cluster).distance=sqrt(?(S(i).xd-(S(n+1).xd)?)^2?+?(S(i).yd-(S(n+1).yd)?)^2?);%簇頭距離基站的距離
????????????????C(cluster).id=i;%簇頭的在原來n個節(jié)點中的編號
????????????????C(cluster).packet=0;%該簇頭所控制的簇成員個數(shù)?????????
????????????????cluster=cluster+1;???
????????????end
????????end?????
????end
????CLUSTERHS(r+1)=cluster-1;%統(tǒng)計第r+1輪的簇頭數(shù)
????%%%%%
- 上一篇:svm+smo matlab程序
- 下一篇:寬度學習matlab代碼
評論
共有 條評論