利用MATLAB仿真最小發射功率下WSN的連通性和覆蓋率


一、目的

     (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

生活中總有不期而遇的溫暖與生生不息的希望!

轉載需說明出處,筆者總結之前的知識,與大家分享,有問題的可以留給我哦~

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM