Segnali digitali
Per un segnale analogico, posso andare a vedere in qualsiasi istante il valore del segnale. Un segnale a tempo continuo è definito a tempo discreto, quindi la grandezza varierà nel tempo e questi istanti in cui esso cambia sono gli istanti di campionamento, nei quali si va a vedere qual è il valore della grandezza. Il valore della grandezza è definito anche nell’ampiezza in modo discreto.
Ad esempio, se vogliamo rappresentare il segnale con N cifre (da 0 a 9), potremmo rappresentare valori se consideriamo il sistema decimale. Normalmente utilizziamo il segnale in base binaria. Ciò è comodo dal punto di vista elettrico per la rappresentazione di 0 e 1. In figura abbiamo 5 campioni ad 8 cifre:
- 419 = 28 + 27 + 24
- 680 = 29 + 26 + 24
- 13 = 23 + 22 + 20
- 428 = 28 + 26 + 23
- 534 = 29 + 28 + 22
Se usiamo una parola binaria a possiamo esprimere sino a 8 = 8 → 28 = 256 (0 a 255). Nel nostro caso 10 = 10 → 210 = 1024 (0 a 1023). Se 16 = 16 → 216 = 65.536 (0 a 65.535). Se 20 = 20 → 220 = 1.048.576 (0 a 1.048.575).
Criterio di Nyquist
I sistemi digitali non sono in grado di discriminare i segnali analogici. Supponendo di misurare la temperatura in una stanza con un sensore di tipo analogico, vedrei variare il segnale in modo continuo. Se si volesse utilizzare questo segnale in un sistema microcontrollato, dovrei fornirgli un segnale discreto nel tempo e discreto in ampiezza. Di quel segnale andrò a considerare determinati valori dell’ampiezza discreta in corrispondenza di tempi discreti.
Definisco l’intervallo di campionamento, ossia l’intervallo di tempo che c’è tra due campioni. Il segnale adesso è diventato continuo in ampiezza, però è rimasto discreto nel tempo; tanto più questo intervallo è grande, tanto più perdo informazioni.
Come si sceglie l’intervallo di campionamento? A tale domanda il Criterio di Nyquist risponde così: “se si ha un segnale, rigorosamente limitato in banda, per garantire il mantenimento dell’informazione contenuta nel segnale, e non corromperla introducendo la distorsione di aliasing, la frequenza di campionamento da utilizzare deve essere almeno doppia della frequenza del segnale”.
Nella realtà non si potrebbe applicare il teorema di Nyquist perché non esiste un segnale limitato in banda, perché per il principio di indeterminazione, per avere un segnale rigorosamente limitato in banda, quel segnale deve essere infinito nel tempo. Per ovviare a questo problema, si utilizzano frequenze di campionamento più alte così da avere distorsione di aliasing trascurabili.
Esempio segnale ECG
La norma di prodotto relativa agli ECG ci dice che un elettrocardiografo per garantire una qualità diagnostica deve avere una banda di almeno 125 Hz. Supponiamo di scegliere 1000 Hz rispettando il criterio di Nyquist, ed essendo consapevoli che non esiste un segnale limitato in banda, potrei scegliere di campionare il segnale con una frequenza molte volte maggiore della banda del segnale.
Questa non è una scelta furba, poiché tanto più aumenta la frequenza di campionamento, tanto più aumenta il numero di campioni, ne consegue:
- Aumento della richiesta di memoria del sistema microcontrollato.
- Necessità di avere un sistema microcontrollato più veloce, perché deve fare più operazioni.
Bisogna aumentare la frequenza di campionamento con giudizio. In generale, la frequenza di campionamento del segnale (che utilizziamo noi) può variare da 2 volte alla frequenza del limite di banda.
Ricostruzione del segnale
Per ricostruire il segnale in modo continuo si deve scegliere il tipo di interpolazione. Nel nostro caso manteniamo il valore del segnale calcolato in un punto fino al valore successivo (tratto continuo in rosso nel grafico della pagina precedente) approssimazione a gradinata della curva. Tanto più l’intervallo di campionamento è piccolo, tanto meglio descrivo la curva.
Se fossimo interessati solamente alla ricostruzione analogica del segnale, potrei utilizzare una frequenza di campionamento molto alta (ciò non avviene nella realtà perché il segnale deve essere filtrato, ricostruito, elaborato, ecc.).
Quantizzazione
Un altro problema è la quantizzazione. Supponendo di avere la dinamica divisa in due: se il segnale è nella metà in basso della dinamica, allora il suo valore è 0; se il segnale è nella metà in alto della dinamica, allora il suo valore è 1. Si sta quantizzando il segnale in un unico bit che ci dice quanto vale quel segnale. Questo sistema è poco preciso, perché non mi rendo conto che se considero il campione 2 (vedi figura) non noto che il segnale analogico è cresciuto, sto commettendo un errore di quantizzazione.
Se dividessi la dinamica del segnale in quattro parti uguali, adesso il segnale appartiene a 4 livelli diversi. Per rappresentare 4 livelli ho bisogno di 2 cifre binarie (22 = 4). Aumentando la quantizzazione, utilizzando 24, noto che il segnale è cresciuto, perché è diminuito l’errore di quantizzazione.
Maggiore è il numero dei livelli, maggiore è la risoluzione:
Supponendo che la dinamica del segnale sia 2 V e supponendo che il segnale abbia 10 bit, si avrà una risoluzione pari a 2/1024 = 0.001953125 V, ciò vuol dire che non riesco a distinguere variazioni del segnale minori di 1.953 mV.
Errore di quantizzazione
In generale, con 10 bit posso ottenere una risoluzione di 2/1023. Definisco quindi un errore di quantizzazione percentuale: (errore / ampiezza) * 100, oppure in parti per milione (PPM): (errore / ampiezza) * 1.000.000.
Esempio errore di quantizzazione: supponendo di avere 8 bit (28 = 256): errore percentuale = 0.4%. Da 12 bit in su è conveniente, quindi si passerà da sistemi con errori percentuali dello 0.4% a sistemi con errori percentuali inferiori.
Dimensionamento catena di amplificazione
Supponiamo di avere un trasduttore il quale viene alimentato e fornisce in uscita un segnale elettrico proporzionale alla grandezza in ingresso. Il blocco ha in ingresso un segnale a tempo continuo e fornisce in uscita il segnale campionato. In realtà, fornisce in uscita il segnale a gradinata che abbiamo visto prima perché campiona (Sample) e mantiene (Hold) il valore fino al valore successivo. Il convertitore discretizza il segnale nel tempo. In ampiezza però è ancora continuo.
Convertitore A/D
Il convertitore discretizza il segnale in ampiezza, il quale ha in ingresso un segnale con ampiezza analogica e tempo discretizzato. Un parametro fondamentale del convertitore è la sua risoluzione. Quelli più utilizzati vanno da 8 a 24 bit. I blocchi appena descritti, oltre ad avere una dinamica d’uscita, hanno una dinamica d’ingresso.
Dinamica di ingresso
La dinamica d’ingresso del S/H è un intervallo nel quale può variare il segnale se vogliamo che il funzionamento del S/H sia garantito. Se ciò andasse da 0 a 1 (per i segnali più bassi di 0) il segnale non viene riconosciuto dal S/H. Per quanto riguarda questo blocco, la sua dinamica d’ingresso coincide con la dinamica d’uscita.
Il convertitore A/D ha una sua dinamica d’ingresso che deve essere maggiore o uguale della dinamica d’uscita del S/H. Non è una scelta furba utilizzare un convertitore A/D che ha una dinamica d’ingresso maggiore di quella del S/H. Ad esempio, se ipotizziamo di avere un convertitore A/D a 10 bit con dinamica d’ingresso a 2.048 V e supponiamo di avere un S/H con dinamica d’ingresso pari a 1.024 V. Da quanto detto prima, il ADC funziona, però non uso tutti i livelli. Normalmente si fa in modo che la dinamica I/O del S/H sia uguale a quella della dinamica d’ingresso dell’ADC.
In generale, troviamo un unico blocco che comprende sia S/H che l'ADC. Prima di questo blocco vengono inseriti altri 2 blocchi:
- Amplificatore;
- Filtro Passa Basso Antialiasing ha il compito di mantenere il più possibile il segnale limitato in banda. La frequenza di taglio di questo blocco è una frazione della frequenza di campionamento, nel senso che è più piccola della metà della frequenza di campionamento.
Dinamica ingresso ADC
Questa dinamica è definita dal costruttore. Questa non può essere scelta a seconda delle mie esigenze. Ad esempio, se mi servisse un ADC con dinamica d’ingresso pari a 70 V, potrei non trovare questo valore sul mercato e pertanto dovrei prendere un altro con dinamica maggiore. La risoluzione non è dichiarata dal costruttore, ma so il numero di bit che utilizzo del mio ADC.
Alcuni costruttori dichiarano nelle specifiche dell’ADC a 10 bit 2 dinamiche possibili, ad esempio 1 V o 2.048 V. Sembrerebbe una presa in giro, ma utilizzando questo ADC come misuratore di tensione con la 2.048 V ho la certezza che l’LSB è 0.976 mV, mentre se avessi usato l’ADC con D1, l'LSB sarebbe stato 1.024 mV. In generale le dinamiche d’ingresso variano da centinaia di mV a decine di volts.
Esempio dinamica segnale e dinamica A/D
Possono capitare effettivamente 3 cose:
- 1. Dinamica del segnale maggiore della dinamica dell'ADC: questa condizione non va bene perché l'ADC non sarà in grado di fornire in uscita un valore diverso per ogni possibile valore del segnale d’ingresso. Se VS/VA = 1,5, allora tutti i valori tra 1 e 1,5 saranno convertiti allo stesso modo, ad esempio una serie di 1.
- 2. Dinamica del segnale uguale alla dinamica dell'ADC: questa condizione è verificabile in alcuni casi. Se consideriamo la dinamica di un segnale biologico, questa potrebbe variare (ad esempio per ECG potrebbe essere ±10 mV oppure ±50 mV). Nel caso in cui conosco la dinamica è nota, allora posso utilizzare questa situazione, il convertitore ADC mette a disposizione tutta la sua dinamica d’ingresso per il segnale in ingresso. Sfrutterò tutti i livelli.
- 3. Dinamica del segnale minore della dinamica dell'ADC: in questo caso non c’è saturazione del segnale, ma si potrebbero sfruttare un numero minore di livelli. Nell’immagine che segue il numero di livelli che sfrutto è pari alla metà di quelli in ingresso. In questo modo non sfrutterei a pieno l’ADC.
Esempio condizione migliore n°2: A fronte di questa situazione vogliamo avere la dinamica del segnale VS = 1 μV. Con la dinamica di 1 mV e un convertitore a 10 bit avremmo: 1 mV / 1024 = 0.0009765625 V. Pertanto questa situazione non va bene! Devo cambiare il tipo di convertitore (poiché la dinamica non la posso cambiare), vado quindi ad agire sul numero dei livelli, utilizzo un convertitore a 20 bit e avrei: 1 mV / 1.048.576 = 0.000000953674316 V.
Avrei potuto agire direttamente sul numeratore mantenendo costante il numero di bit, ma fare questa operazione potrebbe essere pericoloso, nel senso che si potrebbero avere fenomeni di saturazione. La soluzione è far crescere il numeratore.
Esempio condizione n°3
In questa situazione è chiaro che non si ha saturazione, però sfrutterò pochissimi livelli dell’ADC, pertanto per ovviare a questo problema potrei pensare di aumentare artificialmente la dinamica del segnale d’ingresso inserendo un amplificatore. Adesso mi sono portato nella situazione migliore pari a quella precedente, ma allo stesso modo sono riuscito a migliorare la risoluzione, andandola a considerare all’uscita dell’amplificatore.
Supponendo di voler una risoluzione di 1 μV, in questo caso ancora non ci siamo. Se amplificassi 50 volte, anziché 100, avrei una risoluzione di 20 μV, ma non posso continuare a variare i parametri dell’amplificatore. A questo punto converrebbe cambiare il numero dei livelli del convertitore A/D.
In sintesi:
- Nel 2° caso l’amplificatore che utilizzo è sempre lo stesso, quindi al massimo posso migliorare.
- Nel 3° caso (situazione apparentemente meno vantaggiosa) aumento la risoluzione amplificando, ricordando che la risoluzione vale: ΔV = VFS / 2N. (In generale potrei aumentare tutti e 3 i parametri).
Esercizio dimensionamento catena di amplificazione
Dimensionare la catena di amplificazione per avere una risoluzione di 1 μV.
Dati:
- VFS = ±1 V
- Vin = ±20 mV
- N = 16 bit
- Banda = 125 Hz
Per il segnale d’ingresso posso supporre che sia generato da un trasduttore. Per l’ADC devo determinare la frequenza di campionamento. Per il filtro antialiasing va determinata la frequenza di taglio alta (dovremmo dire a quanti poli è quel filtro. Di solito i poli vanno da 1 a 8, ma si utilizzano quelli che vanno da 2 a 6 poli. Maggiore è il numero di poli, migliore è la sua prestazione ma sono difficili da realizzare). Per l’amplificatore va determinato il valore dell’amplificazione.
Per il singolo livello avrei la seguente risoluzione: ΔV = ±1 V / 216 = ±30 μV. Da qui ne scaturisce che dovrei amplificare almeno di 30. Se usassi la formula precedente avrei: ΔV = VFS / 2N = 1/216 ≈ 32 μV. Dovrei amplificare almeno 30, ma se scelgo valori più alti devo stare attento ai fenomeni di saturazione.
Ricordiamoci della dinamica del segnale all’uscita dell’amplificatore, essa sarà: Vout = G · Vin. Questo valore deve essere riconosciuto dalla dinamica d’ingresso dell’ADC.
- Se amplificassi di 30, avrei: Vout = ±600 mV. Condizione limite della risoluzione. Garantisce la dinamica.
- Se amplificassi di 40, avrei: Vout = ±800 mV. Miglioro la risoluzione e ho un margine di 200 mV prima di andare in saturazione.
- Se amplificassi di 50, avrei: Vout = ±1000 mV. Sono vicino alle condizioni di saturazione. Questa è una scelta azzardata anche se va bene. Quindi non utilizzerei valori di amplificazione maggiore. Garantisce la risoluzione.
Risposta perfetta è: scegliere un valore di amplificazione A tra 30 e 50.
Frequenza di campionamento dell’ADC
Sceglierei 500 Hz poiché il segnale non è perfettamente limitato in banda. Se scegliessi 1000 Hz minimizzerei il numero di campioni, minimizzerei la distorsione di aliasing. Effettuo in ogni caso un’unica scelta, ad esempio 500 Hz.
Frequenza di taglio del filtro antialiasing
Di sicuro non deve tagliare a meno di 125 Hz perché è la banda del segnale e la voglio preservare. Di sicuro non deve tagliare a più di 250 Hz altrimenti dubiterei della funzione del filtro. Pertanto, scelgo un intervallo di frequenze possibili e poi effettuerò la mia scelta: 125 Hz. Se scegliessi 125 Hz mi terrei un po’ stretto perché taglierei le componenti frequenziali maggiori di 125 Hz di un paziente che le supera. Nel caso avessi scelto 200 Hz mi sarei tenuto un po’ largo ma avrei avuto un po’ di distorsione.
Parallelismo di segnali binari
I numeri possono essere rappresentati e trasferiti in forma seriale: informazione sequenziale (bit presenti in tempi successivi su un unico filo).
Esempio sommatore ad 8 bit
I numeri possono essere rappresentati e trasferiti in forma seriale o parallela: informazione parallela (bit presenti nello stesso tempo su fili diversi).
- I segnali digitali sono generalmente cadenziati da un segnale di clock.
- Trasferimento parallelo: N bit con un clock, N bit contemporaneamente, in un tempo.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Progettazione di Dispositivi Biomedici Programmabili - Appunti
-
Appunti Biomeccanica e simulazione di dispositivi biomedici
-
Appunti Elaborazione di segnali biomedici
-
Appunti di Dispositivi medicali