📄 selectiverepeat.m
字号:
while paknum<Nsimul
time=time2;
for i=1:Maxfrn
test = rand>Ploss;
framen=rem(paknum,Maxfrn);
if test
Pak = [Pak; paknum time time+Ttran+Tprop framen];
else
Pak = [Pak; paknum time Inf framen];
Pak = [Pak; paknum time+Timeout time+2*Timeout-Tprop framen];
end
time=time+Ttran;
time2=time+Tprop;
paknum=paknum+1;
i=i+1;
end
for j=paknum-Maxfrn+1:paknum
Ack = [Ack; Pak(j,1) Pak(j,3) Pak(j,3)+Tprop Pak(j,4)];
j=j+1;
end;
end;
Umas(1)=LFS*Ttran/time;
end;
Nsimul=busysender-1;
while paknum<Nsimul %iterate until all frames have been sent (Nsimul=total frames, LFS=last frame sent)
framen=rem(paknum,Maxfrn);
test = rand>Ploss;
if test
Pak = [Pak; paknum time time+Ttran+Tprop framen];
else
Pak = [Pak; paknum time Inf framen];
Pak = [Pak; paknum time+Timeout time+2*Timeout-Tprop framen];
end
time=time+Ttran+Tprop;
paknum=paknum+1;
end;
i=1;
while i<=length(Pak)
Ack = [Ack; Pak(i,1) Pak(i,3) Pak(i,3)+Tprop Pak(i,4)];
i=i+1;
%end;
Umas(1)=LFS*Ttran/time;
end;
%function [Umas,Pak,Ack]=selectiverepeat(amas,Nsimul,Ploss,SWS);
while LFS<Nsimul %iterate until all frames have been sent (Nsimul=total frames, LFS=last frame sent)
% disp([time LFS LFA]);
% disp(stacktimeout)
% resend packets if timeout
ind=find(stacktimeout(:,2)<=time);% find() this returns the packet that just timed out
%ind is an array of timedout (row)
if length(ind)
nopak=stacktimeout(1,1);
if time>=busysender
busysender=time+Ttran; %beginning to send and gives time for when time is up
stacktimeout=[nopak time+Timeout]; %overwri
framen=rem(nopak,Maxfrn); %assign the packet a frame number 0 sws
gotit=rand>Ploss;
LFS=nopak; %TO DELETE
if gotit
Pak=[Pak; nopak time time+Tprop+Ttran framen];
stackarrive=[stackarrive; nopak time+Tprop+Ttran];
else
Pak=[Pak; nopak time Inf framen];
end
end
end
% if no timeout we can send new packet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -