function [ANGLE,alfa_v, RMS] = Beam_DAS(inp_s)
%[UHEL_DOA, alfa_scan, RMS] = Beam_DAS(vstupni_signal)
% vypocita uhel prichazijiciho signalu pro libovolne mikrofonni linearni
% pole
% pole (mikrofony maji stejnou souradnici Y a meni se jejich X
% vstupni_signal (MxN)
% UHEL_DOA (1x1) ... vysledny uhel
% alfa_scan (1,181) ... vektor scenovanych uhlu -90 do 90, krok 1 stupen
% RMS (1,181) ... vektor vysledneho signalu pro kazdy scanovany uhel

global c f_vz d 
N = length(inp_s(1,:)); % pocet vzorku v periode
M = (length(inp_s(:,1))); % pocet mikrofonu

%% kontrola signalu, jestli je spravne zadany

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

N_Scan = 37; % pocet scanovanych uhlu - scan po 5 stupnich
alfa_v = linspace(-90,90,N_Scan);  %mozne uhly odkud jde signal


%% INPUT - sig1,sig2,sig3,sig4

delta_t = zeros(M,N_Scan);
y = zeros(M,N);

%% zpozdeni => delay
for i = 1:N_Scan % pro kazdy mozny uhel
    alfa = alfa_v(i);
    sig_all = zeros(M,N); %vytvorim novy vektor s 0 pro zpozdovani signalu
    
    for h = 1:M % pro kazdy mikrofon  
        delta_t(h,i)= (sin(deg2rad(alfa))*d*(h-1))/c;
        
        posunuti = round(delta_t(h,i)*f_vz); % posunuti ve vzorcich +/-
        
        if posunuti < 0  %zpozdeni zaporne, posouvam signal doprava
             posunuti = - posunuti;
             sig_all(h,posunuti:N) = inp_s(h,1:(N-posunuti)+1);
        
        elseif posunuti > 0 % zpozdeni kladne, posun signalu doleva
             sig_all(h,1:(N-posunuti)+1) = inp_s(h,posunuti:N);
        else
             sig_all(h,:) = inp_s(h,1:N);
        end
    end
    
    %% SUM - soucet
    
    y(i,:) = sum(sig_all,1); % soucet, pro kazdy radek jeden vystupni signal pro urceny uhel alfa
   
end
    
%% vyhodnoceni odkud prichazi signal
% root mean square RMS - stredni hodnota 
RMS = zeros(1,N_Scan);

for p = 1:N_Scan
    
    RMS(1,p) = sqrt((sum(y(p,:).^2))/N);

end

[~,index] = max(RMS); % najde maximum pro RMS - to odpovida vypoctenemu uhlu
ANGLE = alfa_v(index);

end

