| UD 1 - Esempio 1.1 |
UD 7 - DFT di segnali codificati con diversi codici di linea |
Unità didattica 1
Calcolare, per le prime 5 armoniche, i coefficienti della serie unilatera di Fourier del segnale rappresentato in fig. 1.2. Rappresentare il segnale nel dominio della frequenza e verificare per sintesi la validità della soluzione.

Fig. 1.2 - Esempio 1.1.
Soluzione
Il termine A0 rappresenta la componente continua, che risulta evidentemente pari a 0,5 V. Poiché la funzione v(t) è pari, i termini bn sono nulli, mentre i termini an si possono calcolare con riferimento ad un solo semiperiodo (cfr. tab. 1.1). Scegliendo il semiperiodo che va da 0 a T/2, si deve determinare l’espressione di v(t) in tale intervallo; poiché la funzione è una retta passante per l’origine, deve essere v(t) = at dove a può essere determinato imponendo 1 = a · [(5 · 10-3)/2], da cui a = 400 V/s. L’espressione per il calcolo dei coefficienti bn è dunque
![]()
con
0 = 2
/T.
Il calcolo può essere svolto analiticamente (nel caso si suggerisce di
integrare per parti la 1.12) o, come evidenziato nel riquadro sottostante, con l’ausilio
del software adeguato.
| Definizione di T | T=5e-3; |
| Definizione di | w=2*pi/T; |
| Definizione della variabile simbolica t | syms t |
| Per n = 1, 2, ..., 5 calcolo dell’integrale 1.12. I risultati sono memorizzati nel vettore simbolico a | for n=1:5, a(n)=int((1600/T).*t.*cos(n*w*t),0,T/2); end |
| Conversione del vettore simbolico a nel vettore in doppia precisione a2 | a2=double(a); |
| Definizione del vettore An (in questo caso bn = 0) | A=abs(a2) |
| Output | A = |
| Definizione del vettore | fi=atan2(a2,0) |
| Output | fi = |
| Definizione del vettore f = (f0, 2f0, ... , 5f0) | f=[1 2 3 4 5]*w/(2*pi); |
| Suddivisione della figura in due finestre e selezione della finestra 1 | subplot(2,1,1) |
| Esecuzione del grafico f - An a barre di larghezza 0,04 | bar(f,A,.04) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('An (V)') |
| Inserimento del titolo | title('Esempio 1.1') |
| Selezione della finestra 2 | subplot(2,1,2) |
| Esecuzione del grafico f - | bar(f,fi,.04) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('f (Hz)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('fn (rad)') |
| Definizione del vettore t con valori da 0 a 2T | t=0:.01e-3:2*T; |
| Assegnazione alla variabile v del valore pari alla componente continua | v=.5; |
| Per n = 1, 2, ..., 5 somma alla variabile v della n-sima armonica (si noti il significato di assegnazione dell’operatore <=>) | for n=1:5, v=v+A(n)*sin(n*w.*t+fi(n)); end |
| Creazione di una nuova figura (altrimenti i grafici precedenti verrebbero sostituiti) | figure |
| Suddivisione della figura in due finestre e selezione della finestra 1 (in questo caso la suddivisione è per motivi grafici) | subplot(2,1,1) |
| Esecuzione del grafico t - v | plot(t,v) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('t (s)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('v (V)') |
| Inserimento del titolo | title('Verifica') |
Tab. 1


Si consideri la determinazione, per mezzo di MATLAB, dalla
DFT di un segnale ad impulso singolo di durata
= 5 ms ed ampiezza V = 1 V. Prima di tutto si deve costruire una forma d’onda
impulsiva a N punti, la cui durata complessiva può essere, ad es., pari
a 20 ms. Calcolata la DFT, si deve costruire un vettore frequenza, avente lo
stesso numero di punti della DFT, i cui valori vadano da 0 a fs,
escludendo quest’ultimo punto dato che è incluso il punto 0. Rappresentando
graficamente l’intera
DFT si ottiene la rappresentazione a bande duplicate; imponendo invece un
intervallo sugli assi più ristretto, si ottiene il consueto spettro già
considerato in fig. 1.6.
| Definizione numero di punti della forma d’onda | N=128; |
| Definizione della durata della forma d’onda | T=.02; |
| Definizione di | tau=.005; |
| Definizione del vettore t a 128 valori tra 0 e T | t=linspace(0,T,N); |
| Definizione del vettore v | v=1-stepfun(t,tau); |
| Calcolo della DFT di v | F=fft(v); |
| Definizione del vettore frequenza f a 128 valori tra 0 e e fs esclusa | f=((0:N-1)/N)*N/T; |
| Suddivisione della figura in tre finestre e selezione della finestra 1 | subplot(3,1,1) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -inf 1.2]) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('t (s)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('v (V)') |
| Inserimento del titolo | title('Esempio 1.3') |
| Selezione della finestra 2 | subplot(3,1,2) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('f (Hz)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('DFT (V/Hz)') |
| Selezione della finestra 3 | subplot(3,1,3) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e il quarto zero della DFT | axis([-inf 4/tau -inf inf]) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('f (Hz)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('DFT (V/Hz)') |
Tab. 2

DFT di segnali codificati con diversi codici di linea
Le caratteristiche essenziali dello spettro dei segnali codificati con diversi codici di linea possono essere ricavate applicando la DFT su forme d’onda costituite da sequenze elementari del codice in esame, anche se in alcuni casi tali caratteristiche dipendono dalla particolare forma d’onda immessa. Nel riquadro sottostante, il primo spettro MLT-3 non presenta componente continua, ben visibile invece nel secondo spettro relativo allo stesso tipo di segnale; anche nel caso del segnale 2B1Q, immettendo una diversa forma d’onda comparirebbe una componente continua.
| Definizione numero di punti della forma d’onda | N=128; |
| Definizione della durata della forma d’onda in millisecondi | T=8; |
| Definizione del vettore t a 128 valori tra 0 e T | t=linspace(0,T,N); |
| Definizione del vettore frequenza f a 128 valori tra 0 e e fs esclusa | f=((0:N-1)/N)*N/T; |
| Costruzione della forma d’onda del clock (128 valori per 8 cicli di clock) | ck(1:8)=1; ck(8:16)=0; ck(17:32)=ck(1:16); ck(33:64)=ck(1:32); ck(65:128)=ck(1:64); |
| Suddivisione della figura in 18 finestre (9 righe e 2 colonne) e selezione della finestra 1 | subplot(9,2,1) |
| Esecuzione del grafico t - ck | plot(t,ck) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('clock') |
| Inserimento del titolo | title('Forma d''onda') |
| Commento | %NRZ |
| Definizione del vettore v a 128 punti tutti nulli | v=zeros(1,N); |
| Assegnazione del valore 1 ai primi 16 punti di v (un bit a 1 in NRZ) | v(1:16)=1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 3 | subplot(9,2,3) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('NRZ') |
| Selezione della finestra 4 | subplot(9,2,4) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Inserimento del titolo | title('DFT') |
| Commento | %RZ |
| Assegnazione del valore 0 ai punti 9 ÷ 16 di v (i primi 8 punti sono a 1 così si ottiene nei punti 1 ÷ 16 un bit a 1 in RZ) | v(9:16)=0; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 5 | subplot(9,2,5) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('RZ') |
| Selezione della finestra 6 | subplot(9,2,6) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %MANCHESTER-CMI |
| Codifica di un bit 1 in Manchester | v(1:8)=-1; v(9:16)=1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 7 | subplot(9,2,7) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('Manch.-CMI') |
| Selezione della finestra 8 | subplot(9,2,8) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %AMI |
| Codifica della sequenza 11 in AMI | v(1:8)=1; v(9:1 v(17:24)=-1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 9 | subplot(9,2,9) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf i |
| Inserimento dell’etichetta sull’asse verticale | ylabel('AMI') |
| Selezione della finestra 10 | subplot(9,2,10) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %MLT-3 |
| Codifica della sequenza 1111 in MLT-3 | v(1:8)=0; v(9:24)=1; v(25:40)=0; v(41:56)=-1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 11 | subplot(9,2,11) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('MLT-3') |
| Selezione della finestra 12 | subplot(9,2,12) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %MLT-3(2) |
| Codifica della sequenza 100111 in MLT-3 | v(1:8)=0; v(9:56)=1; v(57:72)=0; v(73:88)=-1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 13 | subplot(9,2,13) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('M |
| Selezione della finestra 14 | subplot(9,2,14) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %2B1Q |
| Azzeramento del vettore v | v=zeros(1,N); |
| Codifica della sequenza 00-10-01-11 in 2B1Q | v(1:32)=-1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 15 | subplot(9,2,15) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | ylabel('2B1Q') |
| Selezione della finestra 16 | subplot(9,2,16) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Commento | %4B3T |
| Azzeramento del vettore v | v=zeros(1,N); |
| Codifica della sequenza 0010 in 4B3T | v(1:21)=1; |
| Calcolo della DFT di v | F=fft(v); |
| Selezione della finestra 17 | subplot(9,2,17) |
| Esecuzione del grafico t - v | plot(t,v) |
| Cambio di scala sull’asse verticale per assicurare la leggibilità del grafico | axis([-inf inf -1.2 1.2]) |
| Inserimento dell’etichetta sull’asse verticale | xlabel('t (ms)') |
| Inserimento dell’etichetta sull’asse verticale | ylabel('4B3T') |
| Selezione della finestra 18 | subplot(9,2,18) |
| Esecuzione del grafico f - modulo della DFT moltiplicata per T/N | plot(f,abs(F*T/N)) |
| Cambio di scala sull’asse orizzontale per avere il grafico tra l’origine e 4 kHz | axis([-inf 4 -inf inf]) |
| Inserimento dell’etichetta sull’asse orizzontale | xlabel('f (kHz)') |
Tab. 3

