一、目的
①在不同節點個數的情況下,用Matlab擬合出連通率與通信半徑的關系曲線。
②在不同節點通信半徑的情況下,用Matlab擬合出連通率與節點個數的關系曲線。
二、方法描述
在1x1的單位矩形中隨機部署傳感器節點,而且假設每個節點的通信半徑一樣。在每一組節點個數和節點通信半徑下進行1000次試驗,進而分別模擬出連通率隨節點數增加以及通信半徑增加的變化趨勢。
關鍵算法即判斷節點網絡是否具有連通性,算法流程圖如下:
關鍵的程序設計在於找到與節點相連的節點的遞歸調用,通過不斷的搜索鄰接矩陣中的1,並在連通向量中標記已找到為連通的的點,最后通過計算連通向量的總和判斷是否連通。之后通過改變節點個數k和通信半徑r並嵌套以下實現1000次的連通判斷計算連通率:
for cishu=1:1000 p=rand(k,2); c=Connect(p,r); liantong=liantong+c; end liantonglv(i)=liantong/1000; plot(r,liantonglv(i),'b-*')
(1)在不同節點個數情況下,用Matlab擬合出連通率與通信半徑r的關系曲線如下圖:
在實驗過程中,取通信半徑r=0.5,節點個數k=50的網絡拓撲圖如下所示:
對於不同的節點個數及不同的網絡規模下,隨着通信半徑的增加,網絡連通率也在增加。但當通信半徑增加到某個臨近值時,網絡連通率近似維持在100%。且隨着節點個數的增加,臨界通信半徑減小。
(2)在不同通信半徑R情況下,用Matlab擬合出連通率與節點數量n的關系曲線如下圖:
在實驗過程中,取通信半徑r=0.35,節點個數k=30的網絡拓撲圖如下所示:
第4張圖中當只有一個節點時,連通率為1,所以出現連通率曲線銳減的現象。具有不同節點通信半徑的WSN,隨着節點個數的增加,網絡連通率也在增加。當節點個數增加到某個臨界值時,網絡連通率近似維持100%。且隨着節點通信半徑的增加,臨界節點個數減小。
三、結論
①給定節點數目,概率上隨機WSN保持連通的節點通信半徑存在下限。
②給定節點的通信半徑,概率上隨機WSN保持連通的節點個數存在上限。
四、MATLAB程序代碼
function [ C ] = Connect( graph,r ) adjmatrix=1.-im2bw(squareform(pdist(graph)),r); %生成鄰接矩陣 len=size(adjmatrix,1); quit=0; for n=1:len if sum(adjmatrix(n,:))==1 %排除孤立點 quit=1; end end %判斷連通性 if quit~=1 connected(len)=0; %已連接節點 connected(1)=1; connected=findconnected(1,adjmatrix,connected);%找到與節點1連接的節點 if sum(connected)==len C=1; else C=0; end else C=0; End function [connected]=findconnected(start,adjmatrix,connected) leaf=find(adjmatrix(start,:)==1);%找出與節點start直接相連的節點 len=size(leaf,2) ; flag=0; nflag=1; for n=1:len if connected(leaf(n))==0;%若節點已在連接向量(connected)中則跳過 flag(nflag)=leaf(n); nflag=nflag+1; end end len=size(flag,2) ; if flag~=0 for n=1:len connected(flag(n))=1; end for n=1:len connected=findconnected(flag(n),adjmatrix,connected);%查找當前節點的子節點 end end
如果自己向后退縮,就會被人推着向前。---黑柳徹子
轉載需說明出處,筆者總結之前的知識,與大家分享,有問題的可以留給我哦~