function [vys_string result]=f_hvizd(x,fs,k,delkaS,handles)
% function f_hvizd(x,fs)
NN=2048;
fd=2800;        %mezni kmitocet filtru
fh=4800;

prekryv=NN;     %pocet prekryvajicich se vzorku
n=5;            %rad filtru
         
hvizd=importdata('nnhvizd.mat');    %neuronova sit
delka=30;
vys='';
vys_string='';
prah=0.62;
pocet=2.44;
% konfigurace % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
if exist('conf.xls','file')==2
    st=konfigurace('hvizd ');
    for l=1:length(st)
        switch st(l).name
            case('fd')
                fd=st(l).cislo;
            case('fh')
                fh=st(l).cislo;
            case('NN')
                NN=st(l).cislo;
            case('prekryv')
                prekryv=st(l).cislo;
            case('n')
                n=st(l).cislo;
            case('hvizd')
                hvizd=importdata(st(l).cislo);
            case('delka')
                delka=st(l).cislo;
            case('prah')
                prah=st(l).cislo;
        end
    end 
end
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %


i=1;
pom=1; %inicializace promene musi zustat na zacatku
ind_count=ceil(NN*pocet/100);        % pocet vzorku pro vyhodnoceni
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% filtrace signalu
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
x=x/max(x);
[b,a]=butter(n,[fd/(fs/2) fh/(fs/2)],'bandpass');
x=filter(b,a,x);
                % segmentace signalu
if(prekryv==NN)
    f=enframe(x,hanning(NN)); %nutno jete transponovat
else
    f=enframe(x,hanning(NN),prekryv);       %vstup je signal velikost okna je 2048 a 1024 je prekryv
end
[M N]=size(f);  %N=NN      , M je pocet

                % provedeni fft
Yfft=20*log10(abs(fft(f',2*NN)))';
Yfft=Yfft(:,1:NN)';
F=linspace(0,fs/2,NN)';     %rozlozeni kmitoctove osz
harm(ind_count)=0;        %vektor vysokych slozek kmitoctu
maximum=max(Yfft);     %nalezeni maxima ve vsech ramcich
% urceni casove osy

% result(2,1:length(Yfft(1,:)))=linspace(1/(fs/NN)*NN/prekryv+k*delkaS,M/(fs/NN)+k*delkaS,M);

% odstraneni prilis malych signalu
indexy=find(maximum<ones(1,length(maximum))*16);
maximum(indexy)=100;
% preddefinice vystupu
result(3,M)=0;    

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% analyza ramec po ramci      % % % % % % % % % % % % % % % % % % % % % % %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
if M<30
    result(2,1:30)=linspace(1/(fs/NN)*NN/prekryv+k*delkaS,30/(fs/NN)+k*delkaS,30);
else
    result(2,1:M) =linspace(1/(fs/NN)*NN/prekryv+k*delkaS,M/(fs/NN)+k*delkaS,M); 
end

prahnew=prah;
while i<M
    f1h=0;
    f2d=0;
    f2h=0;
    f3d=0;
    f3h=0;
    df1=0;
    df2=0;   
    indexy=find(Yfft(:,i)>(maximum(i)*prahnew)*ones(N,1));  %zjisteni ktere prvky z ramce je vetsi nez 1/3 rozdilu minima a maxima
    if (length(indexy)<ind_count && length(indexy)>3)         % pokud je hodne frekvencnich slozek vetsich nez 1/3 zrejme se nejedna o piskot
%         harm(1:length(indexy),1)=Yfft(indexy,i);   %ulozeni do promenne harm
        harm(1:length(indexy))=F(indexy);
        f1d=harm(1);
        for j=1:length(indexy)-1
            if (abs(harm(j+1)-harm(j))>40)
                if(f1h==0)
                    f1h=harm(j);
                    f2d=harm(j+1);
                elseif(f2h==0 && f1h>0)
                    f2h=harm(j);
                    f3d=harm(j+1);
                elseif(f3h==0 && f2h>0 && f1h>0)
                    f3h=harm(j);
                end
            end
        end
        if (f3h==0)
            f3h=harm(length(indexy));
        end
        f1=f1h;
        f2=(f2h+f2d)/2;
        f3=(f3h+f3d)/2;
        df1=f2-f1;
        df2=f3-f2;
        if ((f1>2940)&&(f1<3750)&&f3>(3600)&&(df1>180)&& (df2>176)&&(abs(df1-df2)<150 || abs(df1-df2/2)<150 || abs(df1-df2/3)<150 || abs(df1/2-df2)<150) && (f1h-f1d)<100 &&(f2h-f2d)<100 &&(f3h-f3d)<300) %podminka pokud je vse splneno pak je to piskot
%         if (f1>3200&& f1<3700&&(df1>150)&&(df1<350)&&(df2>200)&&(df2<700) && (f1h-f1d)<100 &&(f2h-f2d)<100 &&(f3h-f3d)<300) %podminka pokud je vse splneno pak je to piskot
            result(1,i)=1;

%             disp([num2str(sum(result(1,:))),'. pískot = ',num2str(fix(result(2,i)/60)),':',num2str(result(2,i)-fix(result(2,i)/60)*60),' (s)']) %,' zcr' num2str(zcrr),' f1= ' num2str(f1)
%             vykreslihvizd(Yfft,i,result,df1,F,df2,maximum,prahnew);
        end
    end
%     d=length(indexy)


    if (i>delka*pom || i==length(f(1,:)))
            if (length(f(1,:))<delka)
                delka=length(f(1,:))-1;
            end
        if (result(1,i-delka)==1 || i==length(f(1,:)))
            [Y] = sim(hvizd,result(1,i-delka+1:i)')*100;
            result(3,i-delka+1)=1;
            if sum(result(1,i-delka+1:i))>0
%                 dlmwrite(['nntool\' 'aaaaa' '.txt'],result(1,i-delka+1:i),';');
            end
            vys=strvcat(['----čas: ',num2str(fix(result(2,i)/60)),':'...
                    ,num2str(result(2,i)-fix(result(2,i)/60)*60),' (s)----' ],vys);%cas detekce
                switch(max(Y))
                    case (Y(1))
            vys=strvcat(['Zacatek zapasu  =',num2str(Y(1)),' %' ],vys);%1.zacatek zapasu
                    case (Y(2))
            vys=strvcat(['Konec polocasu  =',num2str(Y(2)),' %' ],vys);%2.konec polocasu
                    case (Y(3))
            vys=strvcat(['konec zapasu    =',num2str(Y(3)),' %' ],vys);%3.konec zapasu
                    case (Y(4))
            vys=strvcat(['faul            =',num2str(Y(4)),' %' ],vys);%4.faul
                    case (Y(5))
            vys=strvcat(['gol nebo ofsajd =',num2str(Y(5)),' %' ],vys);%5.gool nebo ofsajd
                    case (Y(6))
            vys=strvcat(['ostatni         =',num2str(Y(6)),' %' ],vys);%6.aut rozehrani
                end
            vys=strvcat([' '],vys);
            pom=round(i/delka)+1;
        end
    end
%     pokud zjistim ze bylo vybrano moc slozek pokusim se zvednou prah
    
    if length(indexy)>35 || prah~=prahnew && result(1,i)==0 && maximum(i)>20
        if length(indexy)>35
            prahnew=prahnew+0.09;
            i=i-1;
        else
            prahnew=prah;
        end
    end
       
    i=i+1;
end

[M N]=size(vys);
for i=1:M
    vys_string=strvcat(vys(i,:),vys_string);
end
if get(handles.checkbox7,'Value')==1
    set(handles.listbox1,'String',vys_string);
    bar(handles.axes1,result(2,:)/60,result(1,:),'k');
end


