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”... !
Scarica

Document