/ Published in: MatLab
SLOTTED ALOHA SYSTEM IN MATLAB, INPUTS ARE qr and lambda.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
%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 %--------------------------CONSTANT DEFINITIONS----------------------------- m = 100; %100 nodes on no-buffering assumption t = 1000; %Time: 1000 slots of time slots = 1:t; %Slots array 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 states = 1:m; %States array Att_Rate = 1:m; %Attemp-rate array %--------------------------------------------------------------------------- qa = 1-exp(1)^(-lambda/m); %qa is the probability that each unbacklogged node has to transmit in the next slot %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)) end 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 %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 elseif sumk(Qa,1) < a && a <= sumk(Qa,2) %CASE: NO BACKLOGGED NODES % 1 UNBACKLOGGED PACKET TRANSMITS SUCCESFULLY success=success+1; elseif sumk(Qa,2) < a && a <= sumk(Qa,3) %CASE: NO BACKLOGGED NODES & 2 UNBACKLOGGED PACKETS TRANSMIT->COLLISION n=n+2; elseif sumk(Qa,3) < a && a <= sumk(Qa,4) %COLLISION n=n+3; elseif sumk(Qa,4) < a && a <= sumk(Qa,5) %COLLISION n=n+4; elseif sumk(Qa,5) < a && a <= sumk(Qa,6) %AND SO ON... n=n+5; elseif sumk(Qa,6) < a && a <= sumk(Qa,7) n=n+6; elseif sumk(Qa,7) < a && a <= sumk(Qa,8) n=n+7; elseif sumk(Qa,8) < a && a <= sumk(Qa,9) n=n+8; elseif sumk(Qa,9) < a && a <= sumk(Qa,10) n=n+9; elseif sumk(Qa,10) < a && a <= 1 n=n+10; 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 <= b && b <= sumk(Qa,1) %IDLE SLOT, NO NEW ARRIVALS elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %1 NEW PACKET SUCCESFULLY ARRIVED success=success+1; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %2 NEW PACKETS ARRIVED - COLLISION n=n+2; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %3 NEW PACKETS ARRIVED - COLLISION n=n+3; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) %AND SO ON... n=n+4; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; elseif sumk(Qa,10) < b && b <= 1 n=n+10; end if 0 <= b && b <= sumk(Qa,1) %CASE: SUCCESFUL BACKLOG n=n-1; %n DECREASES 1 UNIT success=success+1; elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %CASE: COLLISION->1 NEW ARRIVAL, 1 BACKLOG n=n+1; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %CASE: COLLISION->2 NEW ARRIVALS, 1 BACKLOG n=n+2; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %AND SO ON... n=n+3; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) n=n+4; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; elseif sumk(Qa,10) < b && b <= sumk(Qa,11) n=n+10; end aux=2; aux=3; aux=4; aux=5; aux=6; aux=7; aux=8; aux=9; end if 0 <= b && b <= sumk(Qa,1) % 0 ARRIVALS->BACKLOG REMAINS THE SAME BEACUSE NO UNBACKLOGGED NODES TRANSMIT elseif sumk(Qa,1) < b && b <= sumk(Qa,2) %BACKLOG WILL INCREASE 1 BECAUSE THERE IS COLLISION n=n+1; elseif sumk(Qa,2) < b && b <= sumk(Qa,3) %2 ARRIVALS, BACKLOG INCREASES TOO BECAUSE OF COLLISION n=n+2; elseif sumk(Qa,3) < b && b <= sumk(Qa,4) %AND SO ON... n=n+3; elseif sumk(Qa,4) < b && b <= sumk(Qa,5) n=n+4; elseif sumk(Qa,5) < b && b <= sumk(Qa,6) n=n+5; elseif sumk(Qa,6) < b && b <= sumk(Qa,7) n=n+6; elseif sumk(Qa,7) < b && b <= sumk(Qa,8) n=n+7; elseif sumk(Qa,8) < b && b <= sumk(Qa,9) n=n+8; elseif sumk(Qa,9) < b && b <= sumk(Qa,10) n=n+9; elseif sumk(Qa,10) < b && b <= 1 n=n+10; end end end end hold on grid on nelements = hist(backlog_array,100); %In each bin, it counts how many times element i was seen ("numerical plot of the hist function") end %Calculation of the simulated probability of success: ps_simulation = success/t; %Calculation of the theoretical probability of success: ps_theory = ps_theory + aux2; end %Attempt rate plot (theoretical value): for n = 1:m end