function gaussian_filter
	
	% rappresentazione a tempo discreto
	% del segnale Gaussiano
	
	% scelto il numero di punti, trova valori
	% estremi di Ts con vincoli su troncamento
	% nel tempo ed aliasing in frequenza
	N = 32;
	eps_trunc = 1/256;
	eps_aliasing = 1e-6;
	Ts_min = sqrt(-log(eps_trunc)/pi)*2/N;
	Ts_max = 1/(2*sqrt(-log(eps_aliasing)/pi));
	display(Ts_min)
	display(Ts_max)
	
	% andamento nel tempo ed in frequenza
	Ts = Ts_max;
	t = (-N/2:N/2-1)*Ts;
	s = exp(-pi*t.^2);
	f = (-N/2:N/2-1)/(N*Ts);
	S = fftshift(abs(fft(s)*Ts));
	
	figure(1)
	subplot(2,1,1)
	stem(t,s)
	xlabel('t');
	ylabel('s(nT_s)');
	set(gca,'XLim',[-2,2])

	subplot(2,1,2)
	stem(f,S)
	xlabel('f [Hz]');
	ylabel('S(f_k)');
	set(gca,'XLim',[-2,2])

	% immagine e sua DFT-2D
	im = double(imread('lena.png'));
	[imM,imN] = size(im);

	% filtraggio passa basso Gaussiano (il
	% filtro è separabile e si possono effettuare
	% in cascata filtraggi su righe e colonne)
	s_norm = s/sum(s);
	temp = zeros(imM,imN+N-1);
	for i = 1:imM
		temp(i,:) = conv(im(i,:),s_norm);
	end
	im_filt = zeros(imM+N-1,imN+N-1);
	for j = 1:imN+N-1
		im_filt(:,j) = conv(temp(:,j),s_norm);
	end

	% passa-alto ottenuto per differenza e suo spettro
	im_pad = zeros(imM+N-1,imN+N-1);
	im_pad(N/2-1+(1:imM),N/2-1+(1:imN)) = im;
	im_high = im_pad - im_filt;

	c = 10;
	im_fft = c+abs(fft2(im - mean(im(:))));
	im_filt_fft = c+abs(fft2(im_filt - mean(im_filt(:))));
	im_high_fft = c+abs(fft2(im_high - mean(im_high(:))));
	im_fft_min = min([im_fft(:);im_filt_fft(:);im_high_fft(:)]);
	im_fft_max = max([im_fft(:);im_filt_fft(:);im_high_fft(:)]);
	
	figure(2)
	subplot(2,1,1)
	imagesc(im,[0,255])
	colormap gray
	axis image
	subplot(2,1,2)
	imagesc(fftshift(log(im_fft)),...
		log([im_fft_min,im_fft_max]))
	colormap gray
	axis image
	
	figure(3)
	subplot(2,1,1)
	imagesc(im_filt,[0,255])
	colormap gray
	axis image
	subplot(2,1,2)
	imagesc(fftshift(log(im_filt_fft)),...
		log([im_fft_min,im_fft_max]))
	colormap gray
	axis image
	
	figure(4)
	subplot(2,1,1)
	imagesc(im_high,[-127,127])
	colormap gray
	axis image
	subplot(2,1,2)
	imagesc(fftshift(log(im_high_fft)),...
		log([im_fft_min,im_fft_max]))
	colormap gray
	axis image
end
