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`

da cui

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

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.