基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量

简介: 本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。

1.算法仿真效果
matlab2017b仿真结果如下(完整代码运行后无水印):

本程序系统是《m基于matlab的AODV,leach自组网网络平台仿真,对比吞吐量,端到端时延,丢包率,剩余节点个数,节点消耗能量》的的升级。

升级前原文章链接

增加了运动节点的路由测试,包括定向运动,随机运动,静止状态,修正了丢包率的统计方式。

b55f84c7dd34da4be47b881d93b2aec4_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

动态节点时仿真效果如下:

d36e909f0b8be3faf16a13067aebe1c5_0315f8c96dd66d12d7a131ae2bc4541573679e.gif

2.算法涉及理论知识概要
AODV是一种应用于无线网状网络的路由协议。它源节点需要发送数据时才进行路由发现。当没有数据发送请求时并不执行。在路由发现过程中首先检查路由表中是否存在从源节点到目的节点的路由,若存在则直接进行数据转发,若不存在,则广播RREQ分组进行寻找并建立路由。当目的节点收到第一个RREQ分组时,立即回复RREP分组给源节点,当源节点收到RREP分组时,便沿着RREP的路径建立了一条到目的节点的路径,然后通过此路径进行数据的传送。当节点在转发分组失败的时候便广播一个RRER分组,以此来告知源节点路径断开,源节点收到RRER之后将要发送的数据存入缓存,并重新发起路由发现的过程,直到新的路由路径建立起来的时候,才将缓存中的数据依次发送给目的节点。

   AODV是一种按需路由协议,根据业务需求建立和维护路由,它是DSDV (Destination—SequencedDistance-Vector)协议和DSR(Dynamic Source Routing) 协议的结合,使用DSDV协议中的目的节点序列号来防止缓存的路由信息过期以及环路的产生,路由建立则是基于DSR协议中所采用的方法,不同点在于AODV采用的是逐跳路由而不是源路由,可以实现ZigBee节点之间动态的、自发的路由,使节点很快实现到目的节点的通信。ZigBee路由算法中使用的AODVjr算法是对AODV算法的精简和改进,但是仍然保持AODV的原始功能。其特点是路由路径最佳,缺点是单个节点需要路由表,整体路由代价高。       

   AODV路由协议主要可分为初始化、路由的建立及维护、显示、时钟、节点移动模块。总体设计框图所示:

5affc6ebdbca48ddddb78dff321a8353_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

     AODV是一种按需路由协议,根据业务需求建立和维护路由,它是DSDV协议和DSR协议的结合。使用DSDV协议中的目的节点序列号来防止缓存的路由信息过期以及环路的产生,路由建立则是基于DSR协议中所采用的方法,不同点在于AODV采用的是逐跳路由而不是源路由。  

    控制中心主要包括消息收发模块、用户列表(相关节点信息,用户名和IP)、参数设置模块和功能性模块。

 1.参数设置模块:可以实现节点个数、仿真场景大小、仿真时间、信道模型、路由协议、节点初始能量等的输入或者选择。

 2.功能性模块:显示拓扑结构图;计算网络平均吞吐量、平均端到端时延、丢包率、剩余节点个数、节点消耗能量等。

    参数设置模块,是通过GUI界面进行设置,主要实现可设置网络节点,仿真场景大小,仿真时间,信道模型的选择,路由协议的选择,节点初始能量的设置等参数变量,这些变量,我们均通过GUI界面进行参数的输入。功能模块,显示拓扑结构图;计算网络平均吞吐量、丢包率、剩余节点个数、节点消耗能量等。

   整个网络的工作机制如下:       

   通过设置N个网络节点,在设置好大小的场景中,进行随机坐标的分布,并设置整个网络的工作时间,即仿真时间,不同节点之间的信息传递,其信道模型根据设置,选择Free space和 Two-ray ground reflection两种类型的信道,网络工作的MAC协议为IEEE 802.11,而路由协议,则根据选择,设置Leach或者AODV,或AODV改进三种类型。然后,我们根据网络的实际仿真结果,实时的输出六个指标。

