✅作者簡介:熱愛科研的Matlab仿真開發者,修心和技術同步精進,matlab項目合作可私信。
🍎個人首頁:Matlab科研工作室
🍊個人信條:格物緻知。
更多Matlab仿真内容點選👇
智能優化算法 神經網絡預測 雷達通信 無線傳感器
信号處理 圖像處理 路徑規劃 元胞自動機 無人機
⛄ 内容介紹
無線傳感器網絡(Wireless Sensor Network, WSN)技術是一門新興的網絡技術,它将成千上萬顆傳感器節點布置到需要監控的區域,通過其自身的自組網能力,組成一個可以在較大範圍内進行資料采集和處理的自組織網絡。無線傳感器網絡在民用與軍用方面有非常高的價值,它已經應用到軍事領域、生物醫學領域、環境的監控等多種實際應用領域中,并具有很好的實用性和先進性。目前,國内外科研領域都非常重視無線傳感器網絡的發展并進行了重點研究。無線傳感器網絡包含多項相關技術,其中主要包括路由協定、時間同步、資料融合、定位技術等等。由于無線傳感器網絡節點的能量有限,如果節點能量耗盡,其就成為死亡節點影響網絡功能。是以,一個具有較好節能效果的路由協定就顯得至關重要。無線傳感器網絡路由協定的分類很多,本文主要針對分層次的路由協定進行研究。低功耗自适應集簇分層型協定(Low-Energy Adaptive Clustering Hierarchy, LEACH)路由協定就是典型的分層路由協定,它有節能和魯棒性好優點,但是也有着分布不均勻,分簇階段并未考慮節點剩餘能量和距離等因素,不适應現代應用環境。
⛄ 部分代碼
clc;
clear all;
close all;
%1.初始參數設定子產品
%.傳感器節點區域界限(機關 M)
xm=100;
ym=100;
%(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(1,1)*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(1,1)*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;
for i=1:1:n
if(S1(i).E>0)
temp_rand=rand;
if ( (S1(i).G)<=0)
%簇頭的選舉,當選的簇頭會把各種相關信存入下面程式所給定的變量中
if(temp_rand<= (p/(1-p*mod(r,round(1/p)))))
countCHs1=countCHs1+1;
packets_TO_BS1=packets_TO_BS1+1;
PACKETS_TO_BS1(r+1)=packets_TO_BS1;
S1(i).type='C';
S1(i).G=round(1/p)-1;
C1(cluster1).xd=S1(i).xd;
C1(cluster1).yd=S1(i).yd;