✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

​智能优化算法​​​  ​​神经网络预测​​​ ​​雷达通信 ​​​ ​​无线传感器​

​信号处理​​​ ​​图像处理​​​ ​​路径规划​​​ ​​元胞自动机​​​ ​​无人机​

ALOHA算法

1.1纯ALOHA算法原理

纯ALOHA算法是是最简单最基本的一种防碰撞算法。算法基于时分多路法(TDMA)思想,是一种概率算法。当标签进入阅读器的作用区域时,就主动向阅读器发送其自身的信息,不同的标签发送信息的时间也是随机的,当阅读器准确的识别出唯一的标签就开始与该标签通信。

1.2纯ALOHA基本思想

标签随机发送自身的信息给阅读器,由于这种随机性,发送的数据帧很有可能发生冲突,标签得不到确认响应,也就是可以鉴别出它发送的数据帧被破坏,会重新选择一个时隙发送,等待时间随机。直至所有标签被识别。也可能存在标签饿死的情况。适合用于待识别标签数目不多的情况。

1.3纯ALOHA识别过程

对于有接受功能的标签,标签发送信息的过程中有其他标签也在同时发送数据,信号就会产生重叠,导致部分冲突或者完全冲突。一旦产生冲突,阅读器就发送命令让标签停止发送信息,然后随机等待一段时间再发送信息,不同的标签可能选择不同的时延,从而避免了冲突。如果没有冲突,阅读器正确读取标签信息后,标签进入休眠状态。对于无接收功能的标签,由于标签收不到阅读器发送的信息,在检测期间一直重复发送自己的信息,直到识别结束。

为了避免像纯ALOHA 那样的不完全碰撞,为了提高系统的吞吐量,可将时间划分为一段一段等长的时隙,记为T0。规定数据帧只能在时隙的开始才能发送,这就是时隙ALOHA(Slotted  ALOHA)算法。

每个时隙存在以下三种情况:

1)空闲时隙

2)成功时隙

3)碰撞时隙

【通信】基于Matlab实现动态帧时隙ALOHA(Dynamic Framed Slotted ALOHA)算法_时隙

⛄ 部分代码

% 动态帧时隙 ALOHA(Dynamic Framed-Slotted ALOHA,DFSA)算法的碰撞处理函数


function [ S_succ , S_idle , S_coll ] = DFSA_anti ( TagsNum , FrameLength )


S_succ = 0;  % 成功时隙数

S_idle = 0;  % 空闲时隙数

S_coll = 0;  % 碰撞时隙数


RandSlot = randi( [ 1 , FrameLength ] , 1 , TagsNum );   %每个标签在1-Framelenth中随机选一个时隙进行发送

SlotCounter = ones( 1, TagsNum );

% 处于待识别状态的标签随机的从帧长度 1-N 内选择一个时隙来传送数据,

% 这个数值是通过自身携带的伪随机数发生器随机产生的,并且同时将自身的时隙计数器置 1


SlotCheck = zeros( 1, FrameLength );  % 检测每帧中所有时隙的情况(成功/空闲/碰撞)


for i = 1:FrameLength  % 开始帧内时隙的查询

    Remove = [ ];  % 存储发生碰撞/正确识别的标签序号

    for n = 1:TagsNum

        if RandSlot(n) == SlotCounter(n)  % 开始帧内时隙的查询,每个标签将随机选择的时隙号与自身时隙计数器的号码进行比对

            SlotCheck(i) = SlotCheck(i) + 1;  % 当两者相等时标签响应阅读器,并在此时隙内开始传送数据信息

            Remove = [ Remove , n ];  % 将符合判断条件的标签序号存储到行向量 Remove 中

        end  % 当两者不等时,标签不再传送数据信息而是保留此时隙号,并等待阅读器下一次的时隙查询命令

    end

    

    % 在此阶段中,时隙内存在以下三种情况:

    

    if SlotCheck(i) == 0  % 阅读器未检测到标签的数据信息,也就是无标签在此时隙内传输,此时阅读器结束此时隙的查询

        SlotCounter = SlotCounter +1;  % 并且所有标签将自身时隙计数器进行加 1 操作

        S_idle = S_idle + 1;  % 该时隙为空闲时隙

        

    elseif SlotCheck(i) == 1  % 阅读器检测到数据信息并正确识别,也就是此时时隙内只有一个标签在传送消息

        RandSlot(Remove(1)) = [ ];  % 阅读器接收到标签信息后会向标签发送一休眠指令,使标签进入休眠状态,

        SlotCounter(Remove(1)) = [ ];  % 不再响应阅读器的任何指令。我们将其从 RandSlot 和 SlotCounter 矩阵中删除即可

        SlotCounter = SlotCounter +1;  % 其他还处于待识别状态的标签将自身时隙计数器进行加 1 操作,等待阅读器下一时隙查询命令

        TagsNum = TagsNum - 1;  % 更新本帧内待查询的标签数

        S_succ = S_succ + 1;  % 该时隙为成功时隙

        

    else  % 阅读器检测到数据信息但无法正确识别出来,也就是此时隙内有多个标签在传送信息

        for m = 1:length(Remove)  % 阅读器命令该时隙内的标签等待下一帧查询周期再发送数据

            RandSlot( Remove(m)-(m-1) ) = [ ];

            SlotCounter( Remove(m)-(m-1) ) = [ ];

        end

        SlotCounter = SlotCounter +1;  % 同时其余标签将自身时隙计数器进行加 1 操作

        TagsNum = TagsNum - length(Remove);  % 更新本帧内待查询的标签数

        S_coll = S_coll + 1;  % 该时隙为碰撞时隙

    end

end  % 当查询的时隙数与初始规定的帧长度 N 相等时,阅读器发送结束本帧的查询,

end  % 并根据这一帧的 S_succ、S_idle 和 S_coll 来估计下一帧未被识别的标签数,以此调整下一帧的查询帧长度

⛄ 运行结果

【通信】基于Matlab实现动态帧时隙ALOHA(Dynamic Framed Slotted ALOHA)算法_数据_02

【通信】基于Matlab实现动态帧时隙ALOHA(Dynamic Framed Slotted ALOHA)算法_数据_03

【通信】基于Matlab实现动态帧时隙ALOHA(Dynamic Framed Slotted ALOHA)算法_时隙_04

⛄ 参考文献

[1] 煤矿安全预警系统中RFID防碰撞算法的研究_赵跃

[2] 基于动态帧时隙ALOHA的标签防碰撞算法研究_张晶

[3] 基于ALOHA的RFID系统防碰撞算法的研究与设计_孟婕

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除