Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dithering

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[1] Dithering

Messaggioda Foto Utentethermidor » 11 giu 2011, 0:02

IsidoroKZ ha scritto:Facendo dithering sul duty cycle e complicando il filtro si migliora la soluzione.

Non c' entra nulla con l' argomento in oggetto, ma mi piacerebbe saperne di più sul dithering.
Avatar utente
Foto Utentethermidor
73 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 20 apr 2011, 21:25

2
voti

[2] Re: Dithering

Messaggioda Foto UtenteIsidoroKZ » 11 giu 2011, 1:47

Ho tagliato il thread, perche' con questo si andrebbe decisamente fuori tema.

Il dithering, che vuol dire tremolare, tremare, e` una tecnica di aggiungere del rumore a un segnale per migliorarne la rappresentazione in presenza di sistemi che hanno una soglia o una quantizzazione. Con il termine dithering si possono indicare svariate tecniche, anche se normalmente lo si applica alla conversione analogico digitale.

Una forma di dithering e` ad esempio quando si picchietta su un manometro (o sull'altimetro di un aereo) per "scollare" il meccanismo che potrebbe avere degli attriti di primo distacco che rendono meno precisa la misura. Alcuni strumenti aeronautici, proprio per evitare questo fenomeno di incollamento, avevano un motorino con una massa eccentrica che faceva vibrare lo strumento, migliorandone la risoluzione.

Altra forma di dithering era quella che avevo in mente per questa applicazione, usata pero` nella conversione digitale analogico.

Quella piu` comune invece e` nella conversione analogica digitale. Quando si converte un segnale, il convertitore AD ne classifica l'ampiezza in una di diverse "fasce" di ampiezza, ognuna delle quali corrisponde a un numero. Supponiamo che ci siano 1000 fasce su una tensione di fondoscala di 1V (a fare i pignoli dovrebbe essere da 0V a 1.001V).
Questo vuol dire che ogni fascia e` ampia 1mV.

Se si ha un segnale di valore 43.2mV, questo viene convertito nel 43-esimo intervallo (il primo e` l'intervallo zeresimo :)). Anche la tensione di 43.8mV e` convertito nello stesso intervallo. Tutto le volte che si ha la tensione di 43.2mV comunque finisce sempre rappresentata dal numero 43. Se poi questo segnale e` praticamente costante, ci sara` una lunga sequenza di numeri tutti uguali.

Se invece si applica un dither, si somma al segnale di ingresso un segnale casuale, in pratica un rumore, di ampiezza di circa 1mV. Succede allora che ogni ampiezza di segnale convertita potrebbe anche essere rappresentata da due valori diversi, a seconda dell'ampiezza del rumore.
Supponiamo ad esempio che l'ampiezza del rumore vada da 0 a 1mV, sommata alla tensione di 43.2mV di prima da` origine a una tensione che va da 43.2mV, quando il rumore ha valore 0V fino a 44.2mV.

Questo segnale con aggiunto il rumore viene convertito per lo piu` come numero 43, ma circa il 20% delle volte viene convertito come 44. Questo in media rappresenta meglio il valore 43.2mV. In pratica il rumore di quantizzazione, il rumore di dire 43.2mV va sempre nel numero 43, viene ridotto, a patto di avere tanti campioni anche non consecutivi di quella ampiezza. Lo svantaggio e` che comunque si aggiunge del rumore, ma questo rumore e` in alta frequenza e comunque lo si sente meno del rumore di quantizzazione, e in alcuni casi lo si puo` ridurre con filtraggi numerici.

Questo detto alla buona, senza disegni e senza pensarci troppo!

Poi ci sarebbe un'altra tecnica, detta sliding scale, che pero` serve per togliere le non linearita` dei convertitori AD, ma non viene usata in campo audio, e` invece usata in campo di fisica nucleare. Inventata quasi 50 anni fa dal prof. Emilio Gatti, detto affettuosamente "micione" :-)
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

0
voti

[3] Re: Dithering

Messaggioda Foto Utentethermidor » 11 giu 2011, 14:55

Beh intanto grazie per l' interessamento, poi come sempre per la competenza.
Per quello che riguarda la conversioe A/D immaginavo che servisse a quello, immaginavo non lo sapevo con certezza, ma per averne sentito parlare...
Mi piacerebbe capire l' applicazione inversa cioè sul D/A, dove può migliorare le prestazioni?
E di che ampiezza dovrebbe essere il numero casuale da generare?
Avatar utente
Foto Utentethermidor
73 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 20 apr 2011, 21:25

1
voti

[4] Re: Dithering

Messaggioda Foto UtenteIsidoroKZ » 11 giu 2011, 19:44

Nella conversione D/A puoi fare in questo modo. Supponi di dover convertire in analogico il numero 43.2. I convertitori D/A convertono numeri interi, quindi o converti 43 oppure 44. Se si vuole approssimare anche il "virgola due" si puo` convertire 4 volte il numero 43 e una volta 44, ripetendo ciclicamente l'operazione, quindi 43 43 43 43 44 43 43 43 43 44... questo pero` da` un pattern periodico, in pratica si genera un segnale spurio a frequenza pari a un quinto della frequenza di conversione, e relative armoniche.

Quello che si puo` fare e` sommare un numero casuale "reale" compreso fra 0 e 1 e convertire il risultato dopo averlo troncato. Se il numero casuale e` ad esempio 0.4583 quando lo sommi al valore da convertire viene 43.6583 e quindi si manda al convertitore 43. Se il numero casuare invece e` 0.8495, quando sommi al valore che vuoi convertire ottieni 44.0495 e mandi 44 al convertitore. Questo capita in media nel 20% dei casi, ma in modo non periodico, all'uscita si ha rumore invece che distorsione, e questo e` preferibile sia in sistemi audio che immagine.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

1
voti

[5] Re: Dithering

Messaggioda Foto Utentethermidor » 11 giu 2011, 23:10

Grazie per la risposta.
Naturalmente tu sai che impiego ne voglio fare, ma te lo dico lo stesso.
In pratica voglio convertire un dato MIDI (un valore che va da 1 a 127), in un valore esponenziale e generare la tensione mediante il PWM (tutto è fatto tramite un PIC, risoluzione 10 bit).
Mi sono quindi creato una tabella di valori dell' ottava superiore (le altre vengono ricavate dividendo con dei partitori la tensione filtrata del PWM), siccome voglio includere il pitch-bend, ho diviso gli intervalli tra le note in 32, quindi ogni valore si incrementa di 2^0,03125/12 (mannaggia devo imparare a usare LaTex).
Ovviamente molti valori si ripetono e usando gli interi molti non saranno proprio quelli ideali, è probabile che vada anche già bene così, lo hanno già fatto molte case costruttrici di synth.

Per riassumere, sotto interrupt dovrei rinfrescare il dato di uscita, aggiornandolo ad esempio generando un numero casuale a 8, 16 quanti bit voglio, e poi ad utilizzando solo il bit più alto o il carry.
Credo sia questa la strada da seguire, sbaglio?

Curiosità, da dove viene fuori il 20%? E' statistico?
Avatar utente
Foto Utentethermidor
73 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 20 apr 2011, 21:25

0
voti

[6] Re: Dithering

Messaggioda Foto UtenteIsidoroKZ » 12 giu 2011, 0:07

Il resto della risposta richiede che ci pensi.

Questa invece e` rapido. Il 20% arriva dal VIRGOLA 2 del numero da convertire. Se avessi voluto convertire 43.74 avrei voluto che in media il 74% dei numeri che sono mandati al D/A siano 44 e il restante 26% siano 43.

Per la tua conversione rischi di generare troppo rumore di fase, ci devo pensare su un pochino, con dei numeri.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

0
voti

[7] Re: Dithering

Messaggioda Foto Utentethermidor » 12 giu 2011, 14:09

Accidenti, me lo facevo più semplice.
In pratica io ho una tabella che parte da 511,5 e arriva a 1023 (una ottava), gli incrementi sono appunto quelli che ti ho detto, il tutto comprende 384 valori.
Esempio 511,5 lo step successivo sarà 512,42 approssimato 512 il primo 512 il secondo (approssimazioni fatte con Excel).
Questi valori convertiti in tensione comandano i VCO e il VCF, probabilmente a orecchio non ti accorgi della differenza, ma mi interesserebbe, è un hobby un divertimento, sperimentare una soluzione che possa migliorare il risultato finale (anche perché verrebbe realizzata via software, senza toccare il circuito).

Ma non voglio farti venire il mal di testa a pensarci, ripeto è solo uno sfizio.
Avatar utente
Foto Utentethermidor
73 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 20 apr 2011, 21:25

2
voti

[8] Re: Dithering

Messaggioda Foto UtenteIsidoroKZ » 18 giu 2011, 8:48

Provo a dire qualcosa a ruota libera, mi mandano dei dati per riuscire a capire bene il problema.
Ad esempio lo prevedi per eseguire un file midi registrato, o anche suonato in tempo reale? Nel primo caso i ritardi non contano molto, nel secondo caso invece devono essere limitati.

Poi non so che cosa capita quando non viene suonata nessuna nota, che cosa esce dall'A/D e dal VCO? Quando si passa da una nota all'altra si applica al VCO un gradino di tensione? Se si suona in staccato, e quindi bisogna fare una pausa fra due note consecutive, come si fa?

La ragione di queste domande e` che con un dither bisogna mettere un filtro sull'uscita del D/A e questo impiega del tempo ad andare a regime, specie dopo i salti, per cui bisognerebbe silenziare il suono in attesa che la tensione vada a regime. Ci sono tecniche per accelerare questa transizione, ma richiedono qualche modifica allo hardware.

Supponiamo di voler aggiungere una cifra decimale alla risoluzione del D/A, cioe` di poter mettere in uscita un numero tipo 512.4: dobbiamo in media buttare fuori 4 volte il valore 513 e 6 volte il valore 512. Al numero 512.4 sommiamo un numero casuale che va da 0 a 0.9 e del risultato si butta via la parte decimale.

E adesso cominciano i problemi. Supponiamo che vogliamo andare a regime entro un decimo di bit (di unita`) in 5ms e avere un ripple sull'uscita minore di 0.1 unita`. Supponiamo anche che il filtro sia inizialmente carico al valore piu` basso in uscita, cioe` che il filtro sia gia` settato alla tensione corrispondente a 512 (questo si puo` fare cambiando lo hardware) e che l'uscita del D/A commuti fra due valori contigui (es 512-513).

Con questi numeri l'equazione per trovare la costante di tempo del filtro del primo ordine e`

0.1=\exp(-5\text{ms}/\tau) da cui \tau=2.2\,\text{ms} che vuol dire una frequenza di taglio di circa 73 Hz. Adesso la parte difficile, trovare la frequenza a cui il D/A deve mandare fuori la sequenza di due numeri casuali 512/513 che mediati danno 512.4.

In realta` i numeri non possono proprio essere casuali, altrimenti potremmo avere una sequenza lunghissima di 512, e prima che arrivi il 513 la nota e` gia` finita. Supponiamo che la sequenza piu` lunga di numeri uguali possa essere di 20 campioni. Questo nel caso peggiore deve provocare una variazione massima di 0.1 nell'uscita.

Per trovare ogni quanto bisogna buttare fuori il successivo numero, se non ho preso troppe cantonate, dovrebbe essere qualcosa del tipo

.1=1-\exp (-20T_{ck}/2.1\text{ms})} che da` un periodo di 11us, cioe` la frequenza di rinfresco dovrebbe essere di 90kHz. Con un processore che non faccia troppe altre cose si puo` fare. Con un filtro del secondo ordine, anche passivo, si possono migliorare questi numeri.

Infine lo schema per fare un filtro che nei salti grandi non perda tempo ad arrivare al valore finale, si puo` fare una cosa del genere:


