Nell’articolo precedente ho cercato di chiarire in cosa consiste il resampling di un segnale e del perché, in alcuni casi, questo porti a dei benefici apprezzabili all’ascolto.
Il tutto con l’obiettivo finale di poter parlare dei componenti di resampling installabili in Foobar2000.
Per fare un breve riassunto: un resampler ha il compito di “ricostruire” il maggior numero possibile di informazioni di un segnale, a risoluzione più bassa di quella nominale di lavoro, aumentandone sia la profondità, i bit, che la quantità, la frequenza, del campionamento.
Abbiamo anche visto che, nella realtà dei fatti, un resampler non deve aggiungere assolutamente nulla di nuovo all’informazione iniziale.
Di fatto i “nuovi campionamenti” inseriti dall’algoritmo sono stimati, in modo più o meno approfondito dal punto di vista matematico/statistico, in base a diversi fattori che ne costituiscono le basi operative. Ma quali sono questi fattori? Al di là dell’approccio matematico con cui vengono effettuati i calcoli, che introducono potenzialmente infinite variabili, c’è un elemento davvero imprescindibile per lo sviluppo di un resampler: la massima frequenza prevista per il segnale in uscita.
In base a questo valore i calcoli di stima dei nuovi campioni saranno limitati in termini di “velocità di risposta” del segnale in uscita e, di conseguenza, avremo un’approssimazione tendenzialmente più corretta del segnale originale in ingresso e minori errori di interpolazione/interpretazione.
Come viene fatta questa operazione? La risposta è molto più semplice di quanto si possa immaginare: viene inserito un filtra passa basso, simulato a livello matematico, all’interno dell’algoritmo di ricampionamento.
A livello ideale questo filtro dovrebbe eliminare tutte le frequenze al di sopra del nostro valore di riferimento in modo netto ma la cosa, anche se tecnicamente fattibile, comporta notevoli svantaggi in termini sia di complessità che di corretta implementazione e, di conseguenza, perdite di efficienza del sistema unita a potenziali effetti indesiderati come oscillazioni o sfasamenti molto accentuati per frequenza prossime a quella di taglio e transienti.
Vi invito a guardare questo video di Google, in inglese, che spiega in modo abbastanza chiaro i principi che stanno alla base di un algoritmo di resampling, le difficoltà di corretta implementazione e, soprattutto, gli effetti indesiderati di un errato dimensionamento del filtro o della sua assenza.
Tali effetti collaterali sono anche quelli che si verificano all’interno di quei DAC, inteso come circuito integrato e non necessariamente come dispositivo, che non dispongono di algoritmi avanzati e per cui gli utenti trovano vantaggioso l’utilizzo di un resampler esterno. Sono, ovviamente, anche il motivo per cui molti produttori hanno sviluppato algoritmi di resampling e filtraggio esterni all’IC utilizzato.
Esiste poi, in campo audio, un altro problema non da poco: il rapporto tra la frequenza del segnale in ingresso e la frequenza di lavoro del DAC stesso che non è sempre un valore intero.
Il WM8740 integrato nel mio Rotel RC-1570, ad esempio, lavora alla frequenza di 192 kHz e quando si trova ad operare su segnali a qualità CD, che sono a 44.1 kHz, segue una logica di funzionamento un po’ strana per ovviare al rapporto di 4,35 tra le due frequenze: se il “ritardo di fase” tra il campione in ingresso e il segnale di lavoro è inferiore a 0,5 del rapporto non succede nulla altrimenti esegue un ricampionamento aggiuntivo per riempire il buco; dopo ogni campionamento “dispari” viene verificata l’entità del ritardo di fase e se superiore all’unità il sistema procede ad un riallineamento della fase stessa .
Suona, ed è, abbastanza complicato ma in parole povere funziona più o meno così:
- Il primo sample viene ricampionato 4 volte: 4,35-4=0,35 < 0,5 per cui il quinto campione viene saltato. Uscita in anticipo di fase di 0,65 campioni
- Il secondo sample viene ricampionato 5 volte: (0,35+4,35) – 4 = 0,7 > 0,5 per cui il quinto campionamento viene eseguito. Uscita in anticipo di fase di 0,3 campioni.
- Il terzo sample viene ricampionato 5 volte: (0,7 + 4,35) – 4 = 1,05 > 0,5 per cui il quinto campionamento eseguito e si realizza il riallineamento di fase. Uscita in anticipo di fase di 0,05 campioni.
- Il quarto sample viene ricampionato 4 volte (0,05 + 4,35) – 4 = 0,40 < 0,5 per cui il quinto campione viene saltato. Uscita in anticipo di fase di 0,6 campioni e via così
Questo perché il DAC in questione opera con una sola base dei tempi, una sola frequenza di riferimento, è non è in grado di effettuare correzioni per segnali privi di sincronia intera. Lo stesso procedimento viene, ovviamente, seguito anche per tutte le frequenze multiple di 44.1 kHz con approssimazioni via via meno pesanti all’aumentare della frequenza di campionamento e, quindi, direttamente proporzionali alla diminuzione del rapporto tra frequenza in ingresso e frequenza di lavoro.
Per ovviare a questo problema alcuni DAC utilizzano due oscillatori di riferimento distinti così da rallentare l’effettiva frequenza di lavoro dell’IC ad un multiplo di 44.1 kHz e rendere il ricampionamento sempre intero. Nel caso del Wolfson 8740 la frequenza di lavoro passerebbe da 192kHz a 176,4 kHz senza più bisogno di ricorrere a procedimenti di skip o sfasamenti tra il segnale in ingresso e quello in uscita.
Un’altra tecnica utilizzabile è, invece, quella implementata da ESS sui suoi Sabre e denominata “32-bit HyperStream DAC technology”: la frequenza di lavoro è talmente elevata che skip e sfasamenti hanno entità tale da essere quasi impercettibili. QUASI impercettibili, non assenti.
Nota a margine: il “vecchio” ESS 9018 lavorava e ben 84.672 MHz con resampling dei segnali CD pari a 1920x e un demoltiplicatore interno di frequenza per segnali aventi frequenza multipla di 48 kHz. Accettava, ovviamente, due basi dei tempi distinte per minimizzare ulteriormente gli errori di approssimazione.
Infine, ovviamente, si può evitare che sia il DAC ad occuparsi del resampling ed affidarsi ad algoritmi esterni studiati ad hoc per risolvere i problemi di sincronia.
Finalmente possiamo parlare dei resampler per Foobar2000.
Ma lo faremo nel prossimo appuntamento.
