資源簡介
對比DEEC和leach的matlab仿真代碼,絕對詳盡,完全好用,畢設的不二之選
代碼片段和文件信息
clear??
%1.初始參數設定模塊??
%.傳感器節點區域界限(單位?M)??
xm=200;??
ym=200;??
%(1)匯聚節坐標給定??
sink.x=0.5*xm;??
sink.y=0.5*ym;??
%區域內傳器節數??
n=100??
%簇頭優化比例(當選簇頭的概率)??
p=0.05;??
P=0.05;??
%能量模型(單位?焦)??
%初始化能量模型??
Eo=0.5;??
%Eelec=Etx=Erx??
ETX=50*0.000000001;??
ERX=50*0.000000001;??
%Transmit?Amplifier?types??
Efs=10*0.000000000001;??
Emp=0.0013*0.000000000001;??
%Data?Aggregation?Energy??
EDA=5*0.000000001;??
%高能量節點超出一節點能量的百分比??
a=1;??
%最大循環次數??
rmax=5000??
%算出參數?do??
do=sqrt(Efs/Emp);??
Et=0;??
%2.無線傳感器網絡模型產生模塊??
%構建無線傳感器網絡在區域內均勻投放100個節點并畫出圖形??
for?i=1:1:n??
????S1(i).xd=rand(11)*xm;??
????S2(i).xd=S1(i).xd;??
????S3(i).xd=S1(i).xd;??
????S4(i).xd=S3(i).xd;??
????XR4(i)=S4(i).xd;??
????XR3(i)=S3(i).xd;??
????XR2(i)=S2(i).xd;??
????XR1(i)=S1(i).xd;??
????S1(i).yd=rand(11)*ym;??
????S2(i).yd=S1(i).yd;??
????S3(i).yd=S1(i).yd;??
????S4(i).yd=S3(i).yd;??
????YR4(i)=S4(i).yd;??
????S4(i).G=0;??
????YR3(i)=S3(i).yd;??
????S3(i).G=0;??
????YR2(i)=S2(i).yd;??
????YR1(i)=S1(i).yd;??
????S1(i).G=0;??
????S2(i).G=0;??
????S1(i).E=Eo*(1+rand*a);??
????S2(i).E=S1(i).E;??
????S3(i).E=S1(i).E;??
????S4(i).E=S3(i).E;??
????E3(i)=?S3(i).E;??
????E4(i)=?S4(i).E;??
????Et=Et+E3(i);??
??
????%initially?there?are?no?cluster?heads?only?nodes??
????S1(i).type=‘N‘;??
????S2(i).type=‘N‘;??
????S3(i).type=‘N‘;??
????S4(i).type=‘N‘;??
end??
??
S1(n+1).xd=sink.x;??
S1(n+1).yd=sink.y;??
S2(n+1).xd=sink.x;??
S2(n+1).yd=sink.y;??
%3.網絡運行模塊??
%簇頭節點數??
countCHs1=0;??
cluster1=1;%此定義的目的僅僅是給定一個1開始的下標參數,真正的簇頭數應該還減去1??
flag_first_dead1=0;??
flag_teenth_dead1=0;??
flag_all_dead1=0;??
%死亡節點數??
dead1=0;??
first_dead1=0;??
teenth_dead1=0;??
all_dead1=0;??
%活動節點數??
allive1=n;??
%counter?for?bit?transmitted?to?bases?Station?and?to?Cluster?Heads??
packets_TO_BS1=0;??
packets_TO_CH1=0;??
%(1)循環模式設定??
for?r=0:1:rmax?????%該?for?循環將下面的所有程序包括在內,直到最后一?end?才結束循環??
????r??
??%每過一個輪轉周期(本程序為10次)使各節點的S(i).G參數(該參數用于后面的簇選舉,在該輪轉周期內已當選過簇頭的節點不能再當選)恢復為零??
??if(mod(r?round(1/p)?)==0)??
????for?i=1:1:n??
????????S1(i).G=0;??
????????S1(i).cl=0;??
????end??
??end??
%(2)死亡節點檢查模塊??
dead1=0;??
for?i=1:1:n??
????%檢查有無死亡節點??
????if?(S1(i).E<=0)??
????????dead1=dead1+1;???
????????%(3)第一個死亡節點的產生時間(用輪次表示)??
????????%第一個節點死亡時間??
????????if?(dead1==1)??
???????????if(flag_first_dead1==0)??
??????????????first_dead1=r;??
??????????????flag_first_dead1=1;??
???????????end??
????????end??
????????%10%的節點死亡時間??
????????if(dead1==0.1*n)??
???????????if(flag_teenth_dead1==0)??
??????????????teenth_dead1=r;??
??????????????flag_teenth_dead1=1;??
???????????end??
????????end??
????????if(dead1==n)??
???????????if(flag_all_dead1==0)??
??????????????all_dead1=r;??
??????????????flag_all_dead1=1;??
???????????end??
????????end??
????end??
????if?S1(i).E>0??
????????S1(i).type=‘N‘;??
????end??
end??
STATISTICS.DEAD1(r+1)=dead1;??
STATISTICS.ALLIVE1(r+1)=allive1-dead1;??
%(4)簇頭選舉模塊??
countCHs1=0;??
cluster1=1;
評論
共有 條評論