- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系。
江南大学物联网-zk
PAGE5 / NUMPAGES5
一:题目
利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系。
二:目的
①在不同节点个数的情况下,用Matlab拟合出连通率与通信半径的关系曲线。
②在不同节点通信半径的情况下,用Matlab拟合出连通率与节点个数的关系曲线。
三:方法描述
在1x1的单位矩形中随机部署传感器节点,而且假设每个节点的通信半径一样。在每一组节点个数和节点通信半径下进行1000次试验,进而分别模拟出连通率随节点数增加以及通信半径增加的变化趋势。
关键算法即判断节点网络是否具有连通性,算法流程图如下:
图1 连通性判断算法
关键的程序设计在于找到与节点相连的节点的递归调用,通过不断的搜索邻接矩阵中的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的关系曲线如下图:
图2 连通率与通信半径
在实验过程中,取通信半径r=0.5,节点个数k=50的网络拓扑图如下所示:
图3 网络拓扑图
对于不同的节点个数及不同的网络规模下,随着通信半径的增加,网络连通率也在增加。但当通信半径增加到某个临近值时,网络连通率近似维持在100%。且随着节点个数的增加,临界通信半径减小。
(2)在不同通信半径R情况下,用Matlab拟合出连通率与节点数量n的关系曲线如下图:
图4 连通率与节点个数
在实验过程中,取通信半径r=0.35,节点个数k=30的网络拓扑图如下所示:
图5 网络拓扑图
图4中当只有一个节点时,连通率为1,所以出现连通率曲线锐减的现象。具有不同节点通信半径的WSN,随着节点个数的增加,网络连通率也在增加。当节点个数增加到某个临界值时,网络连通率近似维持100%。且随着节点通信半径的增加,临界节点个数减小。
四:实验结论
①给定节点数目,概率上???机WSN保持连通的节点通信半径存在下限。
②给定节点的通信半径,概率上随机WSN保持连通的节点个数存在上限。
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);%查找当前节点的子节点
e
文档评论(0)