function [ y, h ] = gauss( N, x, symmetry )
%[y,h] = GAUSS( N, x, exactendmatch )
%GAUSS vytvorí gaussovu impulznú odozvu danej dĺžky a vykoná filtráciu na
%vstupných dátach
% Vstupy:   x - vstupný signál filtru, môže byť viac vo forme matice, kde
%           jednotlivé signály odpovedajú riadkom
%           N - dĺžka impulznej odozvy
%           symmetry - pokiaľ chceme použiť symetrické predĺženie signálu
%           na krajoch, treba použiť číslo 1
% Výstupy:  y - výstupný signál filtru
%           h - impulzná odozva

if nargin < 3
    symmetry = 0;
end

N = N(:); N = N(1);
assert(isnumeric(N)==1 && N==floor(N) && N>=0 && real(N)==N,'N musí byť prirodzené číslo (v krajnom prípade nula), jedná sa o dĺžku impulznej odozvy');

%% TVORBA IMPULZNEJ ODOZVY

n = -N:N;
sigma = (2*N+1)/6;  %empiricky určený vzťah
h = exp(-0.5 * (n./sigma).^2) ./ (sqrt(2*pi) .* sigma);     %gaussove normalizované rozdelenie

h = h/sum(h);   %normalizácia, aby bola suma prvkov 1, aby sa stále jednalo o vážené priemerovanie signálu

%% FILTRACIA

[a,b] = size(x);
y = zeros(a,b);
for i = 1:a
    y(i,:) = FIRfilt(x(i,:),h,symmetry);
end

end

