您现在的位置:首页 >> 网络协议 >> 内容

m基于自适应修复算法的AODV-SAR路由协议matlab性能仿真

时间:2023/4/22 21:57:15 点击:

  核心提示:12_048_m,包括程序操作录像+说明文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJiUk59x

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

       路由质量检测的目的在于能够更早、更快的检测出即将发生失效的链路连接,以帮助本地节点在链路失效前找到替代路径,减少链路中断后多次进行重传确认所引起大量不必要的开销,从而实现对当前路由的快速修复。这种思想与蜂窝网络中的软切换技术十分相似,因此,路由质量检测算法的设计关键在于如何确定路由质量已经变“差”,需要重新选择传输路径。对路由质量的判定可以采取很多方式,比如信号强度、路由存活时间、业务分组传输跳数以及发生冲突的频率等。为了能够快速、准确的判定是否需要发起本地路由的修复过程,本文根据业务分组接收功率来建立路由质量判定函数以避免引入额外的控制开销。在移动Ad Hoc网络中,链路的失效大多是由于节点间相对运动所造成的,因此信号强度作为最直接的衡量标准可以用来判断业务分组在节点间传输的能力,而衰落等原因引起的信号功率短暂的抖动将不会影响对路由质量的判定结果。

4.部分源码

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

global SCALE;

global Number;

global Energy0;

global Radius;

global Vmax; 

global Vavg;

global Smax;

global Savg;

global Len;

global Rpow;

global Rfail;

global Rmax;

global alpha0;

global REG;

global ETX;

global ERX;

global Efs;

global Emp;

global EDA;

global Nnode;

global Psent;

global X;

global Y;

Delays  = [];

Change  = [];

Power   = [];

MTKL    = 500;

 

Sset    = [5:5:50];%不同的节点数据包发送速率

for ii = 1:length(Sset)

    ii

    tmps1 = 0;

    tmps2 = 0;

    tmps3 = 0;

    for jj = 1:MTKL

 

        rng((ii-1)*jj+jj);

        SCALE   = 1000;%节点分布范围

        Number  = 100;%节点总个数

        Energy0 = 1;%节点初始能量

        Radius  = 240;%节点通信半径

        Vmax    = 10;%节点移动速度

        Vavg    = Vmax*randn(2,Number);

        Smax    = 10;%数据包发送速率

        Savg    = Sset(ii)*rand;

        Len     = 1024;%数据包长度

        Rpow    = 250;%功率覆盖半径

        Rfail   = 1;

        Rmax    = 2e6;%最大传输速率

        alpha0  = pi/3; 

        REG     = 0.2;%缓存大小    

        %能量消耗

        ETX     = 50*1e-9;

        ERX     = 50*1e-9;

        %Transmit Amplifier types

        Efs    = 10    *1e-12;

        Emp    = 0.0013*1e-12;

        %Data Aggregation Energy

        EDA    = 5*1e-9;

        Nnode   = Number;

        Psent   = 0.1;

        

        if jj == 1

           X = SCALE*rand(1,Number);

           Y = SCALE*rand(1,Number);

        else

           X = X+Vavg(1,:);%移动

           Y = Y+Vavg(2,:);

        end

 

        dmatrix = 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; 

                else 

                   %距离因素

                   dmatrix(i,j) = inf;  

                end; 

            end; 

        end; 

        distmatrix = zeros(Nnode,Nnode);

        for i = 1:Nnode 

            for j = 1:Nnode 

                Dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2); 

                distmatrix(i,j) = Dist; 

            end; 

        end; 

        

        

        Pmatrix = 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 <= Rpow & Dist > 0

                   %距离因素

                   Pmatrix(i,j) = ETX; 

                else 

                   %距离因素

                   Pmatrix(i,j) = 0;  

                end; 

            end; 

        end; 

 

        tmps= randperm(Number);

        if tmps(1)>tmps(2)

           Sn1 = tmps(2);

           En1 = tmps(1);

        else

           Sn1 = tmps(1);

           En1 = tmps(2);

        end

        [paths1,costs1] = func_aodvsar(Sn1,En1,dmatrix,Pmatrix,distmatrix);     

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

 

        else

            if jj == 1

               Ec3(jj,1:Nnode) = Energy0;

               Ec30(1:Nnode)   = Energy0;

            else

               Ec3(jj,1:Nnode) = Ec3(jj-1,1:Nnode);  

            end 

            succes = 0;

            Ecums  = 0.1;

        end

 

        tmps1 = tmps1+Savg/((length(paths1)+1)*REG)+path_distance/Savg/1000;%缓存延迟+传输延迟

        

        tmps2 = tmps2+succes;

        tmps3 = tmps3+Ecums;

    end

    %对节点之间平均端到端的时延

    Delays(ii) = tmps1/MTKL;

    %数据包分组交付率

    Change(ii) = 100*tmps2/MTKL;

    %路由拓扑控制开销

    Power(ii)  = tmps3/MTKL;

end

 

figure;

plot(Sset,Delays,'b-o');

grid on

xlabel('不同的节点数据包发送速率');

ylabel('平均端到端的时延');

 

figure;

plot(Sset,Change,'b-o');

grid on

xlabel('不同的节点数据包发送速率');

ylabel('数据包分组交付率%');

ylim([0,100]);

figure;

plot(Sset,Power,'b-o');

grid on

xlabel('不同的节点数据包发送速率');

ylabel('路由拓扑控制开销');

save R1.mat Sset Delays Change Power

12_048_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168