L'interruttore in parallelo alla resistenza commuta Fast/Slow* per il filtro.

Se una cosa del genere puo` andare bene, si possono fare pensate piu` precise, magari anche chiamando un esperto di rumore a fare i conti sul serio :)

FORSE con questo circuito si puo` fare a meno del silenziamento fra una nota e l'altra, ma bisogna essere precisi con il segnale di fast/slow. In modo fast si puo` fare un salto di una ottava con precisione finale di un decimo di unita` in un paio di decimi di millisecondo.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

0
voti

[9] Re: Dithering

Messaggioda Foto Utentethermidor » 18 giu 2011, 21:38

Accidenti Isidoro, dovrei pagare per una lezione del genere.
Considerando che uso un PIC che va a 20MHz, il rinfresco del PWM è a circa 20kHz, direi che non è fattibile.
Userò il sistema che hanno già sperimentato sui synth Prophet, cioè mi tengo la tabellina.
Se non ha dato problemi a loro, spero non ne dia neanche a me.

Ad ogni modo ti ringrazio lo stesso perché una spiegazione così chiara non la avevo mai avuta.
Avatar utente
Foto Utentethermidor
73 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 20 apr 2011, 21:25

0
voti

[10] Re: Dithering

Messaggioda Foto UtenteIsidoroKZ » 18 giu 2011, 21:43

PWM? fai il convertitore D/A con PWM e poi filtro? Posta lo schema e racconta come funziona il silenzio e il salto da una nota all'altra.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 48 ospiti