⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vararrivalrate.m

📁 这是一个基于matlab/RUNE环境的移动通信网络仿真程序包
💻 M
字号:
% Unicast and Multicast Comparison in GPRS Network
% One cell implementation.
% Varying Arrival Rate 
% CI = 1st ed
% LA = Average
% abc = 7,14,21(DD) and 6,9,16(WI)

% Maximum time for simulation
t_max = 15*60; % seconds

% Sampling time
t_samp = 0.02; % the time is discrete, with sampling time is 1
% RLC blocks

% Number of Time slots
num_ts = 4;

% Carrier to Interference Ratio for user (as an input from channel part)
ctoi = CIR2_raw;

% Link adaptation, to change coding scheme assignment table
cs_a = 6;
cs_b = 9;
cs_c = 16;


for p = 1:3
%------------------------------------------------------------------------
% UNICAST PART
%------------------------------------------------------------------------

    % Varying Traffic
    switch p
        case 1
            user_traffic = traff1;
        case 2
            user_traffic = traff2;
        case 3
            user_traffic = traff3;
    end
    
    % Coding Scheme
    cs = CIR_to_CS(CIR2_realtime_unicast,cs_a,cs_b,cs_c);

    % Initialization
    buffhist = zeros(1,30);
    overall_th = zeros(1,30);
    packet_loss = zeros(1,30);
    bits_loss = zeros(1,30);
    
    % to make a graph, user 2-50
    
    for N_user = 2:30
    
        % Create Buffer
        buffer = zeros(1,N_user);


        %user throughput
        average_th = zeros(1,N_user);
        data = zeros(1,N_user);

        % User's delay 
        delay = zeros(1,N_user);

        % Loss channel
        p_loss_chan = zeros(1,N_user); %packet
        b_loss_chan = zeros(1,N_user); %bits

        % Let it start!!!
        t_old = 0;
        t_new = t_old + t_samp;
    
        user = 1 ;

        while (t_new<t_max-0.0001)
            
            % Update buffer 
            buffer = buffer + sum(user_traffic(floor(t_old/t_samp+1):floor((t_new/t_samp)))); % fill buffer with packet

        
            % transmitting data
            switch (cs(user,floor((t_old/t_samp)+1)))
                case 1
                    bitrate = num_ts*9050; %coding scheme 1
                case 2
                    bitrate = num_ts*13400; %coding scheme 2
                case 3
                    bitrate = num_ts*15600; %coding scheme 3
                case 4
                    bitrate = num_ts*21400; %coding scheme 4
            end

            transmitted = bitrate * 0.0046 * 4; %4 RLC blocks
    
            if (buffer(user) < transmitted)
                transmitted = buffer(user);
            end


            % emptying buffer
            buffer(user) = buffer(user)-transmitted; 

            %calculating throughput
            a = per(cs(user,floor((t_old/t_samp)+1)),ctoi(user,floor((t_old/t_samp)+1)));
            aa = a*ones(1,num_ts);
            b = rand(1,num_ts) ;
            success = find (b>=aa);
            data(user) = data(user) + ((transmitted/num_ts)*length(success));
            fail = find (b<aa);
            p_loss_chan(user) = p_loss_chan(user) + length(fail) ;
            b_loss_chan(user) = b_loss_chan(user) + ((transmitted/num_ts)*length(fail));
            
            % Next time, next user
            user = mod(user,N_user)+1;
            t_old = t_new;
            t_new = t_new + t_samp; % update time
        end

        % Overall throughput
        average_th = data/t_max; 
        overall_th(N_user) = sum(average_th)/N_user;   
        %average packet loss
        all_packet = (t_max/t_samp)*4;
        packet_loss(N_user) = sum(p_loss_chan)/(all_packet);
        %average bits loss
        bits_loss(N_user) = sum(b_loss_chan)/(N_user*t_max); 
        %buffer history 
        buffhist(N_user) = sum(buffer)/N_user;    

    end

    th_uni = overall_th;
    pl_uni = packet_loss;
    buff_uni = buffhist;
    
    
