function [vys_string result]=f_hvizd(x,fs,k,delkaS,handles,cesta)
% function f_hvizd(x,fs)
NN=2048;
fn=2800;        %mezni kmitocet filtru
fn2=4800;
ind_count=50;   % pocet vzorku pro vyhodnoceni
prekryv=NN;     %pocet prekryvajicich se vzorku
n=5;            %rad filtru
pom=1;          %inicializace promene musi zustat na zacatku
hvizd=importdata('nnhvizd.mat');    %neuronova sit
delka=30;
vys='';
vys_string='';
prah=0.62;
i=1;
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% filtrace signalu
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
x=x/max(x);
[b,a]=butter(n,[fn/(fs/2) fn2/(fs/2)],'bandpass');
x=filter(b,a,x);

% figure
% spectrogram(x,hanning(1024),512,1024,fs, 'yaxis');
% xlabel('{{\itt}} (s) \rightarrow')
% ylabel('{{\itf}} (Hz) \rightarrow')
% text(6.2,-1500,'{{\itSG}} (dB) \downarrow')
% caxis([-50 -40])
% colorbar
% set(gca,'layer','top','box','on')

                % 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,2)=0;        %matice 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;
    

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% analyza ramec po ramci      % % % % % % % % % % % % % % % % % % % % % % %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
if M<30
    result(2,1:30)=linspace(1/(fs/NN)*NN/prekryv+k*delkaS,M/(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
%         vykreslihvizd(Yfft,i,result,df1,F,df2,maximum,prahnew);  
%     end
    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),2)=F(indexy);
        f1d=harm(1,2);
        for j=1:length(indexy)-1
            if (abs(harm(j+1,2)-harm(j,2))>40)
                if(f1h==0)
                    f1h=harm(j,2);
                    f2d=harm(j+1,2);
                elseif(f2h==0 && f1h>0)
                    f2h=harm(j,2);
                    f3d=harm(j+1,2);
                elseif(f3h==0 && f2h>0 && f1h>0)
                    f3h=harm(j,2);
                end
            end
        end
        if (f3h==0)
            f3h=harm(length(indexy),2);
        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)'])
%            if (abs(df1-df2/3)<150 || abs(df1/2-df2)<150)
%                 vykreslihvizd(Yfft,i,result,df1,F,df2,maximum,prahnew);
%            end
        else
            vykreslihvizd(Yfft,i,result,df1,F,df2,maximum,prahnew);
        end
    end
%     d=length(indexy)
%     vykreslihvizd(Yfft,i,result,df1,F,df2,maximum,prahnew);

    if (i>30*pom || i==length(f(1,:)))
            if (length(f(1,:))<30)
                delka=length(f(1,:))-1;
            end
        if (result(1,i-delka)==1 || i==length(f(1,:)))
            [Y] = sim(hvizd,result(1,i-29:i)');
            if sum(result(1,i-29:i))>0
%                 dlmwrite(['nntool\' cesta '.txt'],result(1,i-29: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
            vys=strvcat(['Zacatek zapasu  =',num2str(Y(1)*100),' %'],vys);%1.zacatek zapasu
            vys=strvcat(['Konec polocasu  =',num2str(Y(2)*100),' %'],vys);%2.konec polocasu
            vys=strvcat(['konec zapasu    =',num2str(Y(3)*100),' %'],vys);%3.konec zapasu
            vys=strvcat(['faul            =',num2str(Y(4)*100),' %'],vys);%4.faul
            vys=strvcat(['gol nebo ofsajd =',num2str(Y(5)*100),' %'],vys);%5.gool nebo ofsajd
            vys=strvcat([' '],vys);
            pom=round(i/30)+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
% vymazat 
if M<30 && sum(result(1,:))>0
            [Y] = sim(hvizd,result(1,1:30)')*100;
%             if sum(result(1,1:30))>0
%                 dlmwrite(['nntool\' cesta '.txt'],result(1,:),';');
%             end
            vys=strvcat(['----čas: ',num2str(fix(result(2,i)/60)),':'...
                    ,num2str(result(2,i)-fix(result(2,i)/60)*60),' (s)----' ],vys);%cas detekce
            vys=strvcat(['Zacatek zapasu  =',num2str(Y(1)),' %'],vys);%1.zacatek zapasu
            vys=strvcat(['Konec polocasu  =',num2str(Y(2)),' %'],vys);%2.konec polocasu
            vys=strvcat(['konec zapasu    =',num2str(Y(3)),' %'],vys);%3.konec zapasu
            vys=strvcat(['faul            =',num2str(Y(4)),' %'],vys);%4.faul
            vys=strvcat(['gol nebo ofsajd =',num2str(Y(5)),' %'],vys);%5.gool nebo ofsajd
            vys=strvcat(['ostatni         =',num2str(Y(6)),' %'],vys);%5.gool nebo ofsajd
            vys=strvcat([' '],vys);
            pom=round(i/30)+1;
end

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


