function [ y ] = FFTconvolution( x, h )
%[y] = FFTCONVOLUTION( x, h )
%FFTCONVOLUTION vykoná lineárnu konvolúciu dvoch signálov 
%algoritmom založenom na vete o konvolúcii
%Vstupy:    x - signál, ktorý filtrujeme
%           h - impulzná odozva filtru
%Výstup:    y - vyfiltrovaný signál
%[1] PROAKIS, J. G. a MANOLAKIS D. Digital signal processing: principles, algorithms and applications. 3rd ed. Prentice-Hall, Inc. 1996. ISBN 0-13-394338-9.

M = length(x);
L = length(h);
N = M + L - 1;          %je nutné, aby sme sa vyhli cirkulárnej konvolúcii [1], 
                        %chceme spočítať lineárnu konvolúciu, ktorá signály
                        %"spája" a vytvára dlhší o dĺžke M+L-1, potom je
                        %možné bezpečne využiť vetu o konvolúcii, zobrať
                        %FFT signálov, vynásobiť a zobrať inverznú FFT
N2 = 2^nextpow2(N);

X = fft(x,N2);
H = fft(h,N2);

Y = X.*H;
yh = ifft(Y,N2);
y = yh(1:N); %skrátené na pôvodnú dĺžku

end

