function g = conv2FFT(h, f) % g = conv2FFT(h, f) % % DESC: % computes the 2D convolution via FFT % % AUTHOR % Marco Zuliani - zuliani@ece.ucsb.edu % % VERSION: % 1.0.0 % % INPUT: % h = convolution kernel % f = input signal % % OUTPUT: % g = output signal % % HISTORY % 1.0.0 ??/??/07 Initial version sh = size(h); sf = size(f); % zero pad the input signals fm = zeros(sf+2*(sh-1), class(f)); o = sh-1; fm( o(1)+(1:size(f,1)), o(2)+(1:size(f,2)) ) = f; h_zp = zeros(size(fm), class(h)); h_zp(1:size(h,1), 1:size(h,2)) = h; % compute the convolution in frequency F = fft2(fm); H = fft2(h_zp); Y = F.*H; % back to spatial domain g = real( ifft2(Y) ); % remove padding o = floor(1.5*size(h))-1; g = g( o(1)+(1:size(f,1)), o(2)+(1:size(f,2)) ); return