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

📄 comparison of unicast and multicast.m

📁 这是一个基于matlab/RUNE环境的移动通信网络仿真程序包
💻 M
字号:
% Unicast and Multicast Comparison in GPRS Network
% One cell implementation.
% With Link Adaptation

% Clear workspace
%clear
%clc

% 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;

% Create Traffic
user_traffic = traff;

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

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

%------------------------------------------------------------------------
% UNICAST PART
%------------------------------------------------------------------------

% Coding Scheme
cs = CIR_to_CS(CIR_uni,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

    N_user

    % 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 ;
    index = 1; % number of packets received/enter buffer

    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(CIR_multi,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
    
    N_user
    
    % 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;

    index = 1; % number of packets received/enter buffer

    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
%------------------------------------------------------------------------

figure(3)
x = 2:1:30;
subplot(3,1,1)
plot(x,th_uni(2:30),'-');hold on;
plot(x,th_multi(2:30),'+');
grid on; title('Throughput Comparison');
subplot(3,1,2)
plot(x,pl_uni(2:30),'-');hold on;
plot(x,pl_multi(2:30),'+');
grid on; title('Block Error Rate Comparison');
subplot(3,1,3)
plot(x,buff_uni(2:30),'-');hold on;
plot(x,buff_multi(2:30),'+');
grid on; title('Buffer Overflow Comparison');


clear overall_th buffhist packet_loss bits_loss ctoi average_th t_old t_new cs data N_user a b p_loss_chan b_loss_chan success fail transmitted user all_packet bitrate delay index user_traffic CIR_multi CIR_uni CIR buffer traff aa
save comb

⌨️ 快捷键说明

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