Dotazione per il laboratorio di
Elaborazione del Segnale e
Comunicazioni Elettriche
donazione Texas Instruments
(circa 30 kEuro)
Dotazione: set di 25 schedine basate sul
microprocessore TMS320C6711 e 25 simulatori
software
•Digital signal processor
TMS320C67x™ (TMS320C6711, C6711B, and C6711C)
•Eight 32-Bit Instructions/Cycle
•100-, 150-, 167-, 200-MHz Clock Rates
•10-, 6.7-, 6-, 5-ns Instruction Cycle Time
•600, 900, 1000, 1200 MFLOPS
•Eight Highly Independent Functional Units:
•Four ALUs (Floating- and Fixed-Point)
•Two ALUs (Fixed-Point)
•Two Multipliers (Floating- and Fixed-Point)
Developer
starter kit
Developer starter kit:
utilizzo per il laboratorio
codice
D/A
A/D 16 bit converter
(8 KHz)
Developer starter kit: sistema di sviluppo
Esempio: multiplazione a divisione di frequenza e DSB
Esempio: multiplazione a divisione di frequenza e DSB
Esempio: multiplazione a divisione di frequenza e DSB
Esempio: radio – DSB
Lato PC:
generazione di due segnali: uno in banda base (B=2 KHz) e l’altro
(B=1 KHz) modulato a f0 = 3000 Hz. Il segnale viene interpolato,
amplificato e trasmesso su cavo
Microprocessore:
Conversione A/D con campionamento a 8 kHz
Interpolazione a 16 kHz (per evitare aliasing nella demodulazione,
che genera un’immagine con centro banda 6 kHz)
Canale 1: filtro passa basso 0-2 KHz
Canale 2: demodulazione e filtro passa basso a 1 KHz
Problema: le portanti possono non essere esattamente
alla stessa frequenza e si generano dei battimenti
Esempio: radio2 - DSB
Lato PC: si aggiunge la portante in trasmissione
Microprocessore:
Estrazione della portante da usare in demodulazione
Filtro passa-alto elimina continua dopo la demodulazione
Schema del ricevitore
Struttura del programma
main:
1. inizializza stato dei
filtri
2. wait for interrupt
(ovvero invoca la
routine di letturascrittura su file)
main()
{
short k;
for (k=0;k<26; k++) stateint[k]=0;
i=0;
for (k=0;k<101; k++) c1state[k]=0;
ic1=0;
for (k=0;k<201; k++) c2state[k]=0;
ic2=0;
#ifdef SCHEDA
comm_intr(); // init DSK, codec, McBSP if DSK present
#else
comm_file(); // open I/O files if DSK not present
#endif
while(1) {
// Idle loop
#ifndef SCHEDA
/*
* Artificially call the handler c_int12()
* if DSK is not present. If DSK is present, c_int12() will
* be called by the low-level interrupt handler.
*/
c_int12();
#endif
}
}
Struttura del programma
Routine di interrupt (invocata con frequenza 8 kHz, ogni volta che un nuovo campione è
disponibile nell’ADC)
1.
Calcola primo campione uscita filtro interpolatore
2.
se canale=1
1.
3.
aggiorna stato del filtro passa-basso di uscita (B=2 kHz)
else
1.
estrai valore portante (normalizzato)
2.
demodula il segnale
3.
aggiorna stato del filtro passa-basso di uscita (B=1 kHz)
4.
Calcola secondo campione uscita filtro interpolatore
5.
se canale=1
1.
6.
calcola uscita del filtro passa-basso di uscita (B=2 kHz)
else
1.
estrai valore portante (normalizzato)
2.
demodula il segnale
3.
calcola uscita del filtro passa-basso di uscita (B=1 kHz)
Filtri FIR: uso di buffer circolare
Filtro numerico FIR
y(n) a0 x(n) a1 x(n 1) ... aN x(n N )
H ( z ) a0 a1 z 1 ... a N z N
implementazione: buffer circolare
x(n)
x(n 1)
a1
lettura...
x(n)
a0
x(n N ) x(n N 1)
aN
y (n)
...
x(n 3)
...
x(n 3)
scrittura...
x(n 1)
x(n 1)
x(n)
a1
x(n 1) x(n N 1)
a0
aN
y (n 1)
“All’opera”... !
Esempio: effetti di echo e riverbero in tempo reale
echo: si realizza con un filtro numerico FIR
y (n) x(n) ax(n N )
H ( z ) 1 az N
implementazione: buffer circolare
x(n)
x(n 1)
x(n)
lettura...
x(n N ) x(n N 1)
a
y (n)
...
x(n 3)
...
x(n 3)
scrittura...
x(n 1)
x(n 1)
x(n)
x(n 1) x(n N 1)
a
y (n 1)
Esempio: effetti di echo e riverbero in tempo reale
riverbero: si realizza con un filtro numerico IIR
y(n) x(n) ax(n N ) a 2 x(n 2 N ) ...
1
N
2 2 N
H ( z ) 1 az a z
...
1 az N
y (n) x(n) ay (n N )
x(n)
y (n 1)
x(n)
lettura...
y (n N ) y (n N 1)
a
y (n)
...
y ( n 3)
...
y ( n 3)
scrittura...
x(n 1)
y (n 1)
y (n)
x(n 1) y (n N 1)
a
y (n 1)
Esempio: effetti di echo e riverbero in tempo reale
Struttura programma
main: cicla aspettando le interruzioni dalla porta di
ingresso (A/D) e di uscita (D/A)
intr. A/D: leggi il dato input
scrivi input nella posizione corrente del buffer
incrementa il contatore modulo N
intr. D/A: calcola il dato in output
se “riverbero” scrivi output nella posizione
precedente del buffer
scrivi output nella porta di uscita
Esempio: effetti di echo e riverbero in tempo reale
main:
intr. A/D:
Esempio: effetti di echo e riverbero in tempo reale
intr. D/A:
“All’opera”... !
Esempio: Eliminazione tono sinusoidale a 1000 Hz
Il tono viene
eliminato mediante
l’utilizzo di un
filtro “notch”, con
uno zero alla
frequenza
f 0 = 1000 Hz e un
polo alla stessa
frequenza e modulo
prossimo a 1
Esempio: Eliminazione tono sinusoidale a 1000 Hz
Lato PC:
generazione di un segnale sinusoidale a 1000 Hz, sovrapposto al
segnale vocale generato dal microfono. Il segnale viene interpolato,
amplificato e trasmesso su cavo
Microprocessore:
Conversione A/D con campionamento a 8 kHz
Filtraggio con filtro notch IIR (secondo ordine) e invio campione
alla porta di uscita
“All’opera”... !