
% JAN PAUKEJE, VUT BRNO, 2011
% 
% POMOCNA FUNKCIA, KTORA MA ZA ULOHU TRANSFORMOVAT OKAMIHOVY CASOVY RAD
% NA INTERVALOVY S INTERVALOM POZOROVANIA 30 s.

function [yt yb yh] = countproc30s

clear all;
clc
close all;

% NACITANIE DAT

% nacitanie matice Mx3 casových udajov vo formáte 
%(M,1)= hodina, (M,2)= minuta, (M,3)=sekunda
structxt = load('time.mat'); 
% nacitanie stlpcoveho vektora Mx1 s hodnotami velkosti dat v bytoch
structxb = load('bytes.mat'); 
% nacitanie stlpcového vektora Mx1, kde hodnota 1 identifikuje pristup na 
% domovsku stranku, v opacnom pripade 0.
structxh = load('home.mat'); 


% EXTRAHOVANIE MATICE S CASOVYMI UDAJMI PRICHODU POZIADAVIEK ZO STRUKTURY
xt = getfield(structxt,'time');
xb = getfield(structxb,'bytes');
xh = getfield(structxh,'home');


% INICIALIZACIA PREMENNYCH c - POCITADLO POZIADAVIEK po 1 s, c30 - POCITADLO
% POZIADAVIEK po 30 S , yt - TS VEKTOR RADU,i - POMOCNA PREMENNA PRI
% ITERACIACH, t - pocitadlo sekund, t30 - POCITADLO po 30 s

ct=0;
ct30=0;
cb=0;
cb30=0;
ch=0;
ch30=0;


t=0;
t30=0;

yt=zeros(5760,1); % 48h x 60m x 2(30s) = 5760 polminutovych udajov
yb=zeros(5760,1);
yh=zeros(5760,1);
i=1;
n=length(xt)

% PREDLZI VEKTOR X O 1, KVOLI SPRAVNEMU UKONCENIU SLUCKY WHILE
xt(n+1,1) = 0;
xb(n+1,1) = 0;
xh(n+1,1) = 0;

% INICIALIZACIA POMOCNYCH PREMENNYCH OPERUJUCICH S CASOVYMI UDAJMI 
sS = xt(1,3);
aS = xt(1,3);
sM = xt(1,2);
aM = xt(1,2);
sH = xt(1,1);
aH = xt(1,1);

t = sS;

% SLUCKA 1 WHILE BUDE BEZAT NAD CELOU DLZKOU VEKTORA CASOVYCH UDAJOV
while (i <= n)

    while (t <= 29)
%     PODMIENKA 'HODIN' MA ZARUCIT STABILITU FUNKCIE V PRIPADE, SKAKANIA
%     CASOVYCH UDAJOV, NAPRIKLAD AK ZA CASOVYM UDAJOM 1:11:1 NASLEDUJE UDAJ
%     1:12:1, KDE SA UDAJ O SEKUNDE ROVNA. FUNKCIA SA TAK ZISTI, ZE SA JEDNA
%     O SEKUNDU NASLEDUJUCEJ MINUTY A NEBUDE POKRACOVAT V POCITANI.
        while (sS == aS)&&(sM == aM)&&(sH == aH)
  
    ct=ct+1;
    
    cb=cb+xb(i,1);
    ch=ch+xh(i,1);
    i=i+1;
   
    aS=xt(i,3);
    aM=xt(i,2);
    aH=xt(i,1);
    
        end

% "DIGITALNE HODINY FUNKCIE", STARAJU SA O SPRAVNY ITERACNY CYKLUS 
% HODIN, MINUT A SEKUND. RESPEKTIVE OBMEDZUJU MAXIMALNU HODNOTU MINUT
% A SEKUND NA 59, PO HODNOTE ...59 NASLEDUJE OPAKOVANIE 0,1,...
    if sS<59
        sS=sS+1;
    else sS=0;
        if sM<59
            sM=sM+1;
         else sM=0;
             if sH<23
                 sH=sH+1;
             else sH=0;
             end
        end
    end
    
    t=t+1; % pocitadlo +1s
    ct30=ct30+ct; %pocitadlo poziadaviek po 30 sekundach, + pocet za 1s
    ct=0; % nulovanie pocitadla poziadaviek 1s
    cb30=cb30+cb;
    cb=0;
    ch30=ch30+ch;
    ch=0;
    
    end
    
    t=0; % nulovanie pocitadla t, zacne sa pocitanie novych 30
    t30=t30+1; %pocitadlo casu po 30 s, +1x30 interval
    yt(t30,1)=ct30; % vlozenie poctu za interval 30 s do vektora yt
    yb(t30,1)=cb30;
    yh(t30,1)=ch30; 
    ct30=0; %nulovanie
    cb30=0;
    ch30=0;
end

% ULOZENIE VYSTUPNYCH TS DO MATLAB SUBOROV
save yt yt
save yb yb
save yh yh

% MOZNOST EXPORTU UDAJOV PRIAMO DO EXCEL SUBORU .XLS
% POZOR! EXCEL NEPRIJME VACSI POCET RIADKOV AKO 2^16=65536

xlswrite('ts.xls',yt(:,1),1); % 1. harok pocty poziadaviek
xlswrite('ts.xls',yb(:,1),2); % 2. harok pocet bytov
xlswrite('ts.xls',yh(:,1),3); % 3. harok pocet home page
