Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | geltrude-lia |
View: | 212 times |
Download: | 0 times |
Dotazione per il laboratorio di Elaborazione del Segnale e Comunicazioni Elettriche
donazione Texas Instruments
(circa 30 kEuro)
•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)
Dotazione: set di 25 schedine basate sul microprocessore TMS320C6711 e 25 simulatori software
Developer starter kit
codice
A/D 16 bit converter (8 KHz)
D/A
Developer starter kit: utilizzo per il laboratorio
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()
{
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
}
}
main:
1. inizializza stato dei filtri
2. wait for interrupt (ovvero invoca la routine di lettura-scrittura su file)
Struttura del programmaRoutine 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. aggiorna stato del filtro passa-basso di uscita (B=2 kHz)
3. 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. calcola uscita del filtro passa-basso di uscita (B=2 kHz)
6. 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
)(...)1()()( 10 Nnxanxanxany N N
N zazaazH ...)( 110
implementazione: buffer circolare
)(nx )( Nnx )1( nx )3( nx)1( Nnx ...
Na
)(nx )1( nx)1( nx )3( nx...)1( Nnx
)(nx
)(ny
)1( nx
)1( ny
lettura...
scrittura...1a 0a
1a 0a Na
“All’opera”... !
Esempio: effetti di echo e riverbero in tempo reale
echo: si realizza con un filtro numerico FIR
)()()( Nnaxnxny NazzH 1)(
implementazione: buffer circolare
)(nx )( Nnx )1( nx )3( nx)1( Nnx ...
a
)(nx )1( nx)1( nx )3( nx...)1( Nnx
)(nx
)(ny
)1( nx
a)1( ny
lettura...
scrittura...
Esempio: effetti di echo e riverbero in tempo realeriverbero: si realizza con un filtro numerico IIR
...)2()()()( 2 NnxaNnaxnxny
NNN
azzaazzH
1
1...1)( 22
)()()( Nnaynxny
)(nx )( Nny )1( ny )3( ny)1( Nny ...
a
)(ny )1( nx)1( ny )3( ny...)1( Nny
)(nx
)(ny
)1( nx
a)1( ny
lettura...
scrittura...
Esempio: effetti di echo e riverbero in tempo reale
Struttura programma
cicla aspettando le interruzioni dalla porta di ingresso (A/D) e di uscita (D/A)
main:
leggi il dato input
scrivi input nella posizione corrente del buffer
incrementa il contatore modulo N
intr. A/D:
calcola il dato in output
se “riverbero” scrivi output nella posizione precedente del buffer
scrivi output nella porta di uscita
intr. D/A:
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”... !