基于matlab的网络通信系统自适应传输模糊控制器的实现

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       网络通信系统的自适应传输模糊控制器是一种先进的网络控制算法,它有效地结合了模糊逻辑和自适应传输技术,主要用于网络拥塞控制和数据包传输效率的提升。

一、理论基础

       模糊逻辑在网络通信系统中的应用主要体现在对传输数据包的模糊划分上。对于网络时延的测量,端到端网络时延整体上随时间变化幅度较大,不适合直接用RTT值作为模糊控制器的输入变量。因此,采用当前时刻预测时延与当前时刻的往返时延值RTTc的差值作为模糊控制器的输入变量。同时,对于当前发包时间间隔Tc,也进行了模糊划分,其论域为[100ms,500ms],共分为5个模糊等级,分别为:很短(S)、较短(SM)、中等(M)、较长(ML)、很长(L)。

二、核心程序

自适应传输模糊控制器主要通过以下步骤实现:

  1. 测量当前时刻的发包时间间隔Tc和预测时延与当前时刻的往返时延值RTTc的差值Δt。
  2. 根据Δt和发包时间间隔Tc的隶属度函数,计算下一个发包时间间隔Tn。计算公式为:Tn = Tc - Δt。
  3. 根据网络拥塞情况和Δt的值,调整发包时间间隔Tn。当拥塞恶化时,应增大发包间隔,以减少网络拥塞对能耗数据包的影响,降低传输丢包率;当拥塞减缓时,应减小发包间隔,以提高能耗数据包的传输效率。
  4. 将调整后的发包时间间隔Tn应用于数据包的传输。

(1) 输入输出变量模糊划分

      本小节将依照FFSI推理方法建立自适应传输模糊控制器,首先对输入、输出变量进行模糊划分,以往返时延的差值和当前时刻的发包时间间隔Tc作为模糊控制器的输入,模糊控制器的输出是下一次发包时间间隔的调整,通过与当前时刻发包时间间隔Tc累加作为下一时刻的发包间隔Tn。

  • 往返时延差模糊划分

      根据第四章网络时延的测量可知,端到端网络时延整体上随时间变化幅度较大,不适合直接用RTT值作为模糊控制器的输入变量。本文采用当前时刻预测时延与当前时刻的往返时延值RTTc的差值作为ATFC的一个输入变量。的隶属度函数如图5.9所示,论域为[-15ms,15ms],共分为7个模糊等级,分别为:负大(NB)、负中(NM)、负小(NS)、零(ZE)、正小(PS)、正中(PM)、正大(PB)。

 ②当前发包间隔Tc模糊划分

      当前发包间隔Tc的隶属度函数如图5.10所示,Tc的论域为[100ms,500ms],共分为5模糊个等级,分别为:很短(S)、较短(SM)、中等(M)、较长(ML)、很长(L)。

 ③发包间隔的调整模糊划分

       图为发包间隔的调整的隶属度函数,的论域为[-200ms,200ms],共分为5个模糊等级,分别为较大减小(LD)、较小减小(SD)、不变(NC)、较小增大(SI)、较大增大(LI)。

       ATFC应用在网络拥塞场景下,当拥塞恶化时应增大发包间隔,减少网络拥塞对能耗数据包的影响,降低传输丢包率;当拥塞减缓时应减小发包间隔的原则,提高能耗数据包的传输效率。结合先验经验制定ATFC模糊控制规则如表所示。

Tc

NB

NM

NS

ZE

PS

PM

PB

S

NC

NC

NC

NC

SI

LI

LI

SM

SD

SD

SD

NC

SI

LI

LI

M

LD

SD

SD

NC

SI

SI

LI

ML

LD

LD

SD

NC

SI

SI

SI

L

LD

LD

LD

NC

NC

NC

NC

(3) 反模糊化

       通过式进行反模糊化求解,进一步将发包间隔调整与当前的发包间隔Tc累加计算下一次的的发包时间间隔Tn,同时为了避免累加之后Tn出现过大或者过小的情况,利用Tc的论域为[100ms,500ms]作为对发包间隔进行限制,如式所示:

整个算法的整体流程图如下所示:

二、核心程序

clc;
clear;
close all;
warning off;

%一次待发送总数据包大小为25kB
Pg_Size_all = 25;
Pg_Size_sub = 4;
Time        = 100;
%仿真时间为4000ms
Times       = 8000;

%注入背景流量,使得网络进入拥塞状态,即网络时延明显变大,时延抖动加剧,
%空闲状态下时延值要求在30~60ms,拥塞状态下要求在120~180ms,我们要对比的区间就是在拥塞状态下。
MTKL = 100;%蒙特卡洛循环次数
DBL1 = cell(1,MTKL);
for jj = 1:MTKL
    jj
    RandStream.setDefaultStream(RandStream('mt19937ar','seed',jj));
    DBL2        = [];    
    %即能够存放1000kB数据量
    ability     = 4.4;%网络(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需要 
        %产生随机大小的背景流量填充到FIFO中
        bg_Size(i)  = floor(8*rand(1,1))+1;
        %计算当前时刻网络中的剩余符合流量
        if i == 1
           FIFO_Size(i)= max(FIFO_Depth     - bg_Size(i) - pg_Size(i) + ability,0);
        else
           FIFO_Size(i)= max(FIFO_Size(i-1) - bg_Size(i) - pg_Size(i) + ability,0); 
        end
        %判断是否丢包
        if  mod(i,100) == 1
            if FIFO_Size(i) < Pg_Size_sub%丢包
               DB = DB + 1;
            else
               %在等候时间内,以一个小概率事件丢包
               P = rand();
               if P < 0.01
                  DB = DB + 1;
               else
                  DB = DB; 
               end
            end
        end
        %计算当前环境下的丢包变换曲线并显示最后的丢包率值
        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;
subplot(211);
plot(FIFO_Size);
xlabel('时间');
ylabel('网络流量承载能力变换情况');
grid on
subplot(212)
plot(100*DBLavg,'b-*');
xlabel('传输次数');
ylabel('丢包率');
grid on
STR = ['最终丢包率:',num2str(100*DBL2(end)),'%'];
text(length(DBL2)/2,70,STR);
axis([0,length(DBL2),0,100]);

三、测试结果

 

 

 

 A12-12

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值