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