资源简介
WSN仿真-MATLAB基于COMPOW协议下的网络连通率和覆盖率,附源代码(注释详尽)。WSN仿真-MATLAB基于COMPOW协议下的网络连通率和覆盖率,附源代码(注释详尽)。
代码片段和文件信息
%参数初始化、矩阵初始化
N=100;
M=(1000+1)*(1000+1); %将矩阵分为1000*1000份
r=0;
flag=zeros(1M); %这里定义为一维数组是为了在计算覆盖率的时候便于计算。先将其置零。
sum=0; %被覆盖的额数
x=rand(1N);
y=rand(1N);
%判断矩阵(节点)连通性,求出满足连通的最小半径
adjacencyMatrix=zeros(N);
for R=0:0.01:1
for i=1:N
for j=(i+1):1:N
if (x(i)-x(j))^2+(y(i)-y(j))^2 < R^2
adjacencyMatrix(ij)=1;
adjacencyMatrix(ji)=1;
end
end
end
S=zeros(N);
for m=1:1:N-1
S=S+adjacencyMatrix^m;
if all(all(S))==1
r=R;
break;
end
end
if(r~=0)
break;
end
end
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([0101]);
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)[000]);
axis([0101]);
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) if (x(m)-i)^2+(y(m)-j)^2 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 %输出覆盖率
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1930 2018-04-02 21:42 wsn2.m
文件 147922 2018-04-02 21:46 基于COMPOW协议下的网络连通率和覆盖率.docx
- 上一篇:维纳滤波Matlab实现
- 下一篇:遗传算法函数优化matlab代码
评论
共有 条评论