%------------------------------------------------------------------------
% MULTICAST PART
%------------------------------------------------------------------------

    % Coding Scheme
    cs = CIR_to_CS(CIR2_realtime_unicast,cs_a,cs_b,cs_c);

    % Initialization
    buffhist = zeros(1,30);
    overall_th = zeros(1,30);
    packet_loss = zeros(1,30);
    bits_loss = zeros(1,30);

    % to make a graph, user 2-50

    for N_user = 2:30

        % Create Buffer
        buffer = 0;
    
        %user throughput
        average_th = zeros(1,N_user);
        data = zeros(1,N_user);

        % User's delay 
        delay = zeros(1,N_user);

        % Loss channel
        p_loss_chan = zeros(1,N_user); %packet
        b_loss_chan = zeros(1,N_user); %bits
    
        % Let it start!!!
        t_old = 0;
        t_new = t_old + t_samp;

        while (t_new<t_max-0.0001)

            % Update buffer 
            buffer = buffer + sum(user_traffic(floor(t_old/t_samp+1):floor((t_new/t_samp)))); % fill buffer with packet
        
            % transmitting data
            switch (cs(N_user,floor((t_old/t_samp)+1)))
                case 1
                    bitrate = num_ts*9050; %coding scheme 1
                case 2
                    bitrate = num_ts*13400; %coding scheme 2
                case 3
                    bitrate = num_ts*15600; %coding scheme 3
                case 4
                    bitrate = num_ts*21400; %coding scheme 4
            end

            transmitted = bitrate * 0.0046 * 4; %4 RLC blocks
        
            if (buffer < transmitted)
                transmitted = buffer;
            end
    
            % emptying buffer
            buffer = buffer-transmitted; 
    
            %calculating throughput
            a = per(cs(N_user,floor((t_old/t_samp)+1)),ctoi(1:N_user,floor((t_old/t_samp)+1))');
            aa = ones(num_ts,1)*a;
            b = rand(num_ts,N_user);
        
            for ts = 1:num_ts
                success = find (b(ts,:) >= aa(ts,:));
                data(success) = data(success) + (transmitted/num_ts);
                fail = find (b(ts,:) < aa(ts,:));
                p_loss_chan(fail) = p_loss_chan(fail) + 1 ;
                b_loss_chan(fail) = b_loss_chan(fail) + (transmitted/num_ts);
            end
        
            t_old = t_new;
            t_new = t_new + t_samp; % update time
        end

        % Overall throughput
        average_th = data/t_max;
        overall_th(N_user) = sum(average_th)/N_user;
        %average packet loss
        all_packet = N_user*(t_max/t_samp)*4;
        packet_loss(N_user) = sum(p_loss_chan)/(all_packet);
        %average bits loss
        bits_loss(N_user) = sum(b_loss_chan)/(N_user*t_max);
        %buffer history
        buffhist(N_user) = sum(buffer);  
   
    end

    th_multi = overall_th;
    pl_multi = packet_loss;
    buff_multi = buffhist;


%------------------------------------------------------------------------
% Plotting at the same graph
%------------------------------------------------------------------------

    x = 2:1:30;

    switch p
        case 1
            save tra1 th_uni pl_uni buff_uni th_multi pl_multi buff_multi;
            figure(2)
            plot(x,th_uni(2:30),':*');hold on;
            plot(x,th_multi(2:30),':+');
            grid on; title('Throughput Comparison');
            figure(3)
            subplot(2,1,1)
            plot(x,pl_uni(2:30),':*');hold on;
            plot(x,pl_multi(2:30),':+');
            grid on; title('Block Error Rate Comparison');
            subplot(2,1,2)
            plot(x,buff_uni(2:30),':*');hold on;
            plot(x,buff_multi(2:30),':+');
            grid on; title('Buffer Overflow Comparison');
        case 2
            save tra2 th_uni pl_uni buff_uni th_multi pl_multi buff_multi;
            figure(2)
            plot(x,th_uni(2:30),'-*');hold on;
            plot(x,th_multi(2:30),'-+');
            grid on; title('Throughput Comparison');
            figure(3)
            subplot(2,1,1)
            plot(x,pl_uni(2:30),'-*');hold on;
            plot(x,pl_multi(2:30),'-+');
            grid on; title('Block Error Rate Comparison');
            subplot(2,1,2)
            plot(x,buff_uni(2:30),'-*');hold on;
            plot(x,buff_multi(2:30),'-+');
            grid on; title('Buffer Overflow Comparison');
        case 3
            save tra3 th_uni pl_uni buff_uni th_multi pl_multi buff_multi;
            figure(2)
            plot(x,th_uni(2:30),'--*');hold on;
            plot(x,th_multi(2:30),'--+');
            grid on; title('Throughput Comparison');
            figure(3)
            subplot(2,1,1)
            plot(x,pl_uni(2:30),'--*');hold on;
            plot(x,pl_multi(2:30),'--+');
            grid on; title('Block Error Rate Comparison');
            subplot(2,1,2)
            plot(x,buff_uni(2:30),'--*');hold on;
            plot(x,buff_multi(2:30),'--+');
            grid on; title('Buffer Overflow Comparison');
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -