-
大小: 15KB文件類型: .zip金幣: 2下載: 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\on
?????文件??????????96??2016-11-23?11:07??ARQ3.5\on
?????文件????????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\on
?????文件?????????133??2016-11-23?11:10??ARQ3.5\on
?????文件??????????93??2016-11-23?11:10??ARQ3.5\on
?????文件??????????96??2016-11-23?11:11??ARQ3.5\on
?????文件?????????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
- 上一篇:彈道圖繪制-matlab代碼
- 下一篇:MATLAB實現ARQ
評論
共有 條評論