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

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

时间:2023/2/14 23:08:06 点击:

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

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

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

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

点击店铺

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

2.部分仿真图预览


3.算法概述

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

4.部分源码

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

Et     = 0;

w1     = 0.75;

w2     = 0.02;

w3     = 0.23;

%%

%这个部分和LEACH的相同

%2.无线传感器网络模型产生模块

for i=1:1:n

    S3(i).xd   = X(i);

    XR3(i)     = S3(i).xd;

    S3(i).yd   = Y(i);

    YR3(i)     = S3(i).yd;

    S3(i).G    = 0;

    S3(i).E    = Eo*(1+rand*a);

    E3(i)      = S3(i).E;

    Et         = Et+E3(i);

    S3(i).type = 'N';

end

d1         = 0.765*xm/2;

K          = sqrt(2*n*do/pi)*xm/d1^2;

d2         = xm/sqrt(2*pi*K);

Er         = PACK*(2*n*ETX+n*EDA+K*Emp*d1^4+n*Efs*d2^2);

S3(n+1).xd = sink.x;

S3(n+1).yd = sink.y;

%%

%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

12_015_m

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