Foobar2000: i resampler

Il canale YouTube ha assorbito più energie di quanto immaginassi ma penso sia anche perché, finalmente, ho avuto una buona scusa per riprendere i mano reflex, treppiedi e attrezzatura varia rimasta abbandonata nell’armadio in questi mesi di domiciliari causa Covid.

Ci eravamo lasciati parlando di supporti analogici da un lato, in ottica di parlare in modo approfondito dei cavi per l’impianto, e di cosa sono i resampler e, soprattutto, a cosa servono dall’altro.

Oggi riprenderò proprio questo secondo argomento, i resampler, e lo contestualizzerò in Foobar2000.

Partiamo da una piccola precisazione: Foobar2000 supporta pressoché infiniti componenti adibiti al resampling cui si può accedere direttamente dalla pagina dedicata ai plugin dal sito di Foobar2000 stesso.

Personalmente ho sperimentato solamente alcuni di quelli presenti nell’elenco. Nello specifico:

  • SRC, o Secret Rabbit Code: uno dei più potenti resampler disponibili in termini di qualità ottenibile ma tendenzialmente pesante se non configurato correttamente. Altra pecca: lavora “a numeri interi” e quindi digerisce male i sovracampionamenti non interi.
  • dBpoweramp/SSRC: poco esigente in termini di risorse. Si tratta più che altro di un comodo “downsampler” qualora doveste utilizzare DAC che non supportano frequenze di campionamento elevate. Reputo comunque migliore SRC anche in questa tipologia di utilizzo anche se più esigente. Anche questo resampler è basato sulle librerie di Secret Rabbit Code.
  • PPHS: ottimo resampler per sovracampionamenti interi. Abilitando la modalità “Ultra Mode“, che ne migliora le performance in caso di conversioni da 44.1 kHz a 48 kHz, diventa davvero troppo esigente in termini di risorse di sistema offrendo risultati comunque analoghi a quelli riscontrabili con SRC.
  • SoX: al pari di SRC, leggermente meno impattante in termini di risorse di sistema ma lavora in virgola mobile per cui si trova decisamente a suo agio nella gestione di sovracampionamenti non interi.

Come potete ben vedere ogni componente che ho provato ha dei pro e dei contro. Alcuni lavorano davvero bene con determinate configurazioni ma meno con altre. Alcuni cambiano drasticamente l’impatto sulle risorse impegnate al variare della frequenza di lavoro/target.
Pensare di cambiare il resampler ogni volta che cambia la frequenza di lavoro è impensabile e la soluzione dei resampler multipli attivi, con funzionamento selettivo, è attuabile ma decisamente scomoda.

Ricordo che la mia idea è quella di avere un PC che fa tutto da solo, comandato dal tablet senza bisogno di modificare alcunché in termini di impostazioni e preferenze di riproduzione.

Dopo un po’ di peripezie ho finalmente trovato il componente adatto alle mie esigenze: Resampler-V.

Di fatto si tratta di un componente che unisce i vantaggi di SRC e SoX e permette di gestire i due algoritmi in modo indipendente a seconda delle proprie preferenze e delle varie frequenze di lavoro.

In sostanza permette di scegliere:

  • Quale dei due algoritmi utilizzare in base combinazioni di frequenza di lavoro e frequenza di target
  • La tipologia di risposta di fase che si vuole applicare al filtro passa basso
  • La banda passante, ovvero la frequenza di taglio del filtro stesso
  • La pendenza del filtro, ovvero l’entità della banda di taglio
  • L’attenuazione della banda fermata, ovvero quanto il filtro dovrà attenuare le frequenze superiori a quella di taglio.

Di fatto possiamo agire su tutti i parametri dell’algoritmo e andare a personalizzare, praticamente all’infinito, la risposta dello stesso.

Di tratta di operazioni molto semplici, a livelli di intervento lato utente, ma che possono modificare anche radicalmente il suono emesso dal nostro sistema.

Modificando la risposta di fase, ad esempio, gestiremo i cosiddetti “ringing” in caso di segnali impulsivi e la decadenza degli stessi. Possiamo avere un comportamento più secco, e risuonante, piuttosto che un comportamento più morbido ma con qualche coda.

Intervenendo su banda passante/di taglio/fermata possiamo andare a modificare, invece, l’eventuale roll-off desiderato piuttosto che la nettezza dell’intervento del filtro.

Ogni modifica dell’output derivante da queste impostazioni viene rappresentato, live, su due grafici visibili a schermo:

  • il primo, che rappresenta la risposta nel dominio della frequenza del filtro, restituisce le informazioni circa attenuazioni di banda e entità della pendenza di taglio del filtro così come le eventuali spurie presenti a frequenze maggiori.
  • il secondo, invece, rappresenta la risposta nel dominio del tempo e quindi gli effetti a segnali impulsivi.

Si tratta di un componente un po’ complicato, forse, ma decisamente potente e versatile che mi sento di consigliare a tutti quanti.

Il resampling: parliamone – Pt.2

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.