资源简介
MATLAB实现ARQ重传,实现时延的加入及重传次数的自定义改动,注释详尽,对初学者有一定的帮助。

代码片段和文件信息
%选择重传ARQ
clear
frameNum=100;%帧数100
frameLength=10;%帧长
frameOrder=0;%帧号
frameOrderBuff=0;%帧号缓存
ACK=[0 0];%ACK的组成为第1位帧号,第2位传输有效位,第2位等于1时表示该帧发送正确,等于0是表示发送错误需要重传
ACKQueue=zeros(53);%每行代表一组ACK数据,第1位是数据有效位,第23位为ACK数据;列数为队列长度
MaxARQNum=3;%最大重传次数
ARQNum=zeros(frameNum2);ARQNum(:1)=1:frameNum;%每一帧实际重传次数
frameError=0;%误帧数
for i=1:3%压入3个空帧表示2个帧传输时延
ACKQueue=QueueIn(ACKQueue[01]);
end
frameQueue=zeros(202+frameLength);%每行代表一组帧数据第1位是数据有效位第2位为帧号剩下是帧数据;列数为队列长度
while(1)
%%发送端
[ACKQueueACK]=QueueOut(ACKQueue);
frameBuff=QueueData(frameQueue1);%帧号+帧
if(ACK(1)==frameBuff(1))
[frameQueueframeBuff]=QueueOut(frameQueue);%读取缓存队列头部数据,并将头部数据退出队列
end
if(ACK(2)==1 && frameOrderBuffameNum) %该帧传输正确,发送下一帧
frameOrder=frameOrderBuff+1;
frameOrderBuff=frameOrder;
%TrSeq=[1 0 1 0 1 1 1 0 0 1];
TrSeq=round(rand(12000));
frameQueue=QueueIn(frameQueue[frameOrder TrSeq]);%将新生成的帧数据加入缓存队列
elseif(ACK(2)==0)%该帧传输错误,重传该帧
frameOrder=frameBuff(1);
TrSeq=frameBuff(2:end);
frameQueue=QueueIn(frameQueueframeBuff);%将该帧重新加入缓存队列
elseif(ACK(2)==1 && frameOrderBuff==frameNum)
ACKDeep=QueueDeep(ACKQueue);
if ACKDeep==sum(ACKQueue(:3)) %ACK队列中的所指示的帧全部发送正确
break; %退出循环
else
while(1)
[ACKQueueACK]=QueueOut(ACKQueue);
[frameQueueframeBuff]=QueueOut(frameQueue);
if ACK(2)==0 %寻找ACK队列中传错的那一帧的信息
break;
end
end
TrSeq=frameBuff(2:end);
frameQueue=QueueIn(frameQueueframeBuff);%将该帧重新加入缓存队列
end
end
%%信道简易模型
ReSeq=TrSeq;
ReSeq(1)=randi([0 1]11);
%%接收端
if(isequal(ReSeqTrSeq))
ACK=[frameOrder 1];
else
if(ARQNum(frameOrder2)==MaxARQNum)%重传数达到最大次数则不再重传
frameError=frameError+1;%记为误帧数加1
ACK=[frameOrder 1];
else
ACK=[frameOrder 0];
ARQNum(frameOrder2)=ARQNum(frameOrder2)+1;
end
end
%%将ACK重传至发送端
ACKQueue=QueueIn(ACKQueueACK);
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2560 2018-03-10 21:46 ARQ压入时延\ARQ.m
文件 281 2014-09-09 16:45 ARQ压入时延\QueueClear.m
文件 296 2014-09-09 11:21 ARQ压入时延\QueueData.m
文件 343 2014-09-08 23:45 ARQ压入时延\QueueDeep.m
文件 516 2014-09-09 00:02 ARQ压入时延\QueueIn.m
文件 497 2014-09-09 00:10 ARQ压入时延\QueueOut.m
文件 1954 2018-03-09 13:43 ARQ压入时延\transmit.m
目录 0 2018-03-10 20:27 ARQ压入时延
----------- --------- ---------- ----- ----
6447 8
- 上一篇:MATLAB中ARQ程序代码
- 下一篇:matlab元胞自动机交通网模拟
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论