function y = conv_by_fft(x,h)

	if nargin < 1
		% sequenza di ingresso
% 		x = 1:6;
% 		x = (1:6).*(-1).^(0:5);
		x = [1:4,3:-1:1];
% 		x = [1:4,3:-1:1].*(-1).^(0:6);
	end
	if nargin < 2
		% risposta all'impulso
		h = ones(1,5);
	end
	Nx = numel(x);
	Nh = numel(h);

	% numero di punti del prodotto di convoluzione
	Ny = Nx + Nh - 1;

	% calcola le FFT su numero di punti potenza di due
	N = 2^ceil(log2(Ny));

	% convoluzione (ciclica) con la FFT
	X = fft([x,zeros(1,N-Nx)]);
	H = fft([h,zeros(1,N-Nh)]);
	y_fft = ifft(X.*H);

	% estrazione dei campioni della convoluzione lineare
	y = y_fft(1:Ny);
	
	if nargout < 1
		ymax = max([x(:);h(:);y(:)]);
		ymin = min([x(:);h(:);y(:)]);
		
		subplot(3,1,1)
		stem(0:Nx-1,x)
		set(gca,'XLim',[-1,Ny]);
		set(gca,'YLim',[min(x)-1,max(x)+1]);
		xlabel('n')
		ylabel('x(n)');
		
		subplot(3,1,2)
		stem(0:Nh-1,h)
		set(gca,'XLim',[-1,Ny]);
		set(gca,'YLim',[min(h)-1,max(h)+1]);
		xlabel('n')
		ylabel('h(n)');

		subplot(3,1,3)
		hold off
		stem(0:Ny-1,conv(x,h),'.-')
		hold on
		stem(0:Ny-1,y,'o-r')
		set(gca,'XLim',[-1,Ny]);
		set(gca,'YLim',[min(y)-1,max(y)+1]);
		xlabel('n')
		ylabel('y(n)')
	end
end
