1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
涉及到具体的数据包大小以及时间延迟,我们通过构建一个FIFO,来虚拟网络的实际工作情况,当空闲情况下,网络流量非常小,我们的数据通过FIFO,会在FIFO内排队,等候前面的数据传输出去后,再发送出去,在FIFO中等候时间为30~60ms,小于发送间隔,因此,不会发生堵塞,而当网络比较拥堵的情况下,那么FIFO中包含了大量的网络背景流量,那么当前数据发送出去的时候,就会在FIFO内等候,这个等候时间往往120ms到180ms之间,当时间过了100ms,此时,第二个数据发送过来饿了,如果此时FIFO已经满了,那么就会发送丢包(FIFO满,则说明网络负荷达到极限,进入的数据全部丢失)。另外,在等候时间中,数据会以一个随机的小概率丢包,那么等候时间越长,丢包的概率就越大。然后假设FIFO中每次数据的流量的时间长度为1ms,如果等候时间为100ms,则说明拥堵在当前数据前的背景流量有100kb通过这个原理我们来进行仿真实现,FIFO的深度大小,反应了实际网络的传输能力。下面我们首先对原始的传输方法进行仿真。
自适应传输模糊控制器的实现
将依照FFSI推理方法建立自适应传输模糊控制器,首先对输入、输出变量进行模糊划分,以往返时延的差值和当前时刻的发包时间间隔Tc作为模糊控制器的输入,模糊控制器的输出是下一次发包时间间隔的调整,通过与当前时刻发包时间间隔Tc累加作为下一时刻的发包间隔Tn。
网络时延的测量可知,端到端网络时延整体上随时间变化幅度较大,不适合直接用RTT值作为模糊控制器的输入变量。本文采用当前时刻预测时延与当前时刻的往返时延值RTTc的差值作为ATFC的一个输入变量。的隶属度函数如图5.9所示,论域为[-15ms,15ms],共分为7个模糊等级,分别为:负大(NB)、负中(NM)、负小(NS)、零(ZE)、正小(PS)、正中(PM)、正大(PB)。
ATFC应用在网络拥塞场景下,当拥塞恶化时应增大发包间隔,减少网络拥塞对能耗数据包的影响,降低传输丢包率;当拥塞减缓时应减小发包间隔的原则,提高能耗数据包的传输效率。结合先验经验制定ATFC模糊控制规则如表所示。
3.MATLAB核心程序
%注入背景流量,使得网络进入拥塞状态,即网络时延明显变大,时延抖动加剧, %空闲状态下时延值要求在30~60ms,拥塞状态下要求在120~180ms,我们要对比的区间就是在拥塞状态下。 MTKL = 100;%蒙特卡洛循环次数 DBL1 = cell(1,MTKL); for jj = 1:MTKL jj rng(jj) DBL2 = []; %即能够存放1000kB数据量 ability = 4.3;%网络(FIFO)1ms内传输能力 FIFO_Depth = 200; bg_Size = zeros(1,Times); pg_Size = zeros(1,Times); FIFO_Size = FIFO_Depth*ones(1,Times); DB = 0;%定义丢包次数 ALL = 0;%总发送次数 for i = 1:Times %发送数据包,原始传输方法,每100ms发送一次 if mod(i,100) == 1 pg_Size(i) = Pg_Size_sub; ALL = ALL +1; else pg_Size(i) = 0; end %建立一个虚拟的FIFO,当网络空闲的时候,数据包通过这个FIFO需要 ...................................................................... %计算当前环境下的丢包变换曲线并显示最后的丢包率值 DBL2(ALL) = DB/ALL; end DBL1{jj} = DBL2; Lens(jj) = ALL; end %计算均值 DBLavg = zeros(1,min(Lens)); for i = 1:min(Lens) tmps = 0; for jj = 1:MTKL tmps = tmps + DBL1{jj}(i); end DBLavg(i) = tmps/MTKL; end figure; plot(FIFO_Size); xlabel('时间(ms)'); ylabel('网络流量承载能力变换情况'); grid on figure; subplot(211); plot(100*DBLavg,'-bs',... 'LineWidth',2,... 'MarkerSize',8,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.9,0.0,0.0]); xlabel('发送次数'); ylabel('丢包率'); grid on STR = ['最终丢包率:',num2str(100*DBLavg(end)),'%']; text(length(DBLavg)/2,70,STR); axis([0,length(DBL2),0,100]); ind = find(pg_Size>0); Len = length(ind); subplot(212) plot(pg_Size(1:(Len-1)*100),'b-o'); axis([0,1500,0,3]); xlabel('times'); ylabel('发送数据包大小'); grid on
标签:jj,模糊控制,包率,网络,FIFO,发送,matlab,时延,Size From: https://www.cnblogs.com/51matlab/p/17357687.html