?? vararrivalrate.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
% 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 + =
減小字號
Ctrl + -