• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、目的

       ①在不同节点个数的情况下,用Matlab拟合出连通率与通信半径的关系曲线。

       ②在不同节点通信半径的情况下,用Matlab拟合出连通率与节点个数的关系曲线。

二、方法描述

       在1x1的单位矩形中随机部署传感器节点,而且假设每个节点的通信半径一样。在每一组节点个数和节点通信半径下进行1000次试验,进而分别模拟出连通率随节点数增加以及通信半径增加的变化趋势。

       关键算法即判断节点网络是否具有连通性,算法流程图如下:

         关键的程序设计在于找到与节点相连的节点的递归调用,通过不断的搜索邻接矩阵中的1,并在连通向量中标记已找到为连通的的点,最后通过计算连通向量的总和判断是否连通。之后通过改变节点个数k和通信半径r并嵌套以下实现1000次的连通判断计算连通率:

for cishu=1:1000
        p=rand(k,2);
        c=Connect(p,r);
        liantong=liantong+c;
        end
    liantonglv(i)=liantong/1000;        
    plot(r,liantonglv(i),'b-*')
 

       1)在不同节点个数情况下,用Matlab拟合出连通率与通信半径r的关系曲线如下图:

         在实验过程中,取通信半径r=0.5,节点个数k=50的网络拓扑图如下所示:

         对于不同的节点个数及不同的网络规模下,随着通信半径的增加,网络连通率也在增加。但当通信半径增加到某个临近值时,网络连通率近似维持在100%。且随着节点个数的增加,临界通信半径减小。

      (2)在不同通信半径R情况下,用Matlab拟合出连通率与节点数量n的关系曲线如下图:

        在实验过程中,取通信半径r=0.35,节点个数k=30的网络拓扑图如下所示:

        第4张图中当只有一个节点时,连通率为1,所以出现连通率曲线锐减的现象。具有不同节点通信半径的WSN,随着节点个数的增加,网络连通率也在增加。当节点个数增加到某个临界值时,网络连通率近似维持100%。且随着节点通信半径的增加,临界节点个数减小。

三、结论

       ①给定节点数目,概率上随机WSN保持连通的节点通信半径存在下限。

       ②给定节点的通信半径,概率上随机WSN保持连通的节点个数存在上限。

四、MATLAB程序代码

function [ C ] = Connect( graph,r ) 
adjmatrix=1.-im2bw(squareform(pdist(graph)),r); %生成邻接矩阵  
len=size(adjmatrix,1);  
quit=0;  
for n=1:len   
    if sum(adjmatrix(n,:))==1      %排除孤立点  
        quit=1;  
    end  
end

%判断连通性
if quit~=1  
    connected(len)=0; %已连接节点  
    connected(1)=1;  
    connected=findconnected(1,adjmatrix,connected);%找到与节点1连接的节点  
    if sum(connected)==len  
        C=1;  
    else  
        C=0;  
    end  
else  
    C=0;  
End

function [connected]=findconnected(start,adjmatrix,connected)
leaf=find(adjmatrix(start,:)==1);%找出与节点start直接相连的节点  
len=size(leaf,2) ; 
flag=0;  
nflag=1;  
for n=1:len  
if connected(leaf(n))==0;%若节点已在连接向量(connected)中则跳过  
    flag(nflag)=leaf(n);  
    nflag=nflag+1;  
end  
end  
len=size(flag,2) ; 
if flag~=0  
for n=1:len  
    connected(flag(n))=1;  
end  
for n=1:len  
connected=findconnected(flag(n),adjmatrix,connected);%查找当前节点的子节点  
end  
end

如果自己向后退缩,就会被人推着向前。---黑柳彻子

转载需说明出处,笔者总结之前的知识,与大家分享,有问题的可以留给我哦~


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[算法Rust,Go,Python,JS实现)]LeetCode之38-报数发布时间:2022-07-18
下一篇:
matlab与VC6.0混合编程设置发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap