%% maxsign.m 
% Nalezeni maxim v signalu

function [polohy_max_kor] = maxsign( prutok )

N = length(prutok); % Delka prutoku
polohy_max=[]; % Vektor pro ukladani poloh maxim
poloha_x=2; % Pocatecni pozice pro ukladani polohy maxima
index=1; % Pomocna promenna

while index<N % Dokud je index mensi nez delka vektoru ...
    k=index+1; % ... Zvyseni hodnoty pomocneho parametru
    if prutok(index) > 0.1 % Pokud je hodnota prvku vetsi nez nula ...
        max_hodnota=prutok(index); % ... uloz hodnotu prvku jako maximum
        while prutok(k)>0 % Dokud jsou prvky vektoru mensi nez nula:
            if prutok(k)>max_hodnota % Pokud je prvek mensi nez maximum ...
                max_hodnota = prutok(k); % ... uloz hodnotu prvku jako nove maximum ...
                poloha_x=k; % ... uloz take polohu maxima
            end
            if k<N % Pokud je pomocna promenna mensi nez delka vektoru ...
                k=k+1; % ... zvys hodnotu o 1
            else 
                break % Jinak ukonci cyklus
            end;
        end
        % Uložení maxim do vektorů
              polohy_max = [polohy_max, poloha_x]; % Ulozeni polohy maxima do vektoru
    end
    index=k; % zvyseni hodnoty index na hodnotu k

end

polohy_nul = zeros(1,length(polohy_max)); % Vektor pruchodu nulou

% Odstraneni falesnych zakmitu (maxim)
for i=1:length(polohy_max)-1 % Pro detekovana maxima
    for j=1:20 % Pro 20 nasledujicich prvku u kazdeho maxima
        pruchod_nul = prutok(polohy_max(i)) * prutok(polohy_max(i)+j); % Otestuj, zda je pritomen nulovy bod
        if pruchod_nul < 0 % Pokud ano (hodnota mensi nez nula) ...
            polohy_nul(i)=1; % Oznac pozici maxima
        end
    end
end

polohy_max_kor = polohy_max(polohy_nul ~= 1); % Polohy novych maxim, ktera nejsou v blizkosti nuloveho bodu