简述:
实验要求我们将传感器节点随机均匀分布在1x1的方格中,然后计算节点的最小共同发射功率(COMPOW),保证网络刚好连通,并计算出这些节点的覆盖率。为了解决这个问题,我们的做法是随机均匀部署100个节点在1x1的方格中,结合判断连通性的算法[1],找出它们刚好连通时每个节点的最小通信半径,然后根据简化的路径损耗模型计算出此时的的发射功率,即我们求的COMPOW值;在计算覆盖率的时候,我们利用微元的思想,将 的方格划分成许多小正方形组成,然后统计覆盖区域小方格个数占总小方格个数的比例,该值近似为所求的覆盖率(方格越多,结果越精确)。
建模过程:
首先假设通信半径都等于感知半径,并且每个节点发射功率均相同。
1. 解最小通信半径
① 求出任意节点之间的距离(即通信半径),并递增排列;
② 利用实验一连通性的算法从①中递增距离中找出刚好使这些节点连通的距离。即最小通信半径d。
③ 利用简化的路径损耗模型计算出最小的共同发射功率 Pcompow:
2. 求解覆盖率
我们首先对半径为d的100个圆填充颜色,利用微元的思想,将1x1的方格划分成很多正方形小格,然后计算出覆盖区域所占的小方格数。
但是划分小方格程序上比较麻烦,于是我们想到了利用图像处理的方法,图像本身存储的就是矩阵,灰度图像矩阵元素的取值范围为p=[0,255],二值化处理后p=0 or 255,p=0代表纯黑色,p=255代表纯白色。于是利用Matlab的imread()函数将产生的图像转化为矩阵,统计里面0的个数(覆盖区域为黑色),再除以总的矩阵大小(这里为341x341),即为所求覆盖率,具体过程如下图:
图1 图像简单处理过程
画圆及填充的代码:
1 clear all; 2 clc; 3 graph=rand(100,2); %产生随机图 4 dis=sort(pdist(graph));%产生任意两点之间的递增距离表 5 theta=0:pi/100:2*pi; 6 for n=1:size(dis,2);%递增距离 7 if Connect(graph,dis(n))==1%判断是否连通 8 d=dis(n);%最小连通距离 9 break; 10 end 11 end 12 figure(1); 13 axis equal; 14 axis([0 1 0 1]); 15 for n=1:100 16 hold on 17 x = d*cos(theta) + graph(n,1); 18 y = d*sin(theta) + graph(n,2); 19 plot(x,y,'-'); 20 fill(x,y,'k'); 21 end 22 figure(2); 23 axis equal; 24 axis([0 1 0 1]); 25 for i=1:100 26 hold on 27 x = d*cos(theta) + graph(i,1); 28 y = d*sin(theta) + graph(i,2); 29 plot(x,y,'-'); 30 end