• 大小: 15KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: MATLAB,arq  

资源简介

MATLAB程序软件中的ARQ重传技术的实现,已经通过测试运行

资源截图

代码片段和文件信息

%选择重传ARQ
clear
frameNum=1e2;%帧数
frameLength=10;%帧长
frameOrder=0;%帧号
frameOrderBuff=0;%帧号缓存
ACK=[0 0];%ACK的组成为 第1位帧号,第2位传输有效位,第2位等于1时表示该帧发送正确,等于0是表示发送错误需要重传
ACKQueue=zeros(53);%每行代表一组ACK数据,第1位是数据有效位,第23位为ACK数据;列数为队列长度
MaxARQNum=4;%最大重传次数
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];  
         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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-23 11:19  ARQ3.5\
     文件        2503  2014-09-09 16:53  ARQ3.5\ARQ.m
     文件        4759  2016-11-23 11:04  ARQ3.5\gobackn.m
     文件        3836  2016-11-23 11:02  ARQ3.5\onfigure.m
     文件          93  2016-11-23 11:05  ARQ3.5\ongobackn.m
     文件          96  2016-11-23 11:05  ARQ3.5\ongobackn2.m
     文件         134  2016-11-23 11:06  ARQ3.5\onpause.m
     文件          93  2016-11-23 11:07  ARQ3.5\onselectiverepeat.m
     文件          96  2016-11-23 11:07  ARQ3.5\onselectiverepeat2.m
     文件        2521  2016-11-23 11:08  ARQ3.5\onsimulation.m
     文件         398  2016-11-23 11:09  ARQ3.5\onslidebar.m
     文件        1221  2016-11-23 11:09  ARQ3.5\onstart.m
     文件         133  2016-11-23 11:10  ARQ3.5\onstop.m
     文件          93  2016-11-23 11:10  ARQ3.5\onstopandwait.m
     文件          96  2016-11-23 11:11  ARQ3.5\onstopandwait2.m
     文件         281  2014-09-09 16:45  ARQ3.5\QueueClear.m
     文件         296  2014-09-09 11:21  ARQ3.5\QueueData.m
     文件         343  2014-09-08 23:45  ARQ3.5\QueueDeep.m
     文件         516  2014-09-09 00:02  ARQ3.5\QueueIn.m
     文件         497  2014-09-09 00:10  ARQ3.5\QueueOut.m
     文件        2960  2016-11-23 11:12  ARQ3.5\runanimation.m
     文件        9847  2016-11-23 11:14  ARQ3.5\selectiverepeat.m
     文件        2297  2016-11-23 11:15  ARQ3.5\stopandwait.m
     文件        3139  2016-11-23 11:16  ARQ3.5\sw.m

评论

共有 条评论

相关资源