Cap7 Caratterizzazione ADC
Cap7 Caratterizzazione ADC
Cap7 Caratterizzazione ADC
D
Introduzione
Prima di poter essere elaborato il segnale analogico necessita di una conversione digitale,
ovvero sottoforma numerica. Avere un segnale numerico anziché analogico è utile per
avere dei blocchi di elaborazione meno costosi e più potenti. Si può avere anche
l’opportunità di memorizzare con facilità il segnale e operare in un secondo momento
dall’acquisizione, l’elaborazione stessa.
Per poter essere espresso sottoforma numerica il segnale deve essere campionato e
quantizzato, bisogna cioè discretizzare l’asse dei tempi e la grandezza a cui si fa
riferimento.
L’asse delle tensioni è discretizzato indipendentemente dal segnale Vin, invece quello
dei tempi in base alla variabilità di Vin e ai tempi di conversione.
fc>2B
… …
Osservando il segnale campionato ci si accorge che altro non è che il segnale stesso
moltiplicato per un treno di impulsi:
Dove lo spettro del segnale di partenza si ripete uguale a se stesso ogni fc.
Accade che, se si considera lo spettro del segnale campionato nell’intorno dello zero,
ovvero nel primo periodo, tra –fc/2 e fc/2, questo coincide proprio con lo spettro del
segnale non campionato e si deduce ancora che il campionamento nel tempo del segnale
rende periodico l’andamento in frequenza dello stesso, con periodo pari a fc. Questo è
vero nell’ipotesi che la frequenza di campionamento sia maggiore dell’intervallo di
124
frequenze occupato dalla trasformata del segnale, ovvero dalla banda del segnale,
altrimenti si ha aliasing (sovrapposizione). Nel caso in cui il campionamento è effettuato
correttamente si può filtrare lo spettro del segnale campionato ottenendo il seguente
spettro:
che è proprio lo spettro del segnale non campionato. A questo punto anti-trasformando
si può ottenere il segnale non campionato. In definitiva, si può partire dai campioni e
ricostruire il segnale da cui provengono senza perdere informazioni. Nella pratica anche
se il segnale non ha una banda relativamente limitata si può dire che le armoniche a
frequenza alta hanno un basso contenuto in potenza pertanto i loro effetti di eventuale
aliasing sono poco rilevanti.
Nτ
Tc
Dall’istante in cui inizia la conversione all’istante in cui finisce, il segnale varia di una
certa quantità; per un convertitore ad approssimazioni successive il tempo di conversione
si conosce ed è pari a N*τ; nel ciclo continuo di confronti e modifiche dei bit, il
125
confronto precedente perde di significato perché il segnale è variato. Bisogna ipotizzare
che il segnale sia variato di una quantità trascurabile, ovvero più piccola del quanto; in
questo modo al più si ha incertezza sul LSB perché il segnale potrebbe corrispondere ad
una soglia di transizione, ma questo è un effetto tollerabile.
In questi casi, se la variazione del segnale è maggiore del quanto, è necessario modificare
il segnale preliminarmente, limitando l’ampiezza della variazione (indicata in rosso in
figura); si può ricavare un segnale costante a tratti tra un istante e l’altro di
campionamento. La conversione impiegherà un tempo finito ma la variazione del
segnale è nulla; ciò che importa è solo che nel nuovo segnale il valore negli istanti di
campionamento sia uguale a quello del segnale originario.
126
Si consideri un certo range di tensione definito tra Vmin e Vmax e si assuma che è stato
diviso in 8 pedate:
Questo fa capire che il primo problema a cui si va incontro è che un convertitore reale
non avrà mai larghezza delle pedate uguali: saranno uguali solo nominalmente.
127
figura) e a V’+∆V è associato codice ‘i+1’ (4, in figura). In altre parole per V=V’ si ha
una indeterminazione sul codice. Questa appena data è una definizione ideale perché
basata su una caratteristica ideale. Nella realtà invece bisogna procedere in modo
diverso.
Tutto diventa un discorso di probabilità: la tensione di soglia non può essere definita
come quella tensione in ingresso che fa passare dal codice ‘i’ al codice ‘i+1’, ma va
definita in termini probabilistici, come la soglia di tensione Vth che è quella tensione in
ingresso per cui la probabilità di avere un codice ‘i’ o il codice successivo ‘i+1’ è del 50%.
A rigore la probabilità di avere un codice anziché un altro è il limite per il numero di
esperimenti che tende all’infinito della frequenza statistica (ad esempio la probabilità di
avere codice 3 è il limite del numero di esperimenti che tendono all’infinito dell’evento
codice 3) ma nella realtà non si possono svolgere infiniti esperimenti e allora, in base
all’incertezza desiderata, va fissato un numero di esperimenti sufficientemente elevato
Più in generale se N è il numero di esperimenti per una data tensione, se N/2 volte si
ottiene codice ‘i’ e N/2 volte si ottiene codice ‘i+1’, allora questa tensione si definisce
come tensione di soglia.
128
allora delle approssimazioni. Si parte dal fatto che del convertitore si conosce
nominalmente il quanto
Q
∆V
V’
Noto Q nominale, dividendo per 4 si ottiene un certo ∆V che sarà l’incremento discreto
da dare alla tensione di ingresso: partendo da V’, la tensione di ingresso vale V’,poi
V’+∆V, poi V’+2∆V, ecc.
Se ad esempio V’+4∆V sta un pò prima di V’’, si avrà che la probabilità di avere il codice
‘i’ non è uguale a quella di avere codice ‘i+1’, ma è più grande. Se invece V’+4∆V si
trova dopo V’’ di pochissimo vuol dire che la probabilità di avere codice ‘i’ è minore
della probabilità di avere ‘i+1’:
129
i+1 i+1
i i
V’’ V’’
i+1
130
CARATTERIZZAZIONE DINAMICA DI UN CONVERTITORE A/D
Ciò vuol dire che, idealmente, per il tempo in cui la Vin assume valori interni al
quanto, il codice non dovrebbe cambiare, cosa che dovrebbe avvenire solo sulla soglia e
si dovrebbero avere pedate (e quindi quanti) tutti uguali. Ovviamente nella realtà le
pedate non saranno tutte uguali. Per valutare quanto sono grandi queste pedate, o
meglio per individuare le soglie, anche in questo caso va fatto uno studio probabilistico
valutando le occorrenze dei codici: si va a campionare con una certa frequenza di
campionamento tale rampa in ingresso e per ogni valore del segnale di ingresso si
annota il codice che si ottiene.
Nella pratica, se si suppone che facendo variare laVin da Vmin a Vmax si acquisiscono
M campioni, allora M, diviso per il numero di codici possibili ( ) restituisce il numero
di volte (campioni) per il quale il codice è sempre lo stesso:
131
Questo è il caso ideale. Nella realtà il numero di codici varia. Se si ha un codice per un
numero di campioni maggiore di
allora la pedata è più grande del valore nominale; se invece il codice resta sempre lo
stesso per un numero di campioni minore di quello indicato nella formula, la pedata in
esame è più piccola del valore nominale.
Anche in tal caso ovviamente si sta stimando la pedata in termini di occorrenze, gioca
quindi anche un’incertezza di discretizzazione legata al campionamento della rampa:
aumentando la pendenza della rampa, a parità di frequenza di campionamento,
diminuisce il numero di campioni che si prelevano per ogni codice, non consentendo
più di approssimare la probabilità con la frequenza statistica. Per ovviare a questo
inconveniente e, quindi, continuare a prendere lo stesso numero di campioni per ogni
codice bisogna aumentare la frequenza di campionamento. Si consideri che, dato il
tempo finito e non infinitesimo occorrente al dispositivo per compiere la conversione,
esiste per ogni dispositivo un limite superiore per la frequenza di campionamento.
Questa limitazione comporta che, superata una certa pendenza della rampa, il
convertitore inizierà a prelevare un numero di campioni sempre minore. Per superare
tale limite è possibile rendere periodico il segnale a rampa (ottenendo quindi un segnale
“a dente di sega”) allo scopo di prelevare nell’arco di più periodi il numero di campioni
desiderato, pur sollecitando il convertitore con un segnale a forte dinamica. Questo
Vediamo come dalla rampa e dal numero di occorrenze si può valutare l’ampiezza della
pedata:
Tc
132
La pendenza è nota assumendo che la rampa sia lineare, la durata pure perché si
conosce il periodo di campionamento della rampa, Tc e si conoscono le occorrenze,
quindi quanti campioni danno quel codice, si divide allora pendenza su durata e si
ricava la pedata.
Cioè dovrebbe essere un segnale che arriva ad un certo valore massimo, poi si azzera e
deve risalire per fare un’altra misura, arrivare al valore massimo, azzerarsi e ripartire per
un’altra misura: questo segnale ha uno spettro enorme (infinito), perciò difficile da
generare.
133
Campionando con una certa fc il segnale di ingresso come fatto per la rampa, si avrà
ancora una caratteristica a gradino, nel senso che per un certo numero di volte si ha un
codice, per un altro numero di volte un altro codice e così via, solo che, mentre nel caso
della rampa per ogni codice si aveva lo stesso numero di occorrenze, con una sinusoide
accade che per ogni codice il numero di occorrenze è diverso dato che il seno ha una
pendenza variabile: lì dove varia meno (intorno al minimo e al massimo) si avranno più
occorrenze, dato che più campioni cadranno nel quanto; lì dove la pendenza è più alta
(intorno al passaggio della sinusoide per lo zero) il numero di occorrenze sarà minore,
perche in ogni quanto cadono meno campioni.
Però la pendenza della sinusoide è nota punto per punto e quindi si può stimare
teoricamente quante occorrenze dovrebbero esserci per ciascun codice, successivamente
si può confrontare il numero di occorrenze che si ha realmente con quello che ci si
aspetta teoricamente: se si ha un numero di occorrenze maggiore rispetto al numero di
occorrenze teorico, la pedata è più grande del valore teorico, se minore la pedata è più
stretta.
4) si prende poi un convertitore reale, con lo stesso numero di bit, al quale si applica la
stessa sinusoide in ingresso, con la stessa fc usata per la simulazione e si valutano le
occorrenze;
5) poi si confrontano e si osserva se le pedate per ogni codice sono più grandi o più
piccole rispetto a quelle nominali, trovate in simulazione.
Ma si può fare di più: al posto di fare l’analisi teorica attraverso la simulazione, si può
prevedere qual è il numero delle occorrenze data una certa sinusoide campionata con
una certa fc. Basta applicare una sinusoide in ingresso al convertitore, con una certa fc e
si elabora l’istogramma delle occorrenze:
134
4
3
2
0
-1
-2
-3
-4
135
Fs
Tk
k
Tk-1
Tc
k-1
T/2 t
τ
-Fs
Si divide l’asse delle tensioni in un numero di livelli pari ai livelli del convertitore e si
pone questa lunghezza pari alla pedata di un certo codice compreso tra le soglie Tk-1 e
Tk; Tk - Tk-1 è la larghezza della pedata.
H(k)
Ovviamente se si considera un codice più vicino alla stazionarietà, H(k) è più elevato e τ
è piu ampio. A questo punto si vuole trovare quanto valgono Tk-1 e Tk , cioè si vuol
vedere dove sono localizzate le soglie. Il Tk-1 è dato dal valore che assume la funzione nel
punto k-1, ma k-1 è dato dalla somma di tutti i τ che lo precedono, dove ogni τ è Tc
H(k):
136
In realtà nel coseno si dovrebbero avere i radianti dimensionalmente, non un tempo,
quindi è:
dove al posto di Npp si inserisce Nc, numero di campioni acquisiti dall’istante zero
all’istante T/2.
Ecco allora spiegato come calcolare le soglie. Ricordiamo che è noto il fondo scala FS,
l’istogramma cumulativo (calcolando le occorrenze e sommandole) e pure il numero di
campioni acquisiti. Questo in linea teorica, bisogna poi trovare il modo di implementare
questo metodo teorico di calcolo.
137
2fs
y(x)=C-FScos( )
La frequenza della sinusoide la si sceglie in base alla dinamica a cui si vuole caratterizzare
il convertitore, cioè in base alla variabilità che si vuole che abbia il segnale di ingresso.
Bisogna capire anche come scegliere la frequenza di campionamento: come si era detto nel
caso di un segnale costante all’ingresso, si vuole che nell’intervallino τ i campioni siano
vicinissimi, perche quanto più sono vicini tanto più il calcolo delle probabilità è
rigoroso. Quindi la frequenza del segnale deve essere molto minore della frequenza di
campionamento. Tuttavia si è anche detto però che si vuole sollecitare il convertitore
alla frequenza di Nyquist, ovvero si vuole che la frequenza del segnale sia circa fc/2 o
fc/4 (se la massima frequenza di campionamento è 100Mhz si ricerca un segnale a
50Mhz, ma a 50Mhz si hanno 2 campioni in tutto l’esperimento e con due campioni si
Ecco che passando alla pratica si ha qualche problema. Allora si opera in questo modo:
si cerca la fc in modo che tutti i codici abbiano almeno un campione, ovvero abbiano
almeno un’occorrenza. Per fare questo, basta imporlo al codice con occorrenza minore,
ovvero dove varia di più il segnale, cioè nel passaggio per lo zero. Si cerca cioè la fc tale
che, se un campione cade nel passaggio dello zero della sinusoide, il campione successivo
cade prima della soglia tra 1 e 2, perchè se Tc è tale che il prossimo campione cade dopo
il punto A della figura seguente, al campione è associato codice 2 e il codice 1 non ha
neanche un campione.
138
Riassumendo: si assume che un campione sia nello zero, a cui è associato codice zero e si
vuole che ogni codice abbia almeno un campione. Si vuole cioè che il codice con minori
campioni ne abbia almeno uno. Ma i codici con meno campioni sono ‘1’ e ‘-1’ cioè
quelli intorno allo zero, ovvero dove la funzione varia pù velocemente. Se il Tc è tale che
il campione successivo è dopo la soglia, ad esso è associato 2, se invece cade prima della
soglia è associato 1. Si deve allora fare in modo che il Tc sia tale che al successivo
campione sia associato 1: se si impone questa condizione anche per il codice -1, poi la
pendenza della sinusoide diminuisce e gli altri codici sicuramente avranno uno o più
campioni.
Ovvero:
139
cioè:
Poichè Tc <<T , si può affermare che in prima approssimazione che il seno è circa pari
all’arco:
ancora:
Npp=π 256
Quindi anche volendo un solo campione per codice si trova che fc/fs è circa π 256.
Questo è un problema poiché il metodo esaminato in queste condizioni può essere
utilizzato solo per frequenze della sinusoide molto più piccole di quella di
campionamento. Si cerca una soluzione. Facendo più di un’acquisizione, ad esempio
acquisendo campioni non in mezzo periodo ma in un periodo intero, in modo che nel
secondo semiperiodo si acquisisca campioni che non sono stati acquisiti nel primo
semiperiodo, si riduce il numero di punti per periodo da π 256 a π 128.
140
Nota: fin ora è stato considerato il periodo ma il disegno è stato fatto per un
semiperiodo. In generale si può ragionare sul periodo: se in un periodo si è trovato che
bisogna avere π 256 Npp, acquisendo in due periodi in modo che nel secondo periodo si
acquisisca campioni diversi da quelli acquisiti nel primo, Npp è ridotto a π 128. Facendo
più acquisizioni quindi si riduce Npp!
Per far ciò non si può scegliere come frequenza del segnale di ingresso una frequenza
arbitraria come fatto finora, ma deve essere una fs tale da poter stare in un certo
rapporto con fc , in modo da essere certo che per periodi successivi si va a campionare in
istanti di tempo sempre diversi rispetto ai precedenti (cioè la fs deve essere scelta in
modo che fc/fs assuma un valore tale che, campionando per periodi successivi, i
campioni acquisiti nei periodi successivi siano diversi da quelli che acquisiti nei
precedenti). Per scegliere fs si ricorda che Npp=fc/fs ; ma il numero di punti per periodo è
pari al numero di punti N diviso il numero di periodi, Np:
Si fa in modo che fc/fs sia uguale al rapporto di due numeri coprimi. Due numeri si
dicono coprimi quando non hanno fattori comuni ovvero quando non sono
semplificabili. In tal modo, finchè non si prende un numero di punti pari ad N
vengono acquisiti sempre campioni diversi, all’N-esimo + 1 campione si ritorna il primo.
Va fissata fc, N, Np. Il costruttore stabilisce che il convertitore può essere impostato con
2) in modo che N/Np sia prossimo a Npp desiderato, ovvero prossimo a fc/fs desiderato;
cioè se si vuole un fs=fc/4 , ovvero se si vuol prendere 4 punti per periodo, vuol dire che
N/Np deve essere circa 4 e inoltre il rapporto deve valere 4 contemporaneamente alla
condizione di essere coprimi, quindi bisogna trovare due numeri coprimi il cui rapporto
sia circa pari a quello desiderato, in base alla sollecitazione da applicare in ingresso,
ovvero in base alla fs rispetto a fc. Per trovare N e Np basta allora prendere N, una
potenza di 2, ed Np un valore non semplificabile per due, quindi Np come un numero
dispari: se N=216=65536, affinchè N/Np sia pari a 4, Np deve essere 214 e allora si prende
Np=214+1 :
141
N=216 , Np=214+1 , e si ha che il rapporto è circa 4, con N ed Np coprimi. Dalla
relazione:
si ricava fs che sarà circa 4 volte fc . In tal modo si ha un numero di campioni pari a
65536 che ovviamente è maggiore di 256π e si è aumentata la frequenza del segnale.
Capito come si sceglie il segnale test di ingresso, fissata fc, si applica tale segnale al
convertitore e si accumulano i campioni; si conta poi quante volte si ha ciascun codice
(numero di occorrenze) e il numero di campioni di ogni codice si divide per il numero
totale di campioni, ottenendo la frequenza di occorrenza di ciascun codice.
Successivamente si traccia l’istogramma delle occorrenze, si calcolo l’istogramma
cumulativo (ragionando ad esempio un questo modo: la prima volta si ha solo il codice
zero, la seconda codice zero più codice 1, la terza 0 +1 +2…ecc…).
1) errori di guadagno;
2) errori di offset;
142
Bisogna ora trattare separatamente questi tre contributi.
1) Si ha un errore di guadagno quando le pedate sono tutte uguali tra loro, ma sono
diverse dal valore delle pedate nominali: Q=Vrange/2N. Ovvero le pedate sono esprimibili
come:
Q=Vrange/2N Q
Questo comporta che la pendenza media della gradinata della caratteristica è diversa da
quella nominale: ecco perche errore di guadagno;
3) Tutto ciò che resta, una volta individuato nello scostamento l’errore di guadagno e di
offset, è l’errore di non linearità. Cioè se si individuano gli errori 1) e 2) e vengono
compensati, lo scompenso che si continua a vedere è tutto dovuto a non linearità.
Tale normativa ci dà dei paramteri che si devono andare a stimare per caratterizzare il
convertitore dal punto di vista dinamico, tali parametri sono:
143
1) ERRORE DI GUADAGNO,
2) OFFSET,
3) NON LINEARITÀ INTEGRALE
4) NON LINEARITÀ DIFERENZIALE,
5) NON MONOTONICITÀ
L’errore di offset e l’errore di guadagno sono errori che non introducono non linearità,
ovvero se il convertitore ha rispetto al comportamento ideale solo i primi due errori
allora si continua ad avere pedate tutte uguali tra di loro; in particolare l’errore di offset
si manifesta nel fatto che i Tkr rispetto ai Tk differiscono per una costante di offset;
ovvero le varie soglie sono tutte traslate di una quantità costante rispetto alle soglie
ideali, quelle ottenute cioè come Vrange/2^N.
L’errore di guadagno invece è dato da fatto che i quanti non sono tutti uguali, ma
differiscono di una quantità che è il guadagno, ovvero se si considera la caratteristica
ideale
E si uniscono tutti i centri delle pedate si ottiene una retta che ha una certa pendenza, se
si considera la caratteristica reale si ottiene ancora una retta perché l’errore è di
guadagno non di non linearità, tuttavia la pendenza è diversa. Quindi l’errore di
guadagno si manifesta nella variazione della pendenza della caratteristica.
Quindi un primo passo per esaminare gli errori è dividere gli errori lineari (offset e
guadagno) da quelli non lineari, per fare questo si considera il grafico dei Tkr e Tk:
144
I Tk ideali sono discreti quindi il plot è per punti fatto rispetto ai Tk che distano l’uno
dall’altro di una distanza Q. I Tkr hanno invece una certe distribuzione che trovo
rispetto ai Tk corrispondenti. Nel caso di un convertitore ideale Tkr=Tk, e si ha la
rappresentazione fatta sopra. L’interpolzione è la retta passante per l’origine con
pendenza 45°.. Tuttavia nella realtà questi punti non è detto che sono su una retta. Dati
y=mx+n
dove m ed n sono i ‘migliori’ valori per cui lo scarto quadratico medio tra i punti Tkr e i
corrispondenti ideali è minimo. Ovvero la retta interpolante che si considera è la
migliore cioè quella che minimizza lo scarto tra valori reali e corrispondenti ideali.
Trovata questa retta, si conosce la pendenza m. Questa pendenza è l’errore di guadagno,
mente n è l’offset (ovvero lo shift della curva). Avendo estratto da una retta si
individuano quindi l’offset e il guadagno, i primi errori di non idealità. Noto m ed n si
può traslare la retta interpolante facendo in modo da farla passare per l’origine e si può
fare in modo che si abbia pendenza unitaria come quella ideale. Questo significa che se
a tutti i Tkr da cui si è estratta la retta si sottrae n, ricalcolando la retta interpolante si
145
troverà la retta passante per l’origine. Inoltre se si divide per m si trova proprio la retta a
pendenza unitaria. Facendo in questo modo si trovano i Tk reali compensati Tkc.
I Tkc sono le soglie reali prive di errore di offset e di errore di guadagno, quindi tutto
quello che differisce tra Tkc e Tk è errore di non linearità. Cioè resta l’errore di non
linearità. Cioè resta solo il fatto che i Tk non stanno proprio su una retta.
Se si calcola la differenza tra i Tkc e i Tk si trova l’errore che tiene conto della non
linearità:
Nell’ambito della non linearità si distingue una non linearità differenziale e una non
linearità integrale. La differenza risiede nello scopo, ovvero dipende da se si è interessati
a caratterizzare il convertitore nell’intorno di una tensione di funzionamento
(differenziale) oppure si è interessati a caratterizzarlo in tutto il suo range di
funzionamento.
Si vedrà che tipo di informazione danno questa due non linearità, tuttavia in linea di
principio entrambe dicono che il Tkc non sta in corrispondenza del Tk ma si discosta da
quest’ultimo.
Quello integrale dice che uno dei tanti Tkc differisce dal rispettivo Tk non tanto perché
L’errore di non linearità differenziale, ci dice se una certa pedata è maggiore o minore di
Q. Quindi ci dà delle informazioni locali, in un certo punto della caratteristica. Quindi
ci dice la larghezza di una pedata di quanto si scosta da Q.
146
Per questo motivo potrà essere espresso come:
A questo punto esaminiamo la norma per vedere quali istruzioni dà per calcolare questi
due errori di non linearità. La norma dice che la va calcolata come detto solo che va
espressa in percentuale rispetto al fondo scala.
Tkc − Tki
INL(k ) = ⋅ 100
fs
(TK +1 − TK ) − Q
DNL (k ) =
Q
dove:
Tkc la soglia di transizione compensata del convertitore in prova tra il codice k e il codice
k+1;
Tki la soglia di transizione del convertitore ideale tra il codice k e il codice k+1;
N
1
DNL = RMS[ DNL(k )] =
N
∑ DNL (k )
i =1
2
Non è possibile correggere l’errore dovuto alla non linearità, ma solo effettuare una
stima di incertezza su quanto espresso dal convertitore stesso. INL e DNL sono perciò
indipendenti da k, mentre il massimo è calcolato al variare di k, così come INL(k) e
DNL(k) sono calcolati per ogni k. RMS è definito come il valore efficace calcolato
rispetto a k.
Finora si è fatta l’ipotesi che la caratteristica del convertitore sia monotona crescente.
Vediamo quali sono i problemi se questo non si verifica. Se la curva passante per i punti
al centro delle pedate fosse del tipo rappresentato in figura:
La norma dice un’altra cosa. Trovati i Tkr si deve trovare un altro modo per ricavare
questi Tkr in modo da avere un confronto con i Tkr precedentemente trovati. Cioè se si
riesce a dire che ad esempio la distorsione che fa il segnale sul convertitore è la stessa
che si ha con i Tkr nuovamente trovati allora il grado di fiducia (certezza) sul valore dei
Tkr è maggiore. Il parametro che bisogna valutare e che tiene conto di ciò è l’ENOB.
L’ENOB
La siglia ENOB sta per Effective Number Of Bit. Prima di dire che cosa è l’ENOB, si fa
ora un richiamo sull’incertezza. L’incertezza la si è definita di categoria A o di categoria
B, esaminiamo quella di categoria A. La valutazione di incertezza di categoria A prevede
di fare quello che si è appena fatto, ovvero la si valuta facendo misure in un certo
Il valore dell’incertezza deve dire quante cifre significative usare ovvero il numero di
cifre significative da usare per il risultato deve essere tale che l’ultima cifra significativa
deve essere quella affetta da errore. Questo significa che se tutti i risultati della misura si
scrivono bene, ovvero si scrivono in modo che l’ultima cifra significativa è quella affetta
da incertezza, allora si ha il caso 3, ovvero i risultati della misura si differenziano solo per
il valore delle ultima cifra significativa. Se invece si scrivono più cifre significative di
149
quelle necessarie allora vuol dire che più cifre sono affette da incertezza e i veri valori si
discostano maggiormente l’uno dall’altro (caso 2). Se invece la rappresentazione dei
valori avviene con un numero inferiore di cifre significative rispetto al necessario, allora
questo numero è sempre lo stesso perché non varia con la misura (caso 1). La giusta
scala di rappresentazione è la terza, prima i costruttori facevano in modo che le cifre
rappresentate erano tutte corrette, tuttavia la nascita di nuovi strumenti (come
multimetri o strumenti a più portate) ha fatto nascere esigenze diverse. Il costruttore
oggigiorno fa la caratterizzazione dello strumento e fornisce una tabella di incertezza per
tutte le tipologie di misure fattibili con lo strumento in esame. In base alle misure che si
fanno quindi si prendono gli opportuni valori da tabella e vi si calcola l’incertezza
associata e si vede su quale cifra del valore trovato agisce l’incertezza, tutte le cifre che
vengono successivamente le si elide.
Dire che si ha incertezza di categoria A pari a zero non significa che non si ha incertezza,
ma vuol dire che si ha incertezza su una scala sbagliata.
Nel convertitore reale invece in cui si può avere l’errore di offset e di guadagno e di non
linearità si capisce che l’incertezza è ben altro che Q/2. Questo perché si possono avere
delle non linearità tali che T(k-1)-T(k) è molto diverso da Q, cioè si potrebbero avere
delle pedate molto diverse da Q. In questo caso dire Vi=Q*codice è sbagliato.
Vediamo cosa si può fare per trovare i bit effettivi. Si può definire un convertitore
equivalente a quello in esame che sia ideale, ovvero dato un convertitore reale, ne esiste
uno equivalente ideale al quale è associato un rumore di quantizzazione uguale al
rumore del convertitore reale. Vediamo cosa significa rumore di un convertitore.
150
Ad esempio per un convertitore ideale a 4 bit:
151
Capitolo 8 : caratterizzazione convertitori A/D
La caratteristica dell’errore è a dente di sega la cui pendenza è -1 in quanto la distanza
sull’ascissa tra una soglia e l’altra è Q. Questo è l’errore di quantizzazione, il rumore di
quantizzazione è il valore efficace del segnale errore di quantizzazione. Il segnale è la
tensione di errore in funzione della tensione in ingresso, esso è periodico di periodo Q.
Il rumore efficace dell’errore di quantizzazione è:
152
Si è definito il rumore di quantizzazione. Esaminiamo ora il convertitore reale. Anche
per il convertitore reale si ha sempre la relazione Vi=CODICE*Q dove Q è il quanto
ideale. Tuttavia tale tensione risulta affetta non solo da errore di quantizzazione ma
anche da errore di offset di guadagno e di non linearità. Quindi la relazione sopra non è
applicabile! Si deve trovare un appropriato. La caratteristica a cui si fa
riferimento non è a dente di sega, non la si conosce. Ma in effetti esiste un invertitore
ideale che ha lo stesso di quello reale, in questa situazione il numero di bit di
questo convertitore ideale è uguale al numero di bit effettivi del convertitore reale. Ora,
l’RMSnoise del convertitore ideale è
Dove
Se si fissa il FS del convertitore ideale uguale al FS del convertitore reale, allora ci si può
chiedere quale è il numero di bit del convertitore ideale tale che è pari all’
Ma
Poiché FS è lo stesso allora il numero di bit del convertitore reale è minore di quello
ideale. Vediamo più in dettaglio.
153
Invertendo quest’ultima formula è possibile calcolare N, il numero di bit del
convertitore, in funzione di rms noise:
FS
N = log 2
RMS noise ⋅ 12
E sostituendo nella formula si ottiene N=N, cioè un’identità come ci si aspetta per un
convertitore ideale. Per un convertitore reale all’interno della formula si sostituisce
l’ , ricavando N.
Questo N è il numero di bit che deve avere un convertitore ideale equivalente all’ideale,
ovvero che abbia un RMSnoise uguale. Ovviamente di questo convertitore reale
equivalente il rumore è di sola quantizzazione. Il problema per trovare l’ENOB è andare
a trovare quanto vale RMSnoise,reale.
Trovare l’RMSnoise reale serve anche per fare un controllo di congruenza tra l’RMS
trovato e quello che ci si aspetta, una volta trovata la caratteristica di trasferimento.
Questo perché se si mette il segnale in ingresso, visto che si conosce la caratteristica di
trasferimento poiché si conoscono le soglie, si può andare a calcolare il segnale di uscita.
Quando il segnale di uscita rispetto a quello che si avrebbe utilizzando un convertitore
ideale di uguale FS, sarà diverso,facendo la differenza tra i due segnali si trova il valore
efficace e quindi l’RMSnoise. E poi si trova il numero di bit effettivi N dalla formula.
Quindi si trovano questi bit effettivi ipotizzando che sono giuste quelle soglie che si
erano trovate e che hanno fatto tracciare la caratteristica usata. Se questi bit coincidono
154
con quelli che si avevano come risultato quando si utilizzavano le occorrenze allora si ha
la conferma sui bit di uscita! Questa è la conferma che si cercava anche prima, ovvero il
ricalcolo dell’uscita per altra strada. Infatti usando la caratteristica per calcolare
RMSnoise si sta calcolando l’uscita con altro metodo partendo dalle soglie di prima.
Si potrebbe avere una non congruenza tra le due uscite trovate con i due metodi, per
ovviare metto la stessa sinusoide come segnale di ingresso per i due metodi, anche la
frequenza di campionamento viene lasciata uguale a quella usata per il calcolo delle
soglie Tkr.
Nel calcolare l’RMSnoise si deve sapere a che punto della sinusoide inizia l’acquisizione,
in quanto bisogna calcolare:
155
Si ricava quindi il FS e quindi l’ENOB.
FS
ENOB = log 2
RMS noise ⋅ 12
Per fare questo si è detto che si deve conoscere il segnale in ingresso, dire questo,
significa che si ha il segnale in ingresso deve essere noto come espressione analitica,
altrimenti non si può fare la differenza con il segnale in uscita (in quale non è continuo,
ma è un segnale campionato):
Al limite di Nyquist si sceglie fc=2fs, cioè in un periodo del segnale di ingresso si hanno
solo 2 fronti del clock allora questo problema è maggiormente sentito poiché il primo
campione può essere preso molto più dopo dello zero. Tale problema è tanto più poco
sentito quanto più fc>fs, ed è tanto più sentito quanto più fc si avvicina a 2fs.
Ovviamente nel fare questo errore nello stabilire bene la sincronizzazione, quando si va
a fare la differenza, non la si fa per valori riferiti allo stesso istante, ma prendo i
campioni corrispondenti non rispetto all’istante di tempo, ma corrispondenti a quel
punto del segnale. Quello che si fa è calcolare il segnale in ingresso a partire dall’uscita,
come quel segnale che meglio approssima il segnale di uscita. Ovviamente il segnale di
uscita potrebbe essere affetto da errore di guadagno e offset e non linearità. Allora visto
che si conosce Vmax e la frequenza allora si può ricavare questa sinusoide. La costante C
la si può misurare con un semplice voltmetro che misura il valor medio. In questo modo
resta solo il rumore di non linearità.
Allora ci si chiede quali sono i valori di A , e tali che tale sinusoide approssimi
meglio il segnale di ingresso, ovvero minimizza lo scarto quadratico medio tra le Vk
Essendo:
Poiché
157
Dove k è l’indice dei campioni. Per la formula di addizione del coseno si può riscrivere
come:
Definisco:
sono i campioni trovati facendo codice per quanto in uscita. Ponendo per comodità:
Si riscrive Vik:
158
Da cui:
M
∂ε
0= = −2 ⋅ ∑ V ik − A0 ⋅ α k − B0 ⋅ β k − C0 ⋅ α k
[ ]
∂A0 i =1
M
∂ε
0= = −2 ⋅ ∑ V ik − A0 ⋅ α k − B0 ⋅ β k − C0 ⋅ β k
[ ]
∂B0 i =1
M
∂ε
0= = −2 ⋅ ∑ V ik − A0 ⋅ α k − B0 ⋅ β k − C0
[ ]
∂C0 i =1
Riordinando il sistema:
M M M M
∑V
k =1
ik
⋅ α k = A0 ⋅ ∑ α + B0 ⋅ ∑ α k β k + C0 ⋅ ∑ α k
k =1
2
k
k =1 k =1
∑V ik ⋅β k = A0 ⋅ ∑ α k β k +B0 ⋅ ∑ β k2 + C0 ⋅ ∑ β k
k =1 k =1 k =1 k =1
M M M
∑V
k =1
ik
= A0 ⋅ ∑ α k + B0 ⋅ ∑ β k + C0 ⋅ M
k =1 k =1
Si useranno per fare la differenza con il segnale di uscita, trovando il segnale di rumore
di errore. Infatti si trova
159
Da cui si può ricavare l’ENOB.
FS
ENOB = log 2
RMS noise ⋅ 12
Quindi a causa del rumore si sanno quanti bit sono significativi e quanti no. L’ENOB
dipende dalla frequenza del segnale di ingresso, quanto più è grande la frequenza tanto
più è piccolo l’ENOB, ovvero si riducono i bit effettivi. Per questo motivo l’ENOB è
calcolato nel caso peggiore, ovvero si fissa il range di frequenze in cui lavora il
convertitore e si ragiona con la frequenza più alta. In questo modo si è sicuri che il
convertitore negli altri casi lavora meglio. L’ENOB è calcolato a partire dall’uscita
sperimentale.
Bisogna inoltre notare che il calcolo dell’ENOB è utile anche come verifica della
caratteristica di trasferimento. Poiché si era ipotizzata la monotonia. Quindi si calcola
l’ENOB a partire dall’RMSnoise del convertitore reale, mettendo l’ingresso e valutando
sperimentalmente l’uscita. Poi si ricalcola l’uscita a partire dall’ingresso utilizzando la
caratteristica di trasferimento, questo si fa poiché si hanno le soglie e l’ingresso. Con
questa nuova uscita non sperimentale ma teorica si calcola l’ENOB. Se i 2 ENOB trovati
ESERCIZIO:
Qui di seguito sono mostrati i programmi che calcolano i parametri che caratterizzano il
convertitore utilizzato per le acquisizioni. Non sono altro che le equazioni e gli algoritmi
presentati nella relazione e descritti dalla norma 1241-2000.
Dati:
Ci sono 10 file di testo "Acquisizione_x.txt" che costituiscono dieci acquisizioni ripetute
dello stesso segnale eseguite con l'oscilloscopio. Ognuno dei file contiene 2048
campioni acquisiti, forniti come codici di uscita
160
del convertitore analogico/digitale.
Determinare:
1) Le soglie di transizione
2) Errore di guadagno e di offset
3) Non linearità differenziale ed integrale
4) Numero di bit effettivi (ENOB)
Codice:
function [H]=occorrenze(array_codici,N)
% Trova le occorrenze di ogni codice k
% N è il numero di bit, array_codici contiene i codici rilevati
% H è un array di 2^N locazioni, ogni locazione di indice k, contiene
%il numero di occorenze del codice k-1 che si ha nell'array_codici
H = zeros(2^N,1);
iter = size(array_codici);
for i=1:iter(1)
H(array_codici(i) + 1 ) = H(array_codici(i) + 1 ) + 1;
end
161
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
function [Tr,Hc,iter]=soglie_reali(H,Vfs,Nc)
% Trova le soglie reali
% Nc è il numero di campioni acquisiti è la dimensione di array_codici, H è l'uscita
della
%funzione "occorrenze", Vfs è l'ampiezza della sinusoide di prova.
% Tr è un array di dimensione pari a H, ogni locazione di indice k,
%contiene la tensione di soglia al di sopra della quale si ha il
%codice k-1 (k è un indice che va da 1 a 2^N, i codici da 0 a 2^N-1, nella
%teoria si è visto che la Tk è quella tensione al di sopra della quale
%si ha il codice k, a causa dei valori degli indici, la definizione, cambia
%leggermente)
iter = size(H);
Tr = zeros(iter(1),1);
for i=1:iter(1)
Hc = 0;
for j=1:i-1
Hc = Hc + H(j);
end
Tr(i) = -Vfs*cos(pi*Hc/Nc);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
function [G,O,Trc,Ti]=err_guad_offset(Tr,N,Vfs)
% Trova l'errore di guadagno e di offset
% Tr uscita della funzione "soglie_reali", N è il numero di bit,
% Vfs è l'ampiezza della sinusoide di prova.
% G: errore di guadagno, O: errore di offset
% Ti: sogli ideali, Trc: soglie reali e compensate
q = (2*Vfs)/(2^N);
iter = size(Tr);
Ti = zeros(iter(1),1);
for i=1:iter(1)
Ti(i) = (i-1)*q - Vfs; %Ti(i) è la soglia ideale relativa al codice
end % i-1
162
interp = polyfit(Ti,Tr,1);
%interp(1) contiene il coeff angolare e interp(2) l'ordinata all'origine
%della retta interpolante i campioni Tr, restituita dalla funzione
%polyfit; cioè si ottiene proprio l'errore di guadagno e di offset.
G = interp(1);
O = interp(2);
Trc = (Tr - O)/G ; %il generico elemento del vettore Trc: Trc(i) è
% uguale a (Tr(i) - O)/G
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
function [dnl,inl]=INL_DNL(Trc,N,Vfs)
% Trova il DNL e INL
% Trc è l'uscita della funzione "err_guad_offset", N il numero di bit,
% Vfs è l'ampiezza della sinusoide di prova
q = (2*Vfs)/(2^N);
iter = size(Trc);
Ti = zeros(iter(1),1);
for i=1:iter(1)
Ti(i) = (i-1)*q - Vfs;
%Calcolo di inl
inlk = zeros(iter(1),1);
for i=1:iter(1)
inlk(i) = abs(Trc(i)-Ti(i));
end
%Calcolo di dnl
dnlk = zeros(iter(1)-1,1);
dnl = 0;
for i=1:iter(1)-1
dnlk(i) = (Trc(i+1)-Trc(i) - q )/q ;
end
163
for i=1:iter(1)-1
dnl = dnl + dnlk(i)^2;
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
function [ENOB,rms_noise,vi,yo]=trova_ENOB_DEF(array_codici,fs,fc,N,Vfs)
% Trova ENOB e rms_noise
% array_codici contiene i codici rilevati, N è il numero di bit,
% fs è la freq del segnale di prova, fc quella di campionamento, vi è
% il segnale stimato secondo la norma 1241-2000, yo è il segnale analogico
% rilevato dopo la conversione dei codici di uscita del convertitore
q = (2*Vfs)/(2^N);
iter = size(array_codici);
%Costruzione dei coefficienti e dei termini noti del sistema lineare di tre equazioni
nelle incognite Ao, Bo, %Co
ya=0; a2=0; ab=0; a=0; yb=0; b2=0; b=0; y=0;
for i=1:iter(1)
ya = ya + yo(i)*ak(i);
a2 = a2 + ak(i)*ak(i);
ab = ab + bk(i)*ak(i);
a = a + ak(i);
yb = yb + yo(i)*bk(i);
164
b2 = b2 + bk(i)*bk(i);
b = b + bk(i);
y = y + yo(i);
end
rms = 0;
for i=1:iter(1)
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%
165
1 0.1682 4.1017
2 0.1494 4.2726
3 0.1657 4.1226
4 0.1423 4.3421
5 0.0869 5.0540
6 0.1486 4.2800
7 0.2019 3.8375
8 0.1767 4.0302
9 0.1481 4.2848
10 0.2175 3.7306
Il calcolo di guadagno e offset, nonché di INL e DNL è stato fatto tenendo conto di tutti
i campioni acquisiti.
INL = 0.584
DNL = 0.158
166
Diagramma delle occorrenze (di tutte le acquisizioni)
167
Grafico delle soglie compensate Trc [V] in funzione delle soglie ideali Ti [V] (prima
acquisizione)
Grafico delle soglie compensate Trc [V] in funzione delle soglie ideali Ti [V] (tutte le
acquisizioni)
168
Andamento del rumore, inteso come differenza tra il segnale analogico convertito e
quello di ingresso (prima acquisizione)
169
Capitolo 8 : caratterizzazione convertitori A/D
170