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