資源簡介
無線傳感器網路LEACH協議在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.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‘x‘);%繪製基站節點
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‘x‘);%繪製基站
?????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(c
評論
共有 條評論