当前位置: 首页>数据库>正文

rfid 编程 rfid编程实现ALOHA算法


ALOHA算法

  • 说明
  • ALOHA原理
  • 流程图
  • 实验代码
  • 实验结果


说明

防碰撞算法-ALOHA算法分析

ALOHA原理

ALOHA法在多路存取方法中是最简单的,只要有一个数据包提供使用,这个数据包就被立即发送给射频读写器。ALOHA法是射频电子标签控制的,它只适用于只读射频电子标签。通常,这类射频电子标签只有一些数据传输给射频读写器,并且是在一个周期循环中将这些数据发送给射频读写器。数据传输时间只是循环周期的一小部分,所以在传输之间产生相当大的间隙;同时,各个射频电子标签的循环周期的差别可以忽略不计,各个射频电子标签的重复时间之间的差别是微不足道的。所以存在着一定的概率,两个射频电子标签可以在不同的时间段传输数据,使数据包不相互碰撞。

rfid 编程 rfid编程实现ALOHA算法,rfid 编程 rfid编程实现ALOHA算法_防碰撞,第1张

将时间分为离散的小段, 每一段称为时隙,每个时隙都足够让一个标签发送完信息; N个时隙合为一帧(N是一个默认值) ;发射端随机选择一帧中的一个时隙向接收端发送信息,一旦发生碰撞,就在下一帧中随机选择一个时隙从新发送。

平均交换的数据包量 G 可以用最简单的方法从一个数据包的传输持续时间计算出来:

rfid 编程 rfid编程实现ALOHA算法,rfid 编程 rfid编程实现ALOHA算法_ALOHA_02,第2张

其中:n是系统中的标签数量,为观察时间 T 内由应答器发送的数据包的数量。

传输信道的平均吞吐率S可由交换的数据包量G得出:

rfid 编程 rfid编程实现ALOHA算法,rfid 编程 rfid编程实现ALOHA算法_RFID_03,第3张

可以得出当G=0.5时, 最大吞吐率 S =1/ (2e) =18.4%。

流程图

rfid 编程 rfid编程实现ALOHA算法,rfid 编程 rfid编程实现ALOHA算法_MATLAB_04,第4张

实验代码

for m=2:1:200                   %标签数 从2开始,每次+1,直到1000     
    n=1000;                      %n表示重发次数
    A=rand(m,n);                 %生成m*n的[0,1]的随机矩阵
    A1=0.5*A;                    %生成[0,0.5]的矩阵
    B=cumsum(A1,2);              %返回各行的累加和
    T=B(1,n);                    %T为标签发送时间
    C=1:1:(m*n);                 
    for i=1:m                    %将矩阵B转化为向量
        for j=1:n
            C(1,(i-1)*n+j)=B(i,j);
        end
    end
    D=sort(C);                   %从小到大排序,用于计算两数据包之间的时间差
    E=diff(D);                   %向量的微分,求两数据包之间的时间差,用于判断是否产生碰撞
    T0=0.001;                    %每个数据包的宽度
    N=0;                         %初始化N,发送成功的数据包
    M=0;                         %初始化M,总共的数据包
    for i=1:(m*n-1)              %计算M与N
          if D(1,i)<=T           %小于发送时间则总包数+1
                 M=M+1;
             if i==1&E(1,1)>=T0  %对于时间轴上的第1个和最后一数据包只需判断一个时间差,其他需要判断两个
                  N=N+1;
             elseif i==(m*n-1)&E(1,(m*n-1))>=T0
                  N=N+1;
             elseif i~=1&i~=(m*n-1)&E(1,i)>=T0&E(1,i-1)>=T0
                  N=N+1;
             end
          else continue
       end
    end
  G=T0/T*M;                     %计算平均交换的数据包量G:T0数据包的宽度, T观察时间,M数据包数量
  S=G*exp(-2*G);                %计算吞吐量
  Q=S/G;                        %发送成功率
  F=m/200;                     %归一化
  plot(G,S,'r.',G,Q,'ko',G,F,'g*'); 
  hold on;                   
end
 xlabel('平均交换的数据包量G'); 
 title('aloha算法仿真');       
 legend('吞吐量S','发送成功率Q','归一化标签数F');

实验结果

rfid 编程 rfid编程实现ALOHA算法,rfid 编程 rfid编程实现ALOHA算法_rfid 编程_05,第5张



https://www.xamrdz.com/database/6s91937712.html

相关文章: