1 简介
COMPOW (COMMON POWER)协议是一种简单的将功率控制与路由协议相结合的解决方案,其基本思想是:所有的传感器节点使用一致的发射功率,在保证网络连通的前提下将功率最小化。COMPOW建立各个功率级的路由表,在功率Pi级时,通过使用功率Pi交换HELLO消息建立路由表RTpi,所有可达节点都是路由表中的表项。COMPOW选择最小的发射功率使得与最大发射功率具有相同数量的表项,于是整个网络使用公共的发射功率但该协议只适用于节点分布均匀的情况,缺陷较为明显。
①在固定节点个数的前提下,仿真求得使网络保持连通的最小通信半径(最低能级、COMPOW协议)。
②在以上通信半径的前提下,假设连通半径等于覆盖半径,计算随机布撒的节点的覆盖率。
在1x1的单位矩形中随机部署100个传感器节点,假设每个节点的连通半径一样。对节点划分为5个能级(一级:r=0.08, 二级:r=0.12,三级:r=0.16,四级:r=0.20,五级:r=0.24),分别模拟出连通率随节点能级的变化趋势,进而判断出使网络节点连通的最低能级r。
网络节点连通性判断采用Warshell算法,使用邻接矩阵(adjacencyMatrix)表示各节点之间的连通性能。在该算法中,矩阵adjacencyMatrix是判断矩阵, 表示从i到j连通,由于是无向图,进而从i到j也连通。
2 部分代码
%参数初始化、矩阵初始化
clc
clear all
close all
N=100;
M=(1000+1)*(1000+1); %将矩阵分为1000*1000份
r=0;
flag=zeros(1,M); %这里定义为一维数组是为了在计算覆盖率的时候便于计算。先将其置零。
sum=0; %被覆盖的额数
x=rand(1,N);
y=rand(1,N);
r %输出最小能级对应的半径
%绘制节点覆盖范围,并将其置为黑色。
angle=0:pi/50:2*pi;
for k=1:N
figure(1);
plot(r*cos(angle)+x(k),r*sin(angle)+y(k));
plot(x(k),y(k),'.');
axis([0,1,0,1]);
axis equal;
hold on ;
figure(2);
plot(r*cos(angle)+x(k),r*sin(angle)+y(k));
plot(x(k),y(k),'.');
fill(r*cos(angle)+x(k),r*sin(angle)+y(k),[0,0,0]);
axis([0,1,0,1]);
axis equal;
hold on ;
end
%把矩阵分成1000*1000份,逐一判断是否在覆盖范围内,并置标志位为1
for i=0:0.001:1 %把矩阵分成1000*1000份
for j=0:0.001:1
for m=1:N
if (i-r)<x(m) && x(m)<(i+r) &&(j-r)<y(m) && y(m)<(j+r)
if (x(m)-i)^2+(y(m)-j)^2<r^r
flag( int32(i*1000*1001+j*1000)+1 )=1; %将已经被覆盖的地方标记,从1开始,转化成整型
break; %已被覆盖就不用再计算
end
end
end
end
end
%计算覆盖率
for i=1:M
if flag(i)==1
sum=sum+1;
end
end
sum
double(sum/M) %输出覆盖率,转为double显示 0.1600 0.9760
% sum(flag==1)/M %输出覆盖率
3 仿真结果
4 参考文献
https://www.51dzw.com/embed/embed_78611.html
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。