ALOHA算法
- 说明
- ALOHA原理
- 流程图
- 实验代码
- 实验结果
说明
防碰撞算法-ALOHA算法分析
ALOHA原理
ALOHA法在多路存取方法中是最简单的,只要有一个数据包提供使用,这个数据包就被立即发送给射频读写器。ALOHA法是射频电子标签控制的,它只适用于只读射频电子标签。通常,这类射频电子标签只有一些数据传输给射频读写器,并且是在一个周期循环中将这些数据发送给射频读写器。数据传输时间只是循环周期的一小部分,所以在传输之间产生相当大的间隙;同时,各个射频电子标签的循环周期的差别可以忽略不计,各个射频电子标签的重复时间之间的差别是微不足道的。所以存在着一定的概率,两个射频电子标签可以在不同的时间段传输数据,使数据包不相互碰撞。
将时间分为离散的小段, 每一段称为时隙,每个时隙都足够让一个标签发送完信息; N个时隙合为一帧(N是一个默认值) ;发射端随机选择一帧中的一个时隙向接收端发送信息,一旦发生碰撞,就在下一帧中随机选择一个时隙从新发送。
平均交换的数据包量 G 可以用最简单的方法从一个数据包的传输持续时间计算出来:
其中:n是系统中的标签数量,为观察时间 T 内由应答器发送的数据包的数量。
传输信道的平均吞吐率S可由交换的数据包量G得出:
可以得出当G=0.5时, 最大吞吐率 S =1/ (2e) =18.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');
实验结果