function [peak_out,oblast_s,ts_out,SNR] = Detekce(inp_s,t_span,Max_S)
% [signal_out,signal_oblast,t_out] = Detekce(signal_in, Max)
%   signal_in - NxM, neupravovany signal
%   Max  - NxM vypocetena hranice sumu pro kazdy signal, vse nad tuto hranici je peak
%   signal_out - NxM, je tam uz jen prvni peak od kazdeho signalu, zbytek
%   signalu je vymazany. 
%   olbast_s - Najde potrebnou oblast v okoli peaku, tu vybere a
%   pak v te oblasti hleda pouze prvni peak na kazdem mikrofonu. Redukce objemu dat - analyzuji jen nezbytne nutnou
%   cast signalu a ne cely signal => velke urychleni procesu
%   t_out - NxM, cas pro vybrany signal
%   SNR - signal to noise ratio - hodnota od maxima detekovaneho peaku do
%   hranice sumu 

%% globalni promenne
global f_vz 

% rozsah oblasti detekce peaku
if f_vz > 25e3
    D = 3; % dolni posunuti rozsahu v indexu 
    H = 3; % horni posunuti rozsahu v indexu
else
    D = 2;
    H = 2;
end
%% overeni spravneho zadani signalu

M = length(inp_s(1,:)); % pocet mikrofonu (signalu)
N = (length(inp_s(:,1))); % pocet vzorku
    
if N < M
    inp_s = inp_s';
    M = length(inp_s(1,:)); % pocet mic
end

inp_peak = zeros(141,M);
P = zeros (M,141);
oblast_s = zeros(141,M);
SNR = zeros(M,1);
%% vybrat oblast peaku
X = find(inp_s(:,1) > 1.3*Max_S(1)); % v prvnim signalu vybere oblast nad hranici signalu odpovidajici tomuto signalu

if ~isempty(X) % overi, jestli se do X neco zapsalo (X neni prazdne)
    for i = 1:M
        oblast_s(1:141,i) = inp_s(X(1)-40:X(1)+100,i);
    end
    t_span = t_span(X(1)-40:X(1)+100,1);
    
    for i = 1:M
        %% vybrany konkretni peak
        
        T = find(oblast_s(:,i) >= Max_S(i));
        if isempty(T)
            continue
        else
            P(i,1:length(T)) = T;
            inp_peak(P(i,1)-D:P(i,1)+H,i) = oblast_s(P(i,1)-D:P(i,1)+H,i);
        end
        % vyresit problem, kdy se nenajde v signalu ani jedna hodnota nad
        % pozadovanou
        
        %% vypocet vektoru SNR
        Q = find(oblast_s(:,i) > Max_S(i));
        SNR(i,:)= max(oblast_s(Q',i))/Max_S(i);
        
    end
end

ts_out = t_span;
peak_out = inp_peak;
end

