function [x,y] = bitrate(ipt, ps, k, steps, unit, time_unit)
%function [x,y] = bitrate(ipt, ps, k, steps, unit, time_unit)
% ipt: inter packet times
% ps: vector of packet sizes (set to a single value to calculate the packet rate)
% k: sampling period of the calculated rate
% steps: how many samples to compute
% unit:
% set unit = 1 to have byte rate
% set unit = 8 to have bit rate (unaffected if packet rate is requested)
% time_unit:
% if ipt are expressed in seconds set to 1
% if ipt are exepressed in ms set to 1000
% etc..
%
% Note that ps() has one more element than ipt() !
%
% Output:
% x: time ticks
% y: corresponding rate for each tick
%
% TODO:
%
% - to be able to accept timestamps instead of IPTs as an input
%
% Copyright (c) 2004-2006 Alessio Botta, Alberto Dainotti, Antonio Pescapè
% Email: {a.botta , alberto , pescape }@unina.it
% DIS - Dipartimento di Informatica e Sistemistica
% University of Napoli Federico II, ITALY
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions
% are met:
% 1. Redistributions of source code must retain the above copyright
% notice, this list of conditions and the following disclaimer.
% 2. Redistributions in binary form must reproduce the above copyright
% notice, this list of conditions and the following disclaimer in the
% documentation and/or other materials provided with the distribution.
% 3. Redistributions of source code or in binary form must clearly reproduce
% the reference to the web site from which they were downloaded.
%
% THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
% FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
% DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
% OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
% HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
% OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
% SUCH DAMAGE.
t = 0; % time
i = 1; % vectors index
j = 1; % steps index
% If "ps" is not a vector, then calculate the packet rate
if length(ps) == 1
ps = ones(1,length(ipt)+1);
unit = 1;
end
ipt = ipt / time_unit;
y(j) = ps(i) * unit; % First packet comes at time zero and has no corresponding interarrival time
% Note that ps() has one more element than ipt() !
% For the programmer: if you prefer to have vectors of equal size, with the
% first interarrival set to 0, then:
% - delete this line
% - move "y(j) = 0;" from the end of the main cycle to its start
% - change ps(i+1) to ps(i) in the first inner cycle
% Do "steps" steps
while (j <= steps)
% For each step, while time of next pkt is smaller/eq. of next tick, do:
while ((t + ipt(i)) < (j * k))
t = t + ipt(i); % update current time
y(j) = y(j) + (ps(i+1) * unit); % add size of current packet
i = i + 1; % go to the next packet
% Stupid check
if (i > length(ipt))
break;
end
end
% Stupid check
if (i > length(ipt))
break;
end
% Next time is outside current step. Increase step.
j = j + 1;
% Check if there are empty steps
while ((t + ipt(i)) >= (j * k))
y(j) = 0;
j = j + 1;
end
y(j) = 0;
end
x = 0:1:j-1;
fprintf('Average rate: %d\n', mean(y));
fprintf('Standard deviation: %d\n', std(y));