3.MATLAB核心程序```%3.网络运行模块
countCHs3 = 0;
cluster3 = 1;
flag_first_dead3 = 0;
flag_teenth_dead3 = 0;
flag_all_dead3 = 0;
%死亡节点数
dead3 = 0;
first_dead3 = 0;
teenth_dead3 = 0;
all_dead3 = 0;
%活动节点数
allive3 = n;
packets_TO_BS3 = 0;
packets_TO_CH3 = 0;

%%%%%%%%%%%%以上参数初始化三个程序都相同%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%以上参数初始化三个程序都相同%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for r=0:1:rmax
r
Ea = Et;
El3(r+1) = 0;
for i=1:nodes_number
El3(r+1) = S3(i).E + El3(r+1);
end
Ec3(r+1) = Et-El3(r+1);

%死亡节点检查
Dead_time = 0;
for i=1:n
    %节点能量用完,则说明节点死亡
    if S3(i).E <= 0 
       Dead_time = Dead_time + 1; 
    else
       S3(i).type = 'N';
       Dead_time = Dead_time; 
    end
end

STATISTICS.DEAD3(r+1)  = Dead_time;

countCHs3 = 0;
cluster3  = 1;
for i = 1:n
    if Ea > 0 & S3(i).E > 0 & S3(i).G <= 0  
         if rand<= 0.2
            countCHs3             = countCHs3+1;
            packets_TO_BS3        = packets_TO_BS3+1;
            PACKETS_TO_BS3(r+1)   = packets_TO_BS3;
            S3(i).type            = 'C';
            C3(cluster3).xd       = S3(i).xd;
            C3(cluster3).yd       = S3(i).yd;
            if r > 1
               distance              = sqrt((S3(i).xd-(S3(n+1).xd) )^2 + (S3(i).yd-(S3(n+1).yd))^2 );
               Fs                    = LBF3t(r);
               Ps                    = Ec3(r);
               Gs                    = w1*distance+w2*Fs+w3*Ps;
            else
               distance              = sqrt((S3(i).xd-(S3(n+1).xd) )^2 + (S3(i).yd-(S3(n+1).yd))^2 ); 
               Gs                    = distance;
            end
            C3(cluster3).distance = Gs;
            C3(cluster3).id       = i;
            X3(cluster3)          = S3(i).xd;
            Y3(cluster3)          = S3(i).yd;
            cluster3              = cluster3+1;
            %计算簇头发送4000bit数据的能量消耗
            if Gs > do 
               S3(i).E = S3(i).E - ((ETX+EDA)*(PACK) + Emp*PACK*(distance*distance*distance*distance)); 
            end
            if Gs <= do 
               S3(i).E = S3(i).E - ((ETX+EDA)*(PACK) + Efs*PACK*(distance * distance)); 
            end
         end
    end
end
STATISTICS.COUNTCHS3(r+1) = countCHs3;

x3 = zeros(1,cluster3-1);
y3 = 0;
z3 = 0;
Drop_rate0 = zeros(1,n);

%产生不同的路由路径,用来进行综合分析
PATH = [];
Nums = 1:n;
nn   = n;
for js = 1:n/2
    tmps = randperm(nn);
    if js > 1
       I1 = find(tmps == tmps1);
       I2 = find(tmps == tmps2);
       tmps(I1)=0;
       tmps(I2)=0;
       tmps(find(tmps==0)) = [];
    end
    SS   = tmps(1);
    DD   = tmps(2);
    %根据原节点和目标节点进行路由跟新
    [path,hop] = aodv_path_discovery_new(n,nodes_link,SS,DD,Fload,PLest,BREAK);
    PATH     = [PATH,path];
    tmps1    = SS;
    tmps2    = DD;
end
for ind=1:length(PATH)
    i = PATH(ind);
    if S3(i).type=='N' && S3(i).E>0
       if cluster3-1 >= 1
          min_dis         = Inf;
          min_dis_cluster = 0;
          for c=1:cluster3-1
              if r > 1
                 distance              = sqrt((S3(i).xd-C3(c).xd)^2 + (S3(i).yd-C3(c).yd)^2);
                 Fs                    = LBF3t(r);
                 Ps                    = Ec3(r);
                 Gs                    = w1*distance+w2*Fs+w3*Ps;
              else
                 distance              = sqrt((S3(i).xd-C3(c).xd)^2 + (S3(i).yd-C3(c).yd)^2); 
                 Gs                    = distance;
              end
              temp = min(min_dis,Gs);
              if temp < min_dis
                 min_dis         = temp;
                 min_dis_cluster = c;
                 x3(c)           = x3(c)+1;
              end
          end
          %簇内节点能量消耗
          if Gs > do
             S3(i).E=S3(i).E- (ETX*(PACK) + Emp*PACK*( min_dis * min_dis * min_dis * min_dis)); 
          end
          if Gs <= do 
             S3(i).E=S3(i).E- (ETX*(PACK) + Efs*PACK*( min_dis * min_dis)); 
          end
          S3(C3(min_dis_cluster).id).E = S3(C3(min_dis_cluster).id).E- ( (ERX + EDA)*PACK ); 
          packets_TO_CH3               = packets_TO_CH3+1;
          S3(i).min_dis                = Gs;
          S3(i).min_dis_cluster        = min_dis_cluster;
       else
          y3      = y3+1;

          if r > 1
             distance              = sqrt( (S3(i).xd-S3(n+1).xd)^2 + (S3(i).yd-S3(n+1).yd)^2 );
             Fs                    = LBF3t(r);
             Ps                    = Ec3(r);
             Gs                    = w1*distance+w2*Fs+w3*Ps;
          else
             distance              = sqrt( (S3(i).xd-S3(n+1).xd)^2 + (S3(i).yd-S3(n+1).yd)^2 );
             Gs                    = distance;
          end
          min_dis = Gs;
          if min_dis > do 
             S3(i).E=S3(i).E- ( ETX*(PACK) + Emp*PACK*( min_dis * min_dis * min_dis * min_dis)); 
          end
          if min_dis <= do 
             S3(i).E=S3(i).E- ( ETX*(PACK) + Efs*PACK*( min_dis * min_dis)); 
          end
          if rand < 0.2
             packets_TO_BS3=packets_TO_BS3+1;
          end
       end
    end
   %计算丢包率
   if Channel_Sel == 1
      L = 38.5 + 20*log10(distance); 
   else
      R     = 1; 
      dd2   = distance;
      fai   = pi/3;
      dd    = distance;
      lemda = 150;
      ge1   = 1;
      ge2   = 1;
      dr    = 4;
      Cs    = pi/8;
      a     = 6370000*(1-0.04665*exp(0.005577))^(-1);
      D     = (1+2*d1*d2/a/dd2/tan(fai))^(-0.5); 
      Re    = D*R*exp(-0.6*dd*sin(fai)/lemda); 
      Gp    = 23;
      Aa    = 18;
      L     =-10*log10(ge1*ge2*(1+Re^2 - 2*Re*cos(2*pi*dr/lemda-Cs))) + Gp + Aa;
   end
   %统计丢包率  
   %当发生错误的时候,以一定的概率丢包
   if rand < 0.2
      Drop_rate0(i) = 0.5*erfc(sqrt(2*(SNRs+10^(-L/20))));  
   end
end

if countCHs3~=0
    %统计
   for c=1:cluster3-1
       z3=z3+x3(c);
   end
   LBF3(r+1)=z3/countCHs3;
else
   LBF3(r+1)=0;
end


STATISTICS.PACKETS_TO_CH3(r+1) = packets_TO_CH3;
STATISTICS.PACKETS_TO_BS3(r+1) = packets_TO_BS3;
if countCHs3~=0
   Drop_rate(r+1)  = mean(Drop_rate0);
else
   Drop_rate(r+1)  = 0; 
end
if r <= 128
   LBF3t(r+1)      = mean(LBF3(1:r));
   Drop_ratet(r+1) = mean(Drop_rate(1:r));
else
   LBF3t(r+1)      = mean(LBF3(r-127:r));
   Drop_ratet(r+1) = mean(Drop_rate(r-127:r));
end

end
0sj_003m

```

相关文章
|
24天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
14天前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
44 18
|
20天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
27天前
|
运维 监控 Cloud Native
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
|
30天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
1月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
26天前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
1月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
77 17
|
1月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
1月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
60 10