function [t_fr] = zjisti_zot_dob_prop(data_propust, polarizace, perioda_realna, posun, h)
% podle namerenych dat, polarizace a realne periody vzorkovani nalezne
% hodnotu propustne zotavovaci doby
% predpoklada spravny pocet vzorku (tak, aby byla jedna perioda)

mez = 0.01; % urcuje oblast, ve ktere se povazuje derivace dostatecne mala (prubeh tam je ustaleny)

t_fr = 0;

% nalezeni prubehu se spravnym posunem tak, aby byla viditelna cela kladna
% cast prubehu
podm = 1;
i = 1;
%figure
while podm == 1;
    data = data_propust(i:posun:end);
    delka = length(data);
    % vyhledani maxima aktualniho prubehu
    [maximum pozice] = max(data);
    % prahovani podle maximalni hodnoty peaku/2
    prah = maximum / 2;
    prahovane = data > prah;
    % konec signalu znazornen zapornou derivaci
    derivace = conv(double(prahovane), [1 -1]);
    zacatek = find(derivace == 1, 1, 'first');
    konec = find(derivace == -1, 1, 'last');
    % zjisteni, zda je dostatecne vzadu, jinak posun na dalsi data
    % spravne ma byt spadova hrana nekde v jeji 5. petine
    if konec >= delka*4/5 && konec < delka
        % spravny signal, s nim se bude manipulovat dale
        %plot(data);
        hold on;
        podm = 0;
    else
        % dalsi iterace (dalsi iteraci se posouva doprava)
        i = i + 1;
    end
end

axes(h);
cla
xlabel('t (\mus) \rightarrow')
ylabel('U (V) \rightarrow');
plot( (1:length(data)) .* perioda_realna * 1e6 , data);
hold on;

% nyni je v promenne 'data' spravne posunuty prubeh, ktery lze
% analyzovat (plati pro urcovani obou mezi)
% NALEZENI USEKU PO USTALENI ZOTAVOVACI DOBY (PRAVA MEZ)

% podle zderivovaneho prubehu lze najit usek, ve kterem se prubeh ustali po zotavovaci dobe
der_vyber = conv(data, [1 -1]);
der_vyber = [0; der_vyber(2:end-1)];

% zvyrazneni dulezitych casti prubehu
%plot([zacatek zacatek], [0 maximum], 'k');
%plot([konec konec], [0 maximum], 'k');
%plot([zacatek konec], [maximum maximum], 'r');
%plot(der_vyber, 'c');
%plot([zacatek konec], [mez mez], 'm');
%plot([zacatek konec], [-mez -mez], 'm');

% vytvoreni promenne 'vysl', ktera detekuje, zda je prubeh uvnitr mezi
% od zacatku useku, kdy je prubeh mezi mezemi se zacne hodnota ve
% 'vysl' inkrementovat, jinak je nulova. Pote se najde maximum (znaci
% nejdelsi usek) a z tohoto se urci leva a prava mez, ktere se jeste
% zkrati o 10 % z kazde strany
vysl = zeros(size(der_vyber));
predch = 0;
for i=zacatek:konec-1
    if der_vyber(i) < mez && der_vyber(i) > -mez
        if predch == 0
            vysl(i) = 1;
        else
            vysl(i) = vysl(i-1) + 1;
        end
    else
        vysl(i) = 0;
    end
    predch = vysl(i);
end
%plot(zacatek:konec, vysl(zacatek:konec)./max(vysl), 'r');
% vypocet mezi
[hrot prava] = max(vysl);
leva = prava - vysl(prava) + 1;
% prepocet tak, aby byl usek zleva i zprava oseknut o 10 %
%[leva prava]
leva2 = ceil(leva + (prava-leva)/10);
prava2 = floor(prava - (prava-leva)/10);
%[leva2 prava2]
ustalena = mean(data(leva2:prava2));
%plot([leva2 prava2], [ustalena ustalena], 'r');
%[maximum ustalena]
if maximum <= ustalena
    t_fr = -1;
    return;
    %error('Pravdepodobne neni peak dostatecne velky, algoritmus selhal');
end


% NALEZENI USEKU, KTERY UDAVA ZACATEK ZOTAVOVACI DOBY (LEVA MEZ)
% nejdrive nalezt pozici maxima prvni derivace (usek, od ktereho zacina nabezna hrana)
[~, index] = max(der_vyber);
index = floor(index * 0.75);
prumer = mean(data(1:index));
%plot([1 index], [prumer prumer], 'r');

% vsechny typicke hodnoty jsou nalezeny, ted jen spocitat pruseciky 10 %
prumer10 = prumer + (ustalena - prumer)/10;
ustaleni10 = ustalena + (maximum - ustalena)/10;
%plot([index leva2], [prumer10 prumer10], 'k');
%plot([index leva2], [ustaleni10 ustaleni10], 'k');

% pokud pujdu nalevo od vrcholu, naleznu zacatek zotavovaci doby
zot_zacatek = 0;
for i=pozice-1:-1:1
    if data(i) < prumer10 && data(i+1) > prumer10
        zot_zacatek = i;
    end
end
if zot_zacatek == 0
    t_fr = -1;
    return;
    %error('Zacatek zotavovaci doby nenalezen.');
end

% napravo od vrcholu bude konec zotavovaci doby
zot_konec = 0;
for i=pozice+1:delka
    if data(i) < ustaleni10 && data(i-1) > ustaleni10
        zot_konec = i;
    end
end
if zot_konec == 0
    t_fr = -1;
    return;
    %error('Konec zotavovaci doby nenalezen.');
end

if zot_konec <= zot_zacatek
    t_fr = -1;
    return;
    %error('Zacatek zotavovaci doby je pozdeji nez konec.');
end

% zobrazeni krivek, ktere vymezuji zotavovaci dobu
plot([zot_zacatek zot_zacatek] .* perioda_realna * 1e6, [min(data) max(data)], 'Color', [0.5 0.5 0.5]);
plot([zot_konec zot_konec] .* perioda_realna * 1e6, [min(data) max(data)], 'Color', [0.5 0.5 0.5]);

t_fr = (zot_konec - zot_zacatek) * perioda_realna;
