1.程式功能描述
對感測器網路進行分簇,在分簇過程中考量的有節點能量狀態、節點拓撲位置、孤立節點刪除等條件。與LEACH演算法比較,對比如下幾個方面指標:
1.網路從初始狀態直到首個節點因能量耗盡而死亡的持續時間。
2.顯示了隨著時間的變化,一些節點開始死亡,整個網路的可用率下降的趨勢情況。實驗的終止條件為當網路可用節點下降至 75%時。
3.隨時間變化時網路所有節點能量消耗情況。
2.測試軟體版本以及執行結果展示
MATLAB2022a版本執行
3.核心程式
STATISTICS.COUNTCHS(ij+1) = CH_num; %簇內成員選擇簇頭模組(即簇的形成模組) for c=1:1:Cluster-1 xr(c)=0; end yr = 0; zr = 0; for i=1:1:Node if Snode(i).type=='N' && Snode(i).E>0 if Cluster-1>=1 min_dis = sqrt( (Snode(i).xd-Snode(Node+1).xd)^2 + (Snode(i).yd-Snode(Node+1).yd)^2 ); min_dis_cluster = 0; for c=1:Cluster-1 temp = min(min_dis,sqrt((Snode(i).xd-C(c).xd)^2 + (Snode(i).yd-C(c).yd)^2 )); if temp<min_dis min_dis = temp; min_dis_cluster = c; xr(c) = xr(c)+1; end end if(min_dis_cluster~=0) %簇內節點(傳送4000bit資料)能量消耗 if min_dis > do Snode(i).E=Snode(i).E - (ETX*(NByte*Byte) + Emp*NByte*Byte*(min_dis * min_dis * min_dis * min_dis)); end if min_dis <= do Snode(i).E=Snode(i).E - ETX*(NByte*Byte) + Efs*NByte*Byte*( min_dis * min_dis); end ch_packet = ch_packet+1; end %簇頭的能量消耗 Snode(i).min_dis = min_dis; Snode(i).min_dis_cluster = min_dis_cluster; else yr = yr+1; if min_dis>do Snode(i).E=Snode(i).E-(ETX*(NByte*Byte) + Emp*NByte*Byte*( min_dis * min_dis * min_dis * min_dis)); end if min_dis<=do Snode(i).E=Snode(i).E-(ETX*(NByte*Byte) + Efs*NByte*Byte*( min_dis * min_dis)); end bs_packet=bs_packet+1; end end end end LIVEs = Node - STATISTICS.DEAD; ind1 = find(abs(LIVEs - 199)<5);%一個死亡節點 ind2 = find(abs(LIVEs - 150)<5);%存活75%節點 T1 = ind1(1); T2 = ind2(1); figure plot(LIVEs,'b'); hold on plot(T1*ones(1,200),0:199,'r'); hold on plot(1:T1,199*ones(size([1:T1])),'r'); hold on plot(T2*ones(1,151),0:150,'r'); hold on plot(1:T2,150*ones(size([1:T2])),'r'); hold on xlabel('x(time)'); ylabel('y(live)'); title('首個節點因能量耗盡而死亡的持續時間'); axis([0,500,0,220]); text(T1,199,['1個死亡節點']); text(T2,150,['25%死亡節點']); figure plot(Egc,'b'); xlabel('x(time)'); ylabel('y(consumption)'); title('LEACH的網路能量消耗對比'); axis([0,500,0,800]); save R0.mat Egc LIVEs T1 T2 12_031m
4.本演算法原理
無線感測器網路(Wireless Sensor Networks, WSNs)由大量部署在監測區域內的微型感測器節點組成,透過無線通訊方式形成一個多跳的自組織網路系統。其目的是協作地感知、採集和處理網路覆蓋區域中被感知物件的資訊,併傳送給觀察者。在WSNs中,節點分簇是一種重要的網路拓撲控制方法,能有效提高網路的可擴充套件性、能效和生命週期。
4.1節點分簇演算法的基本概念
節點分簇是將網路中的節點劃分為不同的簇,每個簇由一個簇頭(Cluster Head, CH)和多個簇成員(Cluster Members, CMs)組成。簇頭負責管理和協調簇內的成員節點,同時負責與其他簇頭或基站(Base Station, BS)進行通訊。透過分簇,可以實現以下目標:
能量高效:簇頭可以進行資料融合,減少傳輸的資料量,從而節省能量。
可擴充套件性:簇結構可以適應網路規模的變化。
提高網路生命週期:透過輪換簇頭的方式,可以均衡網路中的能量消耗。
4.2節點分簇演算法實現步驟
整個網路有一個匯聚節點(Sink節點),能量足夠大,相當於基站,其功率足以傳送資訊至全網節點,Sink節點和簇頭資訊交換,整個網路共有n個節點。
(1) 在初始狀態下,網內各節點向Sink節點傳送能量狀態資訊。
(2) 匯聚節點收到各節點的能量狀態資訊後,計算平均能量、最大能量,據此標識各節點為強節點或弱節點。若節點i的能量E(i)≥Eav,則標識為強節點,其標識S(i)=1;若E(i)<Eav,則標識為若節點,其標識S(i)=0。
(4) 具有最大權值的未加入簇的強節點宣告為簇頭,利用歐氏距離分簇,重複這一過程,直到所有的節點都被分配入簇。僅當已無強節點剩餘時,弱節點方能擔當簇頭的備選物件。
(5) 若只有單一簇頭而沒有簇成員,則該簇頭認為是異常孤立節點,直接刪除。
(6) 經過一輪的時間段,重複(2)~(6)過程以開始下一輪的分簇。