Volume 2


 
UD 1 - Esempio 1.1
UD 1 - Esempio 1.3
UD 7 - DFT di segnali codificati con diversi codici di linea

 

Unità didattica 1

 

Esempio 1.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 0 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 =
    0.4053   0   0.0450   0   0.0162

Definizione del vettore n (in questo caso bn = 0). L’output della funzione atan2(an,bn) corrisponde all’applicazione dell’equazione
fi=atan2(a2,0)
Output

fi =
   -1.5708   0   -1.5708   0   -1.5708

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 - n a barre di larghezza 0,04 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
 

 


 

Esempio 1.3

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
 


 

Unità didattica 7

 

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:16)=0;
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 nf -1.2 1.2])
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 LT-3 (2)')
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;
v(33:64)=1;
v(65:96)=-1/3;
v(96:128)=1/3;

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;
v(22:43)=-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