function dft_demo
	
	% 1: proprietà di traslazione
	% 2: traslazione in frequenza
	% 3: prodotto nel tempo (convoluzione in frequenza)
	problema = 1;
	
	% numero di punti della sequenza
	N = 32;
	
	% valori del tempo
	n = -N/2:N/2-1;
	
	% sequenza di partenza
	x = zeros(size(n));
	x(abs(n - 4) <= 7) = 1;
	X = dft(x);
	
	switch problema
		case 1
			% sequenza da ottenere tramite
			% operazioni nel dominio della
			% frequenza
			y = circshift(x,[0,8]);
			
			% ------ MODIFICARE DA QUI ---------
			Z = zeros(1,N);
			% ---------- FINO A QUI ------------
			
		case 2
			% sequenza da ottenere tramite
			% operazioni nel dominio della
			% frequenza
			y = x .* sin(2*pi*3*n/N);
			
			% ------ MODIFICARE DA QUI ---------
			Z = zeros(1,N);
			% ---------- FINO A QUI ------------
			
		case 3
			% sequenza da ottenere tramite
			% operazioni nel dominio della
			% frequenza
			y = x .* tri(n,7);
			
			% ------ MODIFICARE DA QUI ---------
			Z = zeros(1,N);
			% ---------- FINO A QUI ------------
			
	end
	
	% plot delle sequenze di partenza ed obiettivo
	plot_seq_and_dft(1,n,x,'x');
	plot_seq_and_dft(2,n,y,'y');
	
	% calcola la sequenza obiettivo
	% come IDFT della Z
	z = idft(Z);
	
	% visualizza l'errore (se il calcolo
	% è corretto, sarà nullo)
	e = y - z;
	E = dft(e);
	plot_seq_and_dft(3,n,e,'e');
end

function X = dft(x)
	X = fft(x);
end
function x = idft(X)
	x = ifft(X);
end

% questa funzione visualizza la sequenza passata in input e la sua DFT
%
function plot_seq_and_dft(figno,n,x,seq_name)
	if nargin < 4
		fprintf('plot_seq_and_dft(figno,n,x,seq_name)\n')
		return
	end
	X = dft(x);
	dft_name = upper(seq_name);
	colors = ['b','k','r'];
	color = colors(figno);
	figure(figno)
	
	N = numel(n);
	k = 0:N-1;
		
	subplot(2,2,1)
	stem(n,real(x),color)
	xlabel('n')
	ylabel(['Re[',seq_name,'(n)]'])
	set(gca,'XLim',[min(n)-N/8,max(n)+N/8])
	set(gca,'YLim',[min(real(x))-0.5,max(real(x(:)))+0.5])
	
	subplot(2,2,3)
	stem(n,imag(x),color)
	xlabel('n')
	ylabel(['Im[',seq_name,'(n)]'])
	set(gca,'XLim',[min(n)-N/8,max(n)+N/8])
	set(gca,'YLim',[min(imag(x))-0.5,max(imag(x(:)))+0.5])
	
	subplot(2,2,2)
	stem(k,abs(X),color)
	xlabel('k')
	ylabel(['|',dft_name,'(k)|'])
	set(gca,'XLim',[min(k)-N/8,max(k)+N/8])
	set(gca,'YLim',[min(abs(X))-0.5,max(abs(X))+0.5])
	
	subplot(2,2,4)
	stem(k,angle(X),color)
	xlabel('k')
	ylabel(['Angle[',dft_name,'(k)]'])
	set(gca,'XLim',[min(k)-N/8,max(k)+N/8])
	set(gca,'YLim',[min(angle(X))-0.5,max(angle(X))+0.5])
end

% segnale triangolare
function val = tri(n,D)
	val = zeros(size(n));
	val(abs(n) <= D) = D - abs(n(abs(n) <= D));
end
