无线网络技术课程论文-在NN的网络拓扑下双信道的分配问题及编程实现分配算法.doc_第1页
无线网络技术课程论文-在NN的网络拓扑下双信道的分配问题及编程实现分配算法.doc_第2页
无线网络技术课程论文-在NN的网络拓扑下双信道的分配问题及编程实现分配算法.doc_第3页
无线网络技术课程论文-在NN的网络拓扑下双信道的分配问题及编程实现分配算法.doc_第4页
无线网络技术课程论文-在NN的网络拓扑下双信道的分配问题及编程实现分配算法.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无线网络技术课程论文在N*N的网络拓扑下双信道的分配问题及编程实现分配算法 空白小龙现有的WMN基本上都是采用单信道MAC协议。这种技术限制了整个网络的数据传输速率与网络容量,因为根据无线信道特点,当一个节点向另一个节点传输数据的时候,为了避免冲突,两个节点的所有领节点都不能够进行数据传送(如下图),这就极大地限定了整个网络的容量。 信道1 信道1DCBA单信道MAC协议下节点的数据传输 尽管现有的802.11a/b/g与802.16协议在物理层技术上有了很大的进步,如采取了一些有效的功率控制等方法,但仍然不能从根本上满足今天人们对网络带宽日益增大的需求。802.11a/g标准标称的带宽为54Mb/s,但这只是在峰值速率,而在真正应用过程中,由于用户接入时会发生多用户冲突、丢包错误等,因此真正的可达带宽几乎只有标称值的一半。另外,随着接收双方通信距离的增大,数据传输速率会显著下降。 幸运的是,802.11b/g标准和802.11a标准分别提供3个和12个没有交迭的信道(频点),使相邻的节点可以同时使用不同的信道。如果网络中的节点能够同时使用多个信道(如下图),就可以提高网络吞吐量。信道1 信道2DCBA多信道MAC协议下节点的数据传输实际上,早在移动Ad Hoc网络的设计中,人们就用了多信道的设计思想来提高网络的传输速率与网络容量。WMN是Ad Hoc网络的一种特例,因此,人们仍然可以采用多信道MAC机制,来设计WMN的多信道MAC协议。多信道MAC协议概括起来,主要有以下几种:按控制信道分,有专用控制信道的多信道MAC协议和无专用控制信道的多信道MAC协议。前者采用专用的射频(一直在控制信道上)来传递控制信息,这样,能够更有效地传递控制信息,但信道的利用率不高。而后者不能有效地传递控制信息。按节点射频分,有多射频多信道MAC协议和单射频多信道MAC。前者每个节点有多个射频,这样节点可以同时在多个信道上传输数据,可以再多个信道上实现“边说边听”的功能,更有效地控制节点的传输。基于这个问题,我通过编程实现了在N*N的网络拓扑下双信道的分配算法,并用图形化的形式很好的展示了在N*N的网络拓扑下双信道(信道1、信道2)的分配情况,通过构建了三个数据结构(图Graph、边ArcCell、点VertexType),编写的信道分配算法我把它命名为Blank算法BlankAlgorithm。下面是实现了的在N*N的网络拓扑下双信道的分配算法的运行界面截图,之后再详细的分析此算法的实现过程以及具体解释它的运算机理。3*3的网络拓扑下双信道(信道1、信道2)的分配情况4*4的网络拓扑下双信道(信道1、信道2)的分配情况5*5的网络拓扑下双信道(信道1、信道2)的分配情况6*6的网络拓扑下双信道(信道1、信道2)的分配情况下面通过结合Blank算法中的数据结构和具体的代码对3*3的网络拓扑下双信道(信道1、信道2)的分配情况这个特例来分析并且详细解释Blank算法的思考过程及原理。下面是所有文件的截图:Blank算法数据结构的核心是图、边、点。图点边Graph.java/图public class Graphint row;/行数int line;/列数int vexnum,arcnum;/节点的数目和边的数目VertexType vex;/图中节点的数据结构类VertexTypeArcCell arcs;/图中边的数据结构类ArcCell/构造方法public Graph()/在构造方法中对各个数据结构的属性赋值public Graph(int row,int line)this.row=row;this.line=line;/点数=行数*列数vexnum=row*line;/边数的求法arcnum=row*(line-1)+line*(row-1);/实例所有的点vex=new VertexTyperow*line;/实例所有的边arcs=new ArcCellrow*linerow*line;ArcCell.java/边public class ArcCellint ChannelNumber;/边上的信道信息VertexType.java/点public class VertexTypeint Number; /点上的节点信息BlankAlgorithm.java/Blank算法public class BlankAlgorithm /构造方法public BlankAlgorithm()/Blank算法,方法的参数为一个图类Graph Gpublic static Graph BlankAlg(Graph G)int i,j,cou;int k=0;/给图G的每一个点初始化for(i=0;iG.vexnum;i+)G.vexi=new VertexType();/给图G的每一条边初始化for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=new ArcCell();/给图G的每一个点上的节点信息赋值为ifor(i=0;iG.vexnum;i+)G.vexi.Number=i;/* * 给图G的每一条边上的信道信息初始化为10000,这里的边是双向的边,一共有vexnum*vexnum条 * 在Blank算法中信道信息可以赋值的有以下几种: * 10000(表示不可通信)、10001(表示此边受到信道1的干扰)、10002(表示此边受到信道2的干扰) * 0(表示可以通信)、1(表示使用信道1)、2(表示使用信道2) */for(i=0;iG.vexnum;+i)for(j=0;jG.vexnum;+j) G.arcsij.ChannelNumber=10000;/在行方向对其中可以使用信道的边上的信道信息赋值为0for(i=0;iG.row;+i)for(j=0,k=0;jG.line&(k+1)G.line;+j,+k)G.arcsk+i*G.rowk+1+i*G.line.ChannelNumber=0;k=0;/在列方向对其中可以使用信道的边上的信道信息赋值为0for(j=0;(j+1)G.line;+j)for(i=0,k=0;iG.row;+i,+k)G.arcsk+j*G.linek+(j+1)*G.row.ChannelNumber=0;/Blank算法的核心部分,循环查找并给边的信道信息赋值for(i=0;iG.vexnum;+i)for(j=0;jG.vexnum;+j) /只有信道信息初始化为0的边才需检测其信道信息if(G.arcsij.ChannelNumber=0)/检测是否已经获得信道,或者是否受到其他边上信道的干扰for(cou=0;couG.vexnum;+cou)/如果此边信道信息初始化为0,并且受到其他边上信道1的干扰,那么就要分配信道2给它if(G.arcsicou.ChannelNumber=10001)G.arcsij.ChannelNumber=2;/分配信道2/分配信道2后给与此边相邻的所有边的信道信息赋值为10002,即使其他边受到信道2的干扰for(int m=0;mG.vexnum;m+)/如果与此边相邻的边原来的信道信息为0才能重新赋值为10002/与i端相邻的边if(G.arcsim.ChannelNumber=0)G.arcsim.ChannelNumber=10002;G.arcsmi.ChannelNumber=10002;/与j端相邻的边if(G.arcsjm.ChannelNumber=0)G.arcsjm.ChannelNumber=10002;G.arcsmj.ChannelNumber=10002;break;/如果此边信道信息初始化为0并且受到其他边上信道2的干扰或者一直都没有使用到信道,那么就要分配信道1给它if(G.arcsicou.ChannelNumber=10002|G.arcsicou.ChannelNumber=0) G.arcsij.ChannelNumber=1;/分配信道1/分配信道1后给与此边相邻的所有边的信道信息赋值为10001,即使其他边受到信道1的干扰for(int m=0;mG.vexnum;m+)/如果与此边相邻的边原来的信道信息为0才能重新赋值为10001/与i端相邻的边if(G.arcsim.ChannelNumber=0)G.arcsim.ChannelNumber=10001;G.arcsmi.ChannelNumber=10001;/与j端相邻的边if(G.arcsjm.ChannelNumber=0)G.arcsjm.ChannelNumber=10001;G.arcsmj.ChannelNumber=10001;break;break;return G;/返回已经带了分配好信道信息的图GBlankGraphicalInterface.java由于此文件是实现图形化界面使用到的文件,在此就不给出全部代码,只给出其中与图、边、点所用来画图的代码:/画图的方法,分别调用了画圆、画线、画节点信息、画边的信道信息public void paint(Graphics g)/画圆的方法drawCircles(g);/画线的方法drawLines(g);/初始化图G,把从输入框输入的N*N的数据赋到构造方法中G=new Graph(row,line);/通过Blank算法得到一个新的图G,此时G中包括了已经计算出的信道分配信息G=BlankAlgorithm.BlankAlg(G);/画节点信息的方法drawStrings(g,G);/画边的信道信息的方法drawChannelNumbers(g,G);/画圆的方法private void drawCircles(Graphics g)for(int i=0;irow;i+)for(int j=0;jline;j+)g.drawOval(30+i*140, 90+j*140, 60, 60);/画线的方法private void drawLines(Graphics g)/从行方向画线for(int i=0;irow;i+)for(int j=0;jline-1;j+)g.drawLine(90+j*140, 120+i*140, 170+j*140, 120+i*140);/从列方向画线for(int i=0;irow;i+)for(int j=0;jline-1;j+)g.drawLine(60+i*140, 150+j*140, 60+i*140, 230+j*140);/画节点信息的方法private void drawStrings(Graphics g,Graph G)for(int i=0;irow;i+)for(int j=0;jline;j+)g.drawString(节点+(G.vexi+j*row.Number+1), 47+i*140, 122+j*140);/画边的信道信息的方法private void drawChannelNumbers(Graphics g,Graph G)/如果边上的信道信息是1或者2才显示出来,如果是10000或者10001或者10002就不显示了/从行方向for(int i=0;irow;i+)for(int j=0;jline-1;j+) if(G.arcsrow*i+jrow*i+j+1.ChannelNumber=1|G.arcsrow*i+jrow*i+j+1.ChannelNumber=2)g.drawString(+G.arcsrow*i+jrow*i+j+1.ChannelNumber, 123+j*140, 113+i*140);/从列方向for(int i=0;irow;i+)for(int j=0;jline-1;j+)if(G.arcsi+j*rowi+j*row+row.ChannelNumber=1|G.arcsi+j*rowi+j*row+row.ChannelNumber=2)g.drawString(+G.arcsi+j*rowi+j*row+row.ChannelNumber, 48+i*140, 190+j*140);3*3的网络拓扑下双信道(信道

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论