資源簡介
在LEACH算法的基礎上對簇頭選擇從節點剩余能量與節點分布位置進行了加權處理,仿真結果顯示,較LEACH協議延長了網絡生存時間,降低了網絡總體能耗。
代碼片段和文件信息
clear
%1.初始參數設定模塊
%.傳感器節點區域界限(單位?M)
xm=200;
ym=200;
%(1)匯聚節坐標給定
sink.x=0.5*xm;
sink.y=0.5*ym;
%區域內傳器節數
n=100
%簇頭優化比例(當選簇頭的概率)
P=0.05;
%能量模型(單位?焦)
%初始化能量模型
Eo=0.1;
%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=1000
%算出參數?do
do=sqrt(Efs/Emp);
Et=0;
%2.無線傳感器網絡模型產生模塊
%構建無線傳感器網絡在區域內均勻投放100個節點并畫出圖形
for?i=1:1:n
????S3(i).xd=rand(11)*xm;
????S4(i).xd=S3(i).xd;
????XR4(i)=S4(i).xd;
????XR3(i)=S3(i).xd;
????S3(i).yd=rand(11)*ym;
????S4(i).yd=S3(i).yd;
????YR4(i)=S4(i).yd;
????S4(i).G=0;
????YR3(i)=S3(i).yd;
????S3(i).G=0;
????S3(i).E=Eo*(1+rand*a);
????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
????S3(i).type=‘N‘;
????S4(i).type=‘N‘;
end
d1=0.765*xm/2;
K=sqrt(0.5*n*do/pi)*xm/d1^2;
d2=xm/sqrt(2*pi*K);
Er=4000*(2*n*ETX+n*EDA+K*Emp*d1^4+n*Efs*d2^2);
S3(n+1).xd=sink.x;
S3(n+1).yd=sink.y;
S4(n+1).xd=sink.x;
S4(n+1).yd=sink.y;
%3.網絡運行模塊
%簇頭節點數
countCHs3=0;
cluster3=1;%此定義的目的僅僅是給定一個1開始的下標參數,真正的簇頭數應該還減去1
flag_first_dead3=0;
flag_teenth_dead3=0;
flag_all_dead3=0;
%死亡節點數
dead3=0;
first_dead3=0;
teenth_dead3=0;
all_dead3=0;
%活動節點數
allive3=n;
%counter?for?bit?transmitted?to?bases?Station?and?to?Cluster?Heads
packets_TO_BS3=0;
packets_TO_CH3=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
????????S3(i).G=0;
????????S3(i).cl=0;
????end
??end
??Ea=Et*(1-r/rmax)/n;
??El3(r+1)=0;
??for?i=1:100
????El3(r+1)=S3(i).E+El3(r+1);
??end
Ec3(r+1)=Et-El3(r+1);
%(2)死亡節點檢查模塊
dead3=0;
for?i=1:1:n
????%檢查有無死亡節點
????if?(S3(i).E<=0)
????????dead3=dead3+1;?
????????%(3)第一個死亡節點的產生時間(用輪次表示)
????????%第一個節點死亡時間
????????if?(dead3==1)
???????????if(flag_first_dead3==0)
??????????????first_dead3=r;
??????????????flag_first_dead3=1;
???????????end
????????end
????????%10%的節點死亡時間
????????if(dead3==0.1*n)
???????????if(flag_teenth_dead3==0)
??????????????teenth_dead3=r;
??????????????flag_teenth_dead3=1;
???????????end
????????end
????????if(dead3==n)
???????????if(flag_all_dead3==0)
??????????????all_dead3=r;
??????????????flag_all_dead3=1;
???????????end
????????end
????end
????if?S3(i).E>0
????????S3(i).type=‘N‘;
????end
end
STATISTICS.DEAD3(r+1)=dead3;
STATISTICS.ALLIVE3(r+1)=allive3-dead3;
%(4)簇頭選舉模塊
countCHs3=0;
cluster3=1;
for?i=1:1:n
?if?Ea>0
?p(i)=P*n*S3(i).E*E3(i)/(Et*Ea);
?if(S3(i).E>0)
???temp_rand=rand;?????
???if?(?(S3(i).G)<=0)??
???????%簇頭的選舉,當選的簇頭會把各種相關信存入下面程序所給定的變量中
????????if(temp_rand<=?(p(i)/(1-p(i)*mod(rround(1/p(i))))))
????????????countCHs3=countCHs3+1;
????????????packets_TO_BS3=packets_TO_BS3+1;
????????????PACKETS_TO_BS3(r+1)=packets_TO_BS3;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????14257??2014-04-29?14:23??cucfineUnti
-----------?---------??----------?-----??----
????????????????14257????????????????????1
- 上一篇:SFBC在OFDM系統中傳輸
- 下一篇:灰色預測模型通用matlab代碼
評論
共有 條評論