小言_互联网的博客

基于无线Mesh网络OLSR路由协议的MATLAB仿真

358人阅读  评论(0)

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

        无线Mesh网络其也可以称为无线网状网络或者无线多跳网络,其具有动态自组织、自配置、易于维护等优点,同时还具备成本较低,系统运行稳定的优势。无线Mesh网络将移动节点和固定节点通过无线链路进行相互链接,组成一个多跳移动的自组无线网络。无线Mesh网络的构建是基于Ad Hoc无线网络之上的,因此,在其拓扑结构上和Ad Hoc无线网络具有较多的相似点。无线Mesh网络能够灵活快速的实现各种场合的组网,因此具有极其广泛的应用前景。无线Mesh网络结构的基本示意图如下图所示:

       对于OLSR路由协议,通过Dijkstra算法计算无线Mesh网络G中的N个sd的路径,主要步骤如下所示:

       Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。选择特殊路径长度最短的路径,将其连接的V-S中的顶点加入到集合S中,同时更新数组dist。一旦S包含了所有顶点,dist[]就是从源到所有其他顶点的最短路径长度。
(1)数据结构。 设置地图的带权邻接矩阵为map[][],即如果从源点u到顶点i有边,就令map[u][i]=<u,i>的权值,否则map[u][i]=∞;采用一维数组dist[i]来记录从源点到i顶点的最短路径长度:采用一维数组p[i]来记录最短路径上i顶点的前驱。
(2)初始化。令集合S={u},对于集合V-S中的所有顶点x,初始化dist[i]=map[u][i],如果源点u到顶点i有边相连,初始化p[i]=u(i的前驱是u),否则p[i]=-1
(3)找最小。在集合V-S中依照贪心策略来寻找使得dist[j]具有最小值的顶点t,即dist[t]=min,则顶点t就是集合V-S中距离源点u最近的顶点。
(4)加入S战队。将顶点t加入集合S,同时更新V-S
(5)判结束。如果集合V-S为空,算法结束,否则转6
(6)在(3)中已近找到了源点到t的最短路径,那么对集合V-S中所有与顶点t相邻的顶点j,都可以借助t走捷径。

二、核心程序


  
  1. ..............................................................
  2. %节点分布范围
  3. Nnode = 100;
  4. SCALE = 500; %
  5. %初始节点能量
  6. E0 = 1;
  7. %通信半径
  8. Radius= 100; %
  9. %节点最大移动速度
  10. Vmax = 1; %
  11. %数据发送包速率
  12. Smax = 20; %
  13. %数据发送包长度
  14. SLen = 2000; %
  15. %节点通信阈值
  16. LRad = 87;
  17. %电路能耗系数
  18. Eelec = 5e-8;
  19. %信道传播模型的能耗系数
  20. Efs = 1e-11;
  21. %信道传播模型的能耗系数
  22. Emp = 1.3e-15;
  23. %压缩比
  24. u = 0.5; %
  25. %初始变异概率
  26. P = 0.5; %
  27. %发送率
  28. Trans = 1.5;
  29. %%
  30. %构造一个多跳传输测试网络系统,OLSR协议的改进
  31. X = rand( 1,Nnode)*SCALE;
  32. Y = rand( 1,Nnode)*SCALE;
  33. %定义随机带宽
  34. Bw = 100*rand(Nnode,Nnode);
  35. %顶级随机的丢包率
  36. Db = rand(Nnode,Nnode)/ 20;
  37. %network topology
  38. dmatrix0= zeros(Nnode,Nnode);
  39. Fmatrix0= zeros(Nnode,Nnode);
  40. Cmatrix0= zeros(Nnode,Nnode);
  41. for i = 1:Nnode
  42. for j = 1:Nnode
  43. Dist = sqrt((X(i) - X(j))^ 2 + (Y(i) - Y(j))^ 2);
  44. %距离因素
  45. dmatrix0(i,j) = Dist;
  46. end;
  47. end;
  48. %计算归一化值的最大值
  49. for i = 1:Nnode
  50. for j = 1:Nnode
  51. Dist = sqrt((X(i) - X(j))^ 2 + (Y(i) - Y(j))^ 2);
  52. %网络优先级参数
  53. Fmatrix0(i,j) =((Bw(i,j)-min(min(Bw)))/min(min(Bw)) + (max(max(dmatrix0))-dmatrix0(i,j))/max(max(dmatrix0)) + ( 1-Db(i,j)))/ 3;
  54. %视频传输能力——即节点之间的传输损耗,用简化模型替代
  55. if i == j
  56. Cmatrix0(i,j) = 0;
  57. else
  58. Cmatrix0(i,j) = 20*log10(Dist);
  59. end
  60. end;
  61. end;
  62. MAX_dmatrix = max(max(dmatrix0));
  63. MAX_Fmatrix = max(max(Fmatrix0));
  64. MAX_Cmatrix = max(max(Cmatrix0));
  65. matrix = zeros(Nnode,Nnode);
  66. dmatrix = zeros(Nnode,Nnode);
  67. Fmatrix = zeros(Nnode,Nnode);
  68. Cmatrix = zeros(Nnode,Nnode);
  69. for i = 1:Nnode
  70. for j = 1:Nnode
  71. Dist = sqrt((X(i) - X(j))^ 2 + (Y(i) - Y(j))^ 2);
  72. %a link;
  73. if Dist <= Radius & Dist > 0
  74. matrix(i,j) = 1;
  75. %距离因素
  76. dmatrix(i,j) = Dist;
  77. %网络优先级参数
  78. Fmatrix(i,j) = ((Bw(i,j)-min(min(Bw)))/min(min(Bw)) + (max(max(dmatrix0))-dmatrix0(i,j))/max(max(dmatrix0)) + ( 1-Db(i,j)))/ 3;
  79. %视频传输能力——即节点之间的传输损耗,用简化模型替代
  80. Cmatrix(i,j) = 20*log10(Dist);
  81. else
  82. matrix(i,j) = inf;
  83. %距离因素
  84. dmatrix(i,j) = inf;
  85. %网络优先级参数
  86. Fmatrix(i,j) = inf;
  87. %视频传输能力——即节点之间的传输损耗,用简化模型替代
  88. Cmatrix(i,j) = inf;
  89. end;
  90. end;
  91. end;
  92. %归一化处理
  93. dmatrix = dmatrix/MAX_dmatrix;
  94. Fmatrix = Fmatrix/MAX_Fmatrix;
  95. Cmatrix = Cmatrix/MAX_Cmatrix;
  96. %路由优化算法的改进
  97. Tmatrix = (dmatrix + Fmatrix + Cmatrix)/ 3;
  98. %定义通信起始节点和终止节点
  99. tmp = randperm(Nnode);
  100. for i = 1:Nnode
  101. distA(i) = sqrt((X(i))^ 2 + (Y(i))^ 2);
  102. distB(i) = sqrt((X(i)-SCALE)^ 2 + (Y(i)-SCALE)^ 2);
  103. end
  104. [Va,Ia] = max(distA);
  105. [Vb,Ib] = max(distB);
  106. Sn = Ia;
  107. En = Ib;
  108. [paths,costs] = func_dijkstra(Sn,En,Tmatrix);
  109. %通过遗传优化算法去搜索OLSR协议的最小MRP集
  110. if isempty(paths) == 0
  111. flags = 1;
  112. end
  113. end
  114. path = func_find_best_MRPset(paths,X,Y,Tmatrix,Nnode);
  115. path_distance= 0;
  116. ds= 0;
  117. for d= 2:length(paths)
  118. path_distance= path_distance + MAX_dmatrix*dmatrix(paths(d- 1),paths(d));
  119. ds(d)=MAX_dmatrix*dmatrix(paths(d- 1),paths(d));
  120. end
  121. %hop数量
  122. path_hops = length(paths);
  123. %根据OSLR协议所建立的网络路径进行视频的传输
  124. ...............................................

三、测试结果

 A12-29


转载:https://blog.csdn.net/ccsss22/article/details/127781313
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场