m基于matlab的IEEE802.15.4家庭网络高效节能的有效接入方法

简介: m基于matlab的IEEE802.15.4家庭网络高效节能的有效接入方法

1.算法描述
我们主要从三个方面进行研究。

第一,需要研究基于IEEE802.15.4的接入算法;

第二,在研究IEEE802.15.4的接入算法之后,研究IEEE802.15.4家庭网络的接入算法;

第三,研究减少能量损耗的方法,从而实现高效,低能耗的IEEE802.15.4家庭网络的接入方案;

   在做了上面三个方面的研究之后,对于本课题,我们所采用的方案,总的来讲为:

   首先,考虑到家庭网络,需要低成本,且家庭中各个使用设备的分散性,我们需要使用无线网络进行接入,即利用无线传感器的自组网,将家庭中的各个设备,如电脑,Ipad,电视等进行互联,形成一个新的无线网络,并通过广域互联网接口和外部网络连接。

   然后,实现家庭无线网络的高效低能耗的接入。

A_IEEE802_15_4接入算法

    在本研究工作的第一步,需要对IEEE802-15-4的接入算法进行仿真研究,分析其对应的吞吐量和能耗。

    针对IEEE802.15.4接入算法,本课题主要研究基于时隙CSMA/CA接入算法。

    IEEE 802.15.4标准是目前最具影响的低功耗、低速无线传感器网络技术标准,它主要定义了物理层和MAC层规范。基于IEEE 802.15.4的无线技术以其更低的安装和维护成本正逐步取代现存的有线技术应用。例如在楼宇自动化、家庭/环境监控、工业控制和智能仪表领域都有应用。

    这里,为了对比原有算法和改进算法,这里,我们分别对原来的算法和改进后的算法进行分析,分别对2种情况进行仿真。

    main1.m : 不同节点个数下的网络吞吐量;

    main2.m : 不同节点个数下的网络能耗;

    即,我们需要对算法在不同节点数下的吞吐量和能耗分别进行仿真分析,通过这四种代码的仿真,可以有效分析改进算法在不影响网络吞吐量的前提下,对能耗问题的改善。

B_IEEE802_15_4家庭网络高效节能接入方法

    当节点数目越来越多的时候,由于对信道的竞争的越来越激烈,单个节点接入信道成功从而发送数据的概率会随之下降。那些没能够竞争到信道的节点就会进入新的退避过程。整个网络的总体功耗在这个过程当中为持续上升状态。这里,我们通过算法的改进,来降低接入的能耗:

    改进一:减少网络中的碰撞次数,当碰撞次数较多的时候,需要更多次数的重传,从而导致消耗更多的能力和信道资源。这里,我们通过设计一个自适应接入算法,有效减少碰撞次数。主要是根据当前情况下的碰撞次数,来实时的更新算法的参数。

    改进二:降低每帧开销。减少能量损耗通过减小每帧对等节点的overhead。

2.仿真效果预览
matlab2022a仿真结果如下:

1.png
2.png
3.png

3.MATLAB部分代码预览

    Note_Num
    Inder = Inder + 1;
    %参数初始化
    parameter;
    
    %部分参数初始化
    for i = 1:Note_Num
        ArrivalTime(i)  = func_randn_times(ArrivalTimes);  
        PacketLength(i) = func_randn_times(PacketLengths);
        CW(i)           = CW_CONSTANS; 
        BE(i)           = BE_CONSTANS;%(0,2^BE - 1) 
        maxNBBackoff(i) = 2^BE(i)-1; 
    end
 
    for t = 1:Simu_Time
        %修改退避准则
        for i = 1:Note_Num
            if t == ArrivalTime(i)
               if Buffer_sizes(i) < Buffer_Level - PacketLength(i)
                  PacketBuff      = func_FIFO_buffer(PacketBuff,i,PacketLength(i),depth);
                  Buffer_sizes(i) = Buffer_sizes(i) + PacketLength(i);
                  HasPacket(i)    = 1;
                  if maxNBBackoff(i) == 2^BE(i)-1
                     maxNBBackoff(i) = floor(rand(1)*CW(i));
                  end
               end
               %更新到达时间和帧长,产生随机时间
               ArrivalTime(i)  = func_randn_times(ArrivalTimes) + PacketLength(i) + t;
               PacketLength(i) = func_randn_times(PacketLengths);
            end
            
            if HasPacket(i) == 1 & IsBussy == 0
               %退避时间=0 
               if maxNBBackoff(i) == 0 
                  CollisionNodes = func_Add(CollisionNodes,i);
                  IsStart        = 1;
               else
                  %退避时间=0则 退避时间-1
                  maxNBBackoff(i) = maxNBBackoff(i) - 1;
               end
            end
        end
 
        %信道改为忙碌
        if IsStart == 1
           IsBussy = 1;
           n       = CollisionNodes(1);
           %信道中只有一个站点发送数据则为正常发送情况
           if n == 1
              Trans_Time  = floor(t+3+ACK+PacketBuff(CollisionNodes(2),2));
              %没有发生竞争
              IsCollision = 0;
           else
              Trans_Time  = floor(t+2.5+func_max_frame_len(PacketBuff,CollisionNodes));
              %发生竞争
              IsCollision = 1;
           end
           IsStart=0;        
        end
 
        %达到站点的等待时间
        if t == Trans_Time & IsBussy == 1
           if IsCollision == 0
              n               = CollisionNodes(2);
              Buffer_sizes(n) = Buffer_sizes(n) - PacketBuff(n,2);
              Throughput      = Throughput + PacketBuff(n,2)* TimeSlot * Dat_Rate;
              PacketBuff      = func_push2(PacketBuff,n,depth);
              %如果没有发生碰撞,则CW不变
              CW(n)           = CW_CONSTANS;
              BE(n)           = BE_CONSTANS;
              k               = PacketBuff(n,1);
              %如果没有数据等待发送
              if k ==0
                 HasPacket(n) = 0;
                 maxNBBackoff(n) = 2^BE(i)-1;
              else
                 maxNBBackoff(n) = floor(rand(1)*CW(n));
              end
           else
              n = CollisionNodes(1);
              for i = 1:n
                  j               = CollisionNodes(i+1);
                  %如果发生碰撞,则CW进行实时调整
                  CW(j)           = func_cw_change(CW,j);
                  BE(j)           = BE_CONSTANS;
                  maxNBBackoff(j) = floor(rand(1)*CW(j));
              end
           end
           CollisionNodes = zeros(1,Note_Num+1);
           Trans_Time     = 0;
           IsBussy        = 0;
           Collition      = 0;
        end
    end
    %吞吐率
    Throughput_avg(Inder)  = Throughput/(Simu_Time* TimeSlot * Dat_Rate);
end
01_067_m
相关文章
|
3月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
156 6
|
3月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
118 0
|
3月前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
127 0
|
3月前
|
机器学习/深度学习 边缘计算 运维
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
157 10
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
230 2
|
2月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
310 0
|
2月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
159 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
145 0
|
2月前
|
机器学习/深度学习 数据采集 边缘计算
基于灰色神经网络的预测方法
基于灰色神经网络的预测方法
142 0
|
3月前
|
算法 安全
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)
【含储能及sop的多时段配网优化模型】基于柔性开断点(Soft Open Point)的主动配电网电压与无功功率协调控制方法研究(Matlab代码实现)
122 8

热门文章

最新文章