# Programma Octave
# grafico di una convoluzione circolare che diventa lineare
#
# Sviluppato per la realizzazione del testo 
#
#   -- Trasmissione dei Segnali e Sistemi di Telecomunicazione --
#   -- http://infocom.uniroma1.it/libro                        --
#
# Copyleft 2002-2017 by Alessandro Falaschi
#                       alef@infocom.uniroma1.it
#

# decommentare in caso di problemi grafici
# graphics_toolkit ("gnuplot");

function disegna (segnale, testo, subp, N, Ymax) # esegue i grafici
   global assex;
   subplot (3, 1, subp);
   h = stem (assex, segnale, 'filled');
   text (-0.88*N, Ymax*0.9, testo);
   set (h, "LineWidth", 3);
   box ("off");
   axis ([-N 2*N 0 Ymax], 'labelx');  
endfunction	

N = 9;            # lunghezza comune delle sequenze

# x e'un triangolo
x = [0, 0.333, 0.666, 1, 0.666, 0.333, 0, 0, 0];
x = [x, x, x];    # concateno 3 volte per fare la figura
global assex = linspace(-N, 2*N-1, 3*N);
disegna (x, 'x_n', 1, N, 1.5)

# h e' un rettangolo
h = [1 , 1, 1, 1, 0, 0, 0, 0, 0];
h = [h, h, h];
disegna (h, 'h_n', 2, N, 1.5)

# calcola le DFT solo sui primi N (un solo periodo)
X = fft(x, N);
H = fft(h, N);

# esegue il prodotto in frequenza
Y = X .* H;

# esegue la IDFT
y = ifft (Y, N);
#y = abs(ifft (Y, N));
#y = y';
y = [y, y, y];
disegna (y, 'y_n', 3, N, 3.2)

# la stampa finale
#print ('f3.40b.ps', "-deps", "-S700,500", "-F:12", "-FHelvetica");
fprintf (stderr, "premi e prosegui\n");
pause;

