• 大小: 141KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: WSN仿真  

资源简介

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

评论

共有 条评论