Revision: 67757
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 27, 2014 22:10 by eiger_824
Initial Code
%Student: Santiago Pagola %LiU-ID & Personal Number: 930302-T092, sanpa993 %IMPORTANT NOTE: AN EXTERNAL FUNCTION WAS CREATED IN ORDER TO WRAP THE SUMS %OF THE VECTORS: a = sumk(vector,k). It will be described in the report, %but basically sums the first k elements of an array called 'vector'. %clear all variables from workspace, close all figures and clear everything %in command line clear all close all clc %--------------------------CONSTANT DEFINITIONS----------------------------- m = 100; %100 nodes on no-buffering assumption t = 1000; %Time: 1000 slots of time slots = 1:t; %Slots array backlog_array = zeros(size(1:t)); %Array of the values of the system backlog n = 0; %Initially, all nodes are unbacklogged packets_leaving = 1:t; %Array which will count #packets leaving the system packets_arriving = 1:t; %Array which will count #packets entering the system success = 0; %number of succesful transmissions ps_simulation = 0; %Simulated probability of success ps_theory = 0; %Theoretical probability of success state_probs = zeros(size(1:m)); %Array with the values of the steady state probabilities states = 1:m; %States array Att_Rate = 1:m; %Attemp-rate array G_n = zeros(size(1:m)); %Attempt rate array Ps = zeros(size(1:m)); %--------------------------------------------------------------------------- qr = input('Type retransmission probability, qr: '); %Ask user for qr lambda = input('Type overal arrival rate: '); %Ask user for overall arrival rate qa = 1-exp(1)^(-lambda/m); %qa is the probability that each unbacklogged node has to transmit in the next slot for i = 1:t %Let's now calculate the probabilities that up to 10 unbacklogged nodes %transmit (up to 10 new arrivals)(Same with the probabilities that up to 10 backlogged nodes %retransmit (up to 10 new arrivals)) Qa = zeros(size(1,11)); Qr = zeros(size(1,11)); for j = 0:10 Qa (j+1) = binopdf(j,m-n,qa); end for j = 0:10 Qr (j+1) = binopdf(j,n,qr); end %a and b will act as two random numbers between 0 and 1, which will be %two different realizations of Qa_i and Qr_i a = rand(1); b = rand(1); %Now, two conditions must be made: one for the case when there are %backlogged nodes, and other one for the case when there are no %backlogged nodes: %CASE 1: NO BACKLOGGED NODES if n == 0 if 0 <= a && a <= sumk(Qa,1) %CASE: NO BACKLOGGED NODES NOR UNBACKLOGGED PACKETS, NO TRANSMISSION->IDLE SLOT packets_arriving(i)=0; packets_leaving(i)=0; elseif sumk(Qa,1) < a && a <= sumk(Qa,2) %CASE: NO BACKLOGGED NODES % 1 UNBACKLOGGED PACKET TRANSMITS SUCCESFULLY packets_arriving(i)=1; packets_leaving(i)=1; success=success+1; elseif sumk(Qa,2) < a && a <= sumk(Qa,3) %CASE: NO BACKLOGGED NODES & 2 UNBACKLOGGED PACKETS TRANSMIT->COLLISION n=n+2; packets_arriving(i)=2; packets_leaving(i)=0; elseif sumk(Qa,3) < a && a <= sumk(Qa,4) %COLLISION n=n+3; packets_arriving(i)=3; packets_leaving(i)=0; elseif sumk(Qa,4) < a && a <= sumk(Qa,5) %COLLISION n=n+4; packets_arriving(i)=4; packets_leaving(i)=0; elseif sumk(Qa,5) < a && a <= sumk(Qa,6) %AND SO ON... n=n+5; packets_arriving(i)=5; packets_leaving(i)=0; elseif sumk(Qa,6) < a && a <= sumk(Qa,7) n=n+6; packets_arriving(i)=6; packets_leaving(i)=0; elseif sumk(Qa,7) < a && a <= sumk(Qa,8) n=n+7; packets_arriving(i)=7; packets_leaving(i)=0; elseif sumk(Qa,8) < a && a <= sumk(Qa,9) n=n+8; packets_arriving(i)=8; packets_leaving(i)=0; elseif sumk(Qa,9) < a && a <= sumk(Qa,10) n=n+9; packets_arriving(i)=9; packets_leaving(i)=0; elseif sumk(Qa,10) < a && a <= 1 n=n+10; packets_arriving(i)=10; packets_leaving(i)=0; end else %CASE 2: BACKLOGGED NODES. INSIDE THIS CASE, THREE OPTIONS: %2.1.NO RETRANSMISSION AT ALL %2.2.RETRANSMISSION OF 1 PACKET %2.3.RETRANSMISSION OF 2 OR MORE PACKETS if 0 <= a && a <= sumk(Qr,1) % CASE 2.1: NO RETRANSMISSION OF ANY BACKLOGGED PACKETS if 0 <= b && b <= sumk(Qa,1) %IDLE SLOT, NO NEW ARRIVALS packets_arriving(i)=0; packets_leaving(i)=0; elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %1 NEW PACKET SUCCESFULLY ARRIVED packets_arriving(i)=1; packets_leaving(i)=1; success=success+1; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %2 NEW PACKETS ARRIVED - COLLISION n=n+2; packets_arriving(i)=2; packets_leaving(i)=0; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %3 NEW PACKETS ARRIVED - COLLISION n=n+3; packets_arriving(i)=3; packets_leaving(i)=0; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) %AND SO ON... n=n+4; packets_arriving(i)=4; packets_leaving(i)=0; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; packets_arriving(i)=5; packets_leaving(i)=0; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; packets_arriving(i)=6; packets_leaving(i)=0; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; packets_arriving(i)=7; packets_leaving(i)=0; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; packets_arriving(i)=8; packets_leaving(i)=0; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; packets_arriving(i)=9; packets_leaving(i)=0; elseif sumk(Qa,10) < b && b <= 1 n=n+10; packets_arriving(i)=10; packets_leaving(i)=0; end elseif sumk(Qr,1) < a && a <= sumk(Qr,2) % CASE 2.2: RETRANSMISSION OF A SINGLE PACKET if 0 <= b && b <= sumk(Qa,1) %CASE: SUCCESFUL BACKLOG n=n-1; %n DECREASES 1 UNIT packets_arriving(i)=1; packets_leaving(i)=1; success=success+1; elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %CASE: COLLISION->1 NEW ARRIVAL, 1 BACKLOG n=n+1; packets_arriving(i)=2; packets_leaving(i)=0; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %CASE: COLLISION->2 NEW ARRIVALS, 1 BACKLOG n=n+2; packets_arriving(i)=3; packets_leaving(i)=0; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %AND SO ON... n=n+3; packets_arriving(i)=4; packets_leaving(i)=0; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) n=n+4; packets_arriving(i)=5; packets_leaving(i)=0; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; packets_arriving(i)=6; packets_leaving(i)=0; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; packets_arriving(i)=7; packets_leaving(i)=0; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; packets_arriving(i)=8; packets_leaving(i)=0; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; packets_arriving(i)=9; packets_leaving(i)=0; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; packets_arriving(i)=10; packets_leaving(i)=0; elseif sumk(Qa,10) < b && b <= sumk(Qa,11) n=n+10; packets_arriving(i)=11; packets_leaving(i)=0; end elseif sumk(Qr,2) < a && a <= 1 %CASE 2.3: RETRANSMISSION OF 2 OR MORE PACKETS if sumk(Qr,2) < a && a <= sumk(Qr,3) %Let aux be an auxiliary variable indicating the number of backlogged nodes. aux=2; elseif sumk(Qr,3) < a && a <= sumk(Qr,4) aux=3; elseif sumk(Qr,4) < a && a <= sumk(Qr,5) aux=4; elseif sumk(Qr,5) < a && a <= sumk(Qr,6) aux=5; elseif sumk(Qr,6) < a && a <= sumk(Qr,7) aux=6; elseif sumk(Qr,7) < a && a <= sumk(Qr,8) aux=7; elseif sumk(Qr,8) < a && a <= sumk(Qr,9) aux=8; elseif sumk(Qr,9) < a && a <= sumk(Qr,10) aux=9; end if 0 <= b && b <= sumk(Qa,1) % 0 ARRIVALS->BACKLOG REMAINS THE SAME BEACUSE NO UNBACKLOGGED NODES TRANSMIT packets_arriving(i)=aux; packets_leaving(i)=0; elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %BACKLOG WILL INCREASE 1 BECAUSE THERE IS COLLISION n=n+1; packets_arriving(i)=aux+1; packets_leaving(i)=0; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %2 ARRIVALS, BACKLOG INCREASES TOO BECAUSE OF COLLISION n=n+2; packets_arriving(i)=aux+2; packets_leaving(i)=0; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %AND SO ON... n=n+3; packets_arriving(i)=aux+3; packets_leaving(i)=0; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) n=n+4; packets_arriving(i)=aux+4; packets_leaving(i)=0; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; packets_arriving(i)=aux+5; packets_leaving(i)=0; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; packets_arriving(i)=aux+6; packets_leaving(i)=0; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; packets_arriving(i)=aux+7; packets_leaving(i)=0; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; packets_arriving(i)=aux+8; packets_leaving(i)=0; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; packets_arriving(i)=aux+9; packets_leaving(i)=0; elseif sumk(Qa,10) < b && b <= 1 n=n+10; packets_arriving(i)=aux+10; packets_leaving(i)=0; end end end backlog_array(i) = n; %Fill the array of the system's backlog end figure(1) %Setting up the plotting environment for the backlog of the system plot(slots,backlog_array) xlabel('Slot number') ylabel('Backlog of the system') title('Backlog of the system vs. Slot number') figure(2) %Setting up the plotting environment for the packets of the system plot(slots,packets_arriving) hold on plot(slots,packets_leaving,'k') grid on xlabel('Slot number') ylabel('Number of packets') title('Number of packets entering (blue) or leaving (black) the system vs. Slot number') figure(3) %Setting up the plotting environment for the histogram of the states max = max(backlog_array); hist(backlog_array,max) %array with the counts of the times in each state nelements = hist(backlog_array,100); %In each bin, it counts how many times element i was seen ("numerical plot of the hist function") for i = 1:m state_probs(i) = nelements(i)/1000; end xlabel('Number of state (n)') ylabel('Frequency of each state') title('Frequency of each state n') %Calculation of the simulated probability of success: ps_simulation = success/t; %Calculation of the theoretical probability of success: for i = 1:m aux = (binopdf(1,m-(i-1),qa)*binopdf(0,(i-1),qr))+(binopdf(0,m-(i-1),qa)*binopdf(1,i-1,qr)); aux2 = aux * state_probs(i); ps_theory = ps_theory + aux2; end %Attempt rate plot (theoretical value): for n = 1:m Att_Rate(n) = (m-(n-1))*qa + (n-1)*qr; end figure(4) plot(states,Att_Rate,'r') axis([0 100 0 1]) xlabel('State, n') ylabel('Attemp rate, G(n)') title('Attempt rate as a function of the current state n') disp(['Simulated Probability of Success: ' num2str(ps_simulation) '.']) disp(['Theoretical Probability of Success: ' num2str(ps_theory) '.'])
Initial URL
Initial Description
SLOTTED ALOHA SYSTEM IN MATLAB, INPUTS ARE qr and lambda.
Initial Title
SLOTTED ALOHA SYSTEM
Initial Tags
Initial Language
MatLab