目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

        无线Mesh网络是一种基于无线传感器网络的协议,它使用多个节点组成一个网络,节点之间相互通信,从而形成一个具有自组织和自修复能力的网络。在无线Mesh网络中,OLSR(Optimized Link State Routing)路由协议是一种非常重要的协议,它主要被用于MANET(Mobile Ad hoc network)网络。

OLSR路由协议的原理

       OLSR路由协议的核心思想是MPR(Multicast Protocol Routing,多播协议路由)。在OLSR中,每个节点都可以作为路由器和终端设备使用。节点之间通过广播和单播的方式进行通信,数据可以从源节点通过多个中间节点传输到目的节点。

OLSR路由协议的数学原理

  1. 邻居节点:如果节点可以监听到节点X,则节点X是节点的邻居节点。
  2. 跳邻居:通过邻居节点监听到的节点是2跳邻居节点,可以包含节点自身以及某些1跳邻居节点。
  3. 严格2跳邻居:即不是节点自身或其邻居节点,而是严格通过邻居节点监听到的节点。
  4. 孤立两跳邻节点:指仅通过一个邻节点同目标节点相连的两跳邻节点。
  5. 主要地址:在OLSR中,被定义为OLSR接口地址。
  6. 链路:两个不同OLSR节点接口之间相互监听形成链路。
  7. 对称链路:两个OLSR接口之间已经认证的双向链路。

OLSR路由协议的实现方式

       OLSR路由协议有很多种实现方式,最常见的包括Zigbee、Bluetooth Mesh、Thread等。其中,Zigbee是一种开放标准的Mesh组网协议,它采用了低功耗无线通信技术,具有自组织、低成本和低功耗等优点。而Bluetooth Mesh则是一种基于蓝牙技术的Mesh组网协议,它可以连接数百个设备,支持多种传输模式,包括广播、多播和单播等。

       总的来说,OLSR路由协议是一种非常高效的路由协议,它通过多跳的方式来进行数据的传输,从而增强了网络的稳定性和可靠性。同时,它也具有自组织和自修复的能力,这使得网络更加健壮和可靠。

        无线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走捷径。

二、核心程序

..............................................................

            %节点分布范围
            Nnode = 100;
            SCALE = 500;%
            %初始节点能量
            E0    = 1;
            %通信半径
            Radius= 100;%
            %节点最大移动速度
            Vmax  = 1;%
            %数据发送包速率
            Smax  = 20;%
            %数据发送包长度
            SLen  = 2000;%
            %节点通信阈值
            LRad  = 87;
            %电路能耗系数
            Eelec = 5e-8;
            %信道传播模型的能耗系数
            Efs   = 1e-11;
            %信道传播模型的能耗系数
            Emp   = 1.3e-15;
            %压缩比
            u     = 0.5;%
            %初始变异概率
            P     = 0.5;%
            %发送率
            Trans = 1.5;

            %%
            %构造一个多跳传输测试网络系统,OLSR协议的改进

            X       = rand(1,Nnode)*SCALE;  
            Y       = rand(1,Nnode)*SCALE; 
            %定义随机带宽
            Bw      = 100*rand(Nnode,Nnode);
            %顶级随机的丢包率
            Db      = rand(Nnode,Nnode)/20;

            %network topology 
            dmatrix0= zeros(Nnode,Nnode);
            Fmatrix0= zeros(Nnode,Nnode);
            Cmatrix0= zeros(Nnode,Nnode);
            for i = 1:Nnode 
                for j = 1:Nnode 
                    Dist          = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);
                    %距离因素
                    dmatrix0(i,j) = Dist;  
                end; 
            end; 
            %计算归一化值的最大值
            for i = 1:Nnode 
                for j = 1:Nnode 
                    Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);   
                    %网络优先级参数
                    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; 
                    %视频传输能力——即节点之间的传输损耗,用简化模型替代
                    if i == j
                       Cmatrix0(i,j) = 0;  
                    else
                       Cmatrix0(i,j) = 20*log10(Dist); 
                    end
                end; 
            end; 
            MAX_dmatrix = max(max(dmatrix0));
            MAX_Fmatrix = max(max(Fmatrix0));
            MAX_Cmatrix = max(max(Cmatrix0));

            matrix      = zeros(Nnode,Nnode);
            dmatrix     = zeros(Nnode,Nnode);
            Fmatrix     = zeros(Nnode,Nnode);
            Cmatrix     = zeros(Nnode,Nnode);

            for i = 1:Nnode 
                for j = 1:Nnode 
                    Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2); 
                    %a link; 
                    if Dist <= Radius & Dist > 0
                       matrix(i,j)  = 1;   
                       %距离因素
                       dmatrix(i,j) = Dist; 
                       %网络优先级参数
                       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; 
                       %视频传输能力——即节点之间的传输损耗,用简化模型替代
                       Cmatrix(i,j) = 20*log10(Dist); 
                    else 
                       matrix(i,j)  = inf; 
                       %距离因素
                       dmatrix(i,j) = inf; 
                       %网络优先级参数
                       Fmatrix(i,j) = inf; 
                       %视频传输能力——即节点之间的传输损耗,用简化模型替代
                       Cmatrix(i,j) = inf; 
                    end; 
                end; 
            end; 
            %归一化处理
            dmatrix = dmatrix/MAX_dmatrix;
            Fmatrix = Fmatrix/MAX_Fmatrix;
            Cmatrix = Cmatrix/MAX_Cmatrix;
            %路由优化算法的改进
            Tmatrix = (dmatrix + Fmatrix + Cmatrix)/3;
            %定义通信起始节点和终止节点
            tmp = randperm(Nnode);
            for i = 1:Nnode
                distA(i) = sqrt((X(i))^2 + (Y(i))^2);
                distB(i) = sqrt((X(i)-SCALE)^2 + (Y(i)-SCALE)^2);
            end
            [Va,Ia] = max(distA);
            [Vb,Ib] = max(distB);
            Sn  = Ia;
            En  = Ib;
            [paths,costs] = func_dijkstra(Sn,En,Tmatrix); 

            %通过遗传优化算法去搜索OLSR协议的最小MRP集
            if isempty(paths) == 0
               flags = 1; 
            end 

        end
        
        path = func_find_best_MRPset(paths,X,Y,Tmatrix,Nnode);
        path_distance=0; 
        ds=0;
        for d=2:length(paths) 
           path_distance= path_distance + MAX_dmatrix*dmatrix(paths(d-1),paths(d)); 
           ds(d)=MAX_dmatrix*dmatrix(paths(d-1),paths(d)); 
        end 
        %hop数量
        path_hops = length(paths); 
        %根据OSLR协议所建立的网络路径进行视频的传输
...............................................

三、测试结果

 A12-29

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