一、目的
(1)在固定節點個數的前提下,仿真求得使網絡保持連通的最小通信半徑(最低能級)。
(2)在上述節點個數和通信半徑的前提下,計算隨機布撒的節點的覆蓋率。
二、方法描述
(1)首先假設通信半徑都等於感知半徑,並且每個節點發射功率均相同。在1x1的單位矩形中隨機部署100個傳感器節點,在每一節點通信半徑下進行1000次試驗,進而模擬出連通率隨通信半徑增加的變化趨勢。得出在1000點下保持網絡連通的最小通信半徑。
從上圖可以得出,每個節點得最小通信半徑為r=0.29。
(2)通過一次隨機布撒100個節點,並以每個節點為圓心,繪出半徑為0.29的圓。如下圖所示:
開始想利用微元的思想,將1x1的區域划分成100個小方格,但之后發現該方法復雜。實驗中采用將每個節點的圓(通信覆蓋范圍)填充為黑色,通過連通圖中黑白像素點的比例得到覆蓋率。覆蓋圖如下圖所示:
算法實現流程圖如下:
試驗中注意的是在得到網絡的覆蓋圖之后,需要將其進行處理,僅將1x1的區域截出進行計算,否則實驗結果會出現意外錯誤。
實現重要程序如下:
pp=imread('C:\Users\zhangkun\Desktop\1.png') p=rgb2gray(pp); m=0; len=size(p,1) lie=size(p,2) for i=1:len for j=1:lie if(p(i,j)==0) m=m+1; end end end fugailv=m/(len*lie)%0.9346
三、結論
在節點個數確定時,存在一個使網絡保持連通的最小通信半徑(最小能級),可以達到節約能量。本實驗中選取100個節點隨機布撒,通過1000次仿真得到網絡的最小通信半徑為0.29m,在該半徑下一次隨機布撒的覆蓋率為93.46%。
四、程序代碼
L=1; % 節點布置區域 theta=0:pi/100:2*pi; n=100; % 節點個數 node_max=0.29; % 節點最大通信距離 X=unifrnd(0,L,1,n); % 生成n個均勻隨機數作為橫坐標 B=sqrt(L^2-abs(X).^2); % 計算每個x對應的y范圍 Y=unifrnd(0,B,1,n); % 對每個橫坐標生成均勻隨機數作為縱坐標 plot(X,Y,'.') hold on axis equal; axis([0 1 0 1]); figure(1) for i=1:n hold on x=node_max*cos(theta)+X(i); y=node_max*sin(theta)+Y(i); plot(x,y,'b-') %fill(x,y,'k'); end figure(2) axis equal; axis([0 1 0 1]); for i=1:n hold on x=node_max*cos(theta)+X(i); y=node_max*sin(theta)+Y(i); %plot(x,y,'k-') fill(x,y,'k'); end pp=imread('C:\Users\kkzhang\Desktop\1.png') p=rgb2gray(pp); m=0; len=size(p,1) lie=size(p,2) for i=1:len for j=1:lie if(p(i,j)==0) m=m+1; end end end fugailv=m/(len*lie)%0.9346
生活中總有不期而遇的溫暖與生生不息的希望!
轉載需說明出處,筆者總結之前的知識,與大家分享,有問題的可以留給我哦~