基于matlab的卫星网络DCAR编码感知路由发现仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于matlab的卫星网络DCAR编码感知路由发现仿真相关的知识,希望对你有一定的参考价值。

FPGA教程目录

MATLAB教程目录

-----------------------------------------------------------------------

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       当一个源节点有数据要向目的节点发送且在当前路由缓存中未发现可用路径时,则启动路由请求过程,下面分步对该过程进行说明:

步骤1:路由建立初期,源节点需要向所有邻居节点发送路由请求信息REQ,转向步骤2;

步骤2:中间节点收到REQ后将依次进行如下处理:

(1)检查本节点的地址是否出现在REQ所保存的路由记录中,如果是,为避免出现环路,则丢弃该RREQ不再处理;

(2)检查本节点地址是否与RREQ中记录的目的地址吻合,如果是,那么此时该节点为目的节点,将进入路由反馈阶段;否则临时存储该RREQ,然后把当前节点信息及其邻居节点信息分别添加到REQ的NodeID和Neighbors中,广播更新后的REQ。重复步骤2直至其到达目的节点。

目的节点按照如下步骤进行路由反馈:

步骤1:目的节点为其所收到若干路由请求信息生成对应的路由反馈信息REP,此时每个REP包含从源节点到目的节点的路径信息以及这条路径上的所有节点的相关信息。目的节点将根据此信息,沿REQ的反向路径单播传输REP。

步骤2:中间节点收到该REP后将依次执行以下操作:

(1)检查本节点地址是否与REP中记录的目的地址吻合,如果是,那么此时当前节点为源节点,转向步骤3;

(2)计算获取当前节点的缓存队列长度并将其写入REP中;

(3)检查是否有其他数据流的流经信息及相应节点的监听信息存储在该节点的流表中,如果节点流表不为空,则进入编码感知阶段。编码感知阶段主要是根据编码条件获得可与REP中的路由在当前节点处进行编码的数据流集合,并利用此结果对REP中的编码相关信息进行更新,然后按照REP中记录的路径将其传送至下一跳节点。重复步骤2直至其到达源节点。

       步骤3:源节点接收到REPs后,分别计算每个路由反馈信息所记录路径的CARM值,选择CARM值最小的路径进行数据传输并将该条路径的信息记录到其路由表中,完成路由表的更新。至此完成整个编码感知路由发现过程。

算法流程图:

二、核心程序

 
%数据流个数
data_num    = [4:4:40];
%初始化卫星网络模型
Throughput  = zeros(size(data_num));%延迟变量
times       = 400;%模拟卫星运行的时间
Ndata       = 8;%数据流数量

%产生格子矩阵坐标数据点
STEP        = 10;
X0          = 0:STEP:100;
Y0          = 0:STEP:100;
Xset        = [];
Yset        = [];
for i = 1:length(X0)
    for j=1:length(Y0)
        Xset = [Xset,X0(i)];
        Yset = [Yset,Y0(j)];       
    end
end
figure;
plot(Xset,Yset,'b.');

REPs=[];
for iii = 1:length(data_num);
    iii
    Throughput0 = [];
    for jjj = 1:times
        rng(jjj);
        %初始位置
        %定义格子网格
        Nnode = 25;
        SCALE = 100;
        %初始节点能量
        E0    = 1;
        %通信半径
        Radius= 20;%
        %发送率
        Trans = 15e6;%15Mbps
        packet= 512; %512byte
        Slen  = 3e4;
        %在格子网里面随时分布
        sels  = randperm(Nnode);
        X  = Xset(sels);  
        Y  = Yset(sels);      
%         end
        %模拟发送数据
        data_frame = 2*(rand(1,1024)>=0)-1;
        Qmatrix = zeros(Nnode,Nnode);%平均包长矩阵
        gmatrix = zeros(Nnode,Nnode);%增益矩阵
        rmatrix = zeros(Nnode,Nnode);%丢包率矩阵
        dmatrix = zeros(Nnode,Nnode);
        ETX     = 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  
                   %距离因素
                   dmatrix(i,j) = Dist; 
                   ETX(i,j)     = 1/Dist;    
                   gmatrix(i,j) = 1/Dist; 
                   rmatrix(i,j) = Dist/2/SCALE/10;
                   Qmatrix(i,j) = length(data_frame)*rand;
                else 
                   %距离因素
                   dmatrix(i,j) = inf; 
                   ETX(i,j)     = 0;    
                   gmatrix(i,j) = 0; 
                   rmatrix(i,j) = inf;
                   Qmatrix(i,j) = inf;
                end; 
            end; 
        end; 
        %归一化处理
        dmatrix = dmatrix;
        %路由优化算法的改进
        Tmatrix = dmatrix;

        for i = 1:Nnode
            distA(i) = sqrt((X(i)+SCALE)^2 + (Y(i)+SCALE)^2);
            distB(i) = sqrt((X(i)-SCALE)^2 + (Y(i)+SCALE)^2);
        end
        [Va,Ia] = sort(distA,'descend');
        [Vb,Ib] = sort(distB,'descend');
        %DCAR-DCAR-DCAR-DCAR-DCAR-DCAR  
        
        
        NX=0;
        Sn1 = Ia(1);
        En1 = Ib(1);

        %备选转发节点集合的选择
        flag = 0;
        while flag == 0%重复步骤2直至其到达目的节点。
            %源节点需要向所有邻居节点发送路由请求信息REQ
            sendreq = zeros(1,Nnode);
            for i = 1:Nnode
                sendreq(i)=1;
            end

            %中间节点收到REQ后将依次进行如下处理:
            for i = 1:Nnode
                p = rand;
                if p>=0.5%假设50%概率进行丢弃
                   sendreq(i) = 0;%丢弃该RREQ不再处理
                end
            end
            %检查本节点地址是否与RREQ中记录的目的地址吻合
            idx1 = find(sendreq==1);
            idx2 = find(idx1==En1);%检测是否和目标节点吻合

            if isempty(idx2) == 0%该节点为目的节点,将进入路由反馈阶段
               flag = 1;
            else
               flag = 0;
            end
        end
        %注意,这个地方并不是用dijkstra这个算法,而是模拟出我们发送的路径,你也可以自己设置这个路径
        [r_path, r_cost] = func_dijkstra(Sn1, En1, dmatrix); 
        startnew         = r_path(1);
        if flag == 1%路由反馈
           %产生REP
           REP = [r_path];
           %吻合概率
           p = rand;
           if  p>=0.75
               %CARM值最小的路径进行数据传输并将该条路径的信息记录到其路由表中,完成路由表的更新
               [pathss,LQMsum] = func_CARMnew(Sn1,En1,gmatrix,rmatrix,Qmatrix); 
               LL = length(pathss);
               path_distance = 0; 
               ds            = 0;
               for d=2:length(pathss) 
                   path_distance= path_distance + (Slen/(Trans/packet))*dmatrix(pathss(d-1),pathss(d)); 
                   ds(d)=dmatrix(pathss(d-1),pathss(d)); 
               end 
               LQMsum_=LQMsum/1e3;
           else
               %计算获取当前节点的缓存队列长度并将其写入REP中;
               L    = length(REP);
               REPs = [REPs,r_path];%获取当前节点的缓存队列长度并将其写入REP中
               idxs = find(REPs == startnew);%找到原节点
               if isempty(idxs) == 0;
                  flag = 1;
               end
               NX     = 1;
               LQMsum_= 1;
               path_distance=10;
           end
        end
      
        if NX == 0;
           Kreduce = 1/LQMsum_;
        else    
           Kreduce = 1;
        end
        %吞吐量
        r       = randperm(Nnode);%定义一个随机因子,模拟随机某一个卫星发送
        %总包数量
        packet_size  = 1e5*512*8/1024;%bit
        total_packet = data_num(iii);
        total_time   = Kreduce*times; 
        totaldata    = length(data_frame);%数据流总数
        th          = func_throughput(total_packet,total_time,path_distance,r,Nnode,packet_size,totaldata);  
        Throughput0 = [Throughput0,mean(th)^2];
    end
    Throughput(iii) = mean(Throughput0);
end
 

三、测试结果

 

 

 A01-178

以上是关于基于matlab的卫星网络DCAR编码感知路由发现仿真的主要内容,如果未能解决你的问题,请参考以下文章

基于GA优化的OSPF协议网络路由matlab仿真

m基于matlab的AODV,leach自组网网络平台仿真,对比吞吐量,端到端时延,丢包率,剩余节点个数,节点消耗能量

GrassRouter多链路聚合路由同时使用APN和卫星访问方案

GrassRouter多链路聚合路由同时使用APN和卫星访问方案

TWVRP基于matlab改进的遗传算法求解带时间窗约束多卫星任务规划问题含Matlab源码 1774期

运动学基于matlab GPS卫星仿真含Matlab源码 1094期