WSN覆盖率求解

背景介绍:

       这学期我们开通了高大上的WSN课,老师是海龟,出题总是搞原创,对于习惯于用百度一下你就知道的90后,这可苦了我和我的小伙伴们(WZ,ZHR,YCX),于是不得不重操那个大一时候我们会一个一个字母读的MATLAB,废话不多说,直接上题目。

一、问题描述

         传感器网络随机部署在单位正方形内,假设通信半径=覆盖半径,求出WSN覆盖率

       A WSN randomlydeployed in a unit square. Nodecommunication radius=Node coverage radius

Determine COMPOWto ensure network connectivity.Find the WSN coverageratio

二、问题分析

       首先,建立一个WSN模型,假设在单位正方形内随机部署100个传感器,逐渐增加通信半径,使WSN网络恰好连通,然后将单位正方形虚拟分割成N*N个方格,当N足够大的时候,微积分思想出现了,以每个交叉点代表小方格,判断交叉点是否被覆盖来解决覆盖率问题,在这里假设N=1000.

       关于WSN网络是否连通,我们首先判断两点直接的连接情况,构建邻接矩阵,采用矩阵幂算法,对于邻接矩阵M,有S矩阵S=M+M^2+M^3+...+M^(N-1);其中N是M的行数或列数,若S中有元素为零,则不连通。

       网络连通性参考文献:《基于邻接矩阵图的连通性判定准则》(贾进章,刘剑,宋寿森辽宁工程技术大学学报 第22卷第2期 2003年4月)

       WSN的连通性判断解决之后,WSN覆盖率就可以用单位正方形交叉点被覆盖总数除以所有交叉点。

三、MATLAB代码展示

N=100;%在单位正方形内部署100个点
M=(1000+1)*(1000+1);
r=0;
flag = zeros(1,M);%用来标记每个方格交叉点是否被覆盖
%%Increasing COMPOW gradually to approximate the minimum  COMPOW (below)
x=rand(1,N);%传感器位置横坐标
y=rand(1,N);%传感器位置纵坐标
adjacencyMatrix=zeros(N);%定义传感器互联邻接矩阵
for R=0:0.01:1
    for i=1:1:N
        for j=(i+1):1:N
            if (x(i)-x(j))^2+(y(i)-y(j))^2<R^2 
                adjacencyMatrix(i,j)=1;
                adjacencyMatrix(j,i)=1;
            end
        end
    end    %此时已经产生了传感器的邻接矩阵

    S=zeros(N);
    for m=1:1:N-1
        S=S+adjacencyMatrix^m;  %对于M,有S矩阵
    %S=M+M^2+M^3+...+M^(N-1);
    %其中N是M的行数或列数
    %若S中有元素为零,则不连通;
    %S中无零,则连通,
    %《基于邻接矩阵图的连通性判定准则》查到的
        if all(all(S))==1       %判断S向量是不是全为非零元素
            r=R;
            break;
        end
    end 
    if(r~=0)
        break;
    end
end
r  %Increasing COMPOW gradually to approximate the minimum  COMPOW (above)
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),'b');
    axis([0,1,0,1]);
    axis equal;
    hold on;
end   %画图
for i=0:0.001:1
    for j=0:0.001:1   %把单位正方形分成1000*10000个表格
        for m=1:N
      %鉴于乘法运算速度要慢于加法运算,这里是对算法进行优化
      %通过第一个if排除掉一些传感器,减少运算量
            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;
                    break;
                end                    
            end
        end
    end   
end
sum(flag==1)/M %求出覆盖率


四、实验结果

 

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值