Un DSD player autocostruito Analogico o digitale? LP o CD? Lungi da me l' idea di riattizzare una polemica vecchia e per conto mio sterile. Mi pongo invece un obiettivo preciso: illustrare come esista una "terza via", diversa e probabilmente migliore di entrambe. Supponiamo di voler produrre un CD (o anche un vinile). Dobbiamo naturalmente per prima cosa eseguire una registrazione dell' evento musicale. Per questo utilizzeremo delle apparecchiature oggi in genere di tipo numerico, non analogico - in grado di fornirci il file di dati da memorizzare sul dischetto. Questi dati non sono altro che una sequenza di numeri binari a 16 o 24 bit, cioe' la misura istante per istante del segnale analogico (e' la nota tecnica di codifica PCM). Ogni numero della sequenza rappresenta un campione del segnale, e la frequenza di campionamento (per il CD) e' 44,1KHz. Ma vediamo la cosa piu' in dettaglio: l' apparecchio di registrazione contiene un convertitore analogico/digitale, che in genere e' del tipo cosiddetto "sigma-delta". Questo convertitore funziona producendo un "bitstream" PDM, cioè una sequenza di impulsi codificata "Pulse Density Modulation", cioe' piu' o meno "densa" di impulsi a seconda del livello del segnale analogico da convertire, e con una frequenza di clock elevata, tipicamente 2,8224 Mhz. Ma, per produrre il nostro CD o LP non e' possibile usare il bitstream cosi' com' e' (dati mono-bit a 2,8224 MHz): dobbiamo ricavare da esso dei numeri a 16 (o 24) bit con frequenza di campionamento 44.1KHz, perché questo e' il contenuto di un CD audio (dati PCM). A questo scopo, viene eseguita sul bitstream una operazione di signal processing, una sorta di filtraggio digitale, chiamato "decimazione". Si ottengono cosi' nuovi campioni, aventi le caratteristiche richieste, non piu' quindi mono-bit, ma a 16/24 bit con 44.1Kz come frequenza di campionamento. E fino qui siamo alla fase di registrazione, di preparazione del supporto. Veniamo alla fase di riproduzione, al momento in cui avviamo il CD player o il giradischi per gli amanti dell' analogico: notiamo che per il vinile, la testina del giradischi e' in grado di estrarre il segnale audio applicando una singola legge dell' elettromagnetismo (lo stesso principio della dinamo di una bicicletta): qualcosa che potremmo definire "semplice". Nel caso del CD player il discorso si fa più complicato: abbiamo bisogno di un convertitore, questa volta digitale/analogico, un DAC quindi, per ricavare il segnale musicale dai dati numerici PCM presenti sul dischetto. Attualmente anche per i DAC la tecnologia predominate e' quella sigma-delta: i dati subiscono un processo di sovracampionamento - filtraggio digitale - modulazione, e filtraggio analogico finale. Ora, fate mente locale sulla quantita' di elaborazione che ha subito il segnale dal
momento della registrazione: troviamo modulazione sigma-delta, decimazione, oversampling, filtraggi digitali.. Si tratta di operazioni di digital signal processing che la teoria dice non impattare negativamente sulla informazione contenuta nei dati elaborati. In teoria, appunto. In realta', e' evidente l'impatto sul segnale che ha ad esempio il tipo di filtro digitale utilizzato in un DAC sigma-delta, specialmente sulla riproduzione dei transienti. Consiglio a questo proposito una interessante lettura: http://www.wolfsonmicro.com/documents/uploads/misc/en/ultra_high_performance_d AC_whitepaper.pdf E' ragionevole quindi pensare che una semplificazione del processo di registrazione / riproduzione non possa che portare a dei benefici in termini qualitativi. Ebbene, le stesse societa' che hanno creato il CD-Audio, in tempi abbastanza recenti hanno proposto un nuovo standard, che alla ricerca di una superiore qualita' sonora, si muove proprio nel senso della semplificazione del percorso del segnale. Come funziona: abbiamo detto che al momento di registrare il nostro brano musicale, il convertitore A/D produce un bitstream di dati mono-bit a 2,8224 Mhz di clock, destinato a essere trasformato in PCM. Supponiamo invece di interrompere qui il procedimento, e registrare direttamente in un file il bitstream. Avremo una sequenza binaria, una lunga serie di '0' e '1' con frequenza di clock pari a 64 x 44100 (=2822400). Ora, la cosa interessante e' che basta far passare questo bitstream in un semplice filtro passa- basso per ottenere il nostro segnale musicale. Si elimina cosi' tutta una serie di elaborazioni, in parte fatte in registrazione e parte in riproduzione (decimazione, oversampling, filtraggio digitale, modulazioni ecc.). Lo standard definisce questa codifica "Direct-Stream Digital" (DSD) e rappresenta il contenuto dei SACD (Super Audio CD). Ora, sappiamo che il SACD ha avuto alterne fortune - del resto e' noto che non sempre e' il prodotto tecnicamente superiore a imporsi sul mercato ma quello che piu' importa e' che oggi e' possibile procurarsi musica liquida in questo formato. Alcune piccole case discografiche infatti permettono il download di brani musicali in formato DSD, oltre che nei classici.wav,.mp3, FLAC ecc. Di solito hanno il suffisso.dff. Esistono anche delle varianti, ad es. i files.dsf. Naturalmente come sempre c' e' un prezzo da pagare per la qualita', e uno di questi e' la dimensione dei files DSD, specie se raffrontati agli altri formati : oltre 41Mbytes per 1 minuto di musica stereo. Un' altro problema posto dal sistema e' la difficolta' di elaborare il segnale: non si tratta di dati PCM, e questo pone problemi in sede di mixaggio ecc. Questo fa si' che gran parte dei files DSD disponibili non siano "nativi", ma siano invece ottenuti per post-processing di un file PCM, e quindi con caratteristiche leggermente inferiori.
Costruiamo un DSD player Come abbiamo visto, i files in formato DSD non contengono dati numerici PCM come avviene per il classico CD audio, i files.wav ecc. Per questo parlavo all' inizio di un sistema differente dal consueto analogico e digitale. Nel caso di un contenuto stereo, lo stream binario DSD che rappresenta la sequenza di impulsi e' multiplexato per canale in questo modo: <8bit CH1><8bit CH2><8bit CH1><8bit CH2><8bit CH1>... Come avviene anche per i file.wav, i dati veri e propri sono preceduti da un "preambolo" contenente varie informazioni ad es. dimensioni, numero di canali, dati compressi/noncompressi ecc. Ho realizzato un piccolo prototipo (*) per sperimentare sui files DSD, composto da una interfaccia USB (FTDI FT245R), una logica programmabile (Altera EP2C5T144) e un filtro passa-basso. Possiamo trasmettergli brani residenti sul PC, tramite interfaccia USB, e avremo in uscita un segnale audio stereo, adatto all' ingresso di un qualsiasi amplificatore di potenza. Il materiale necessario e' facilmente reperibile, le due schedine FPGA e FT245 sono disponibili off-the-shelf in un noto sito di e-commerce ad un costo totale di 22-25 Euro, comprese le spese di spedizione. (*) ispirato in parte all' unica realizzazione simile che ho trovato in rete (https://sites.google.com/site/koonaudioprojects): nel mio caso pero', non viene utilizzato il dispositivo FTDI FT232H (interfaccia USB del tipo "high-speed"), ma il piu' economico e facilmente reperibile full speed FT245R la memoria FIFO e' integrata nel FPGA la serializzazione necessaria alla creazione del bitstream viene effettuata "hardware" nel FPGA di conseguenza diversa e' anche la struttura del software di comunicazione con il PC
La gestione del protocollo USB senz'altro complesso - e' svolta dall' integrato FT245R. Questo integrato ha in ingresso il collegamento USB proveniente dal PC e mette a disposizione una interfaccia di uscita a 8 bit verso il FPGA. Il clock di sistema e' derivato dall' oscillatore a quarzo a 50 MHz presente sulla schedina FPGA. Il dispositivo FPGA contiene la logica di controllo del FT245R, una memoria FIFO e il circuito di generazione dei due bitstream L/R in uscita.
La memoria FIFO (FirstIn-FirstOut) permette di assorbire le instabilita' nella comunicazione sul canale USB, disaccoppiando i domini di clock. Questo sistema elimina il possibile jitter dovuto al canale USB: il clock del bistream in uscita e' quello derivato dall'oscillatore a quarzo. Riguardo al problema del jitter negli USB-DAC, molto si e' scritto. Come e' noto, gli USB DAC in genere vengono visti dal sistema operativo come appartenenti alla classe audio : per essi viene attivata la trasmissione USB cosiddetta isocrona, prevista per lo streaming audio. Questa a sua volta può essere sincrona, asincrona o adattativa, con prestazioni piu' o meno elevate riguardo al jitter. La questione non e' semplice, essendo lo USB un sistema a pacchetti. Ogni millisecondo il PC trasmette un pacchetto di dati: ora, se la frequenza di campionamento e' 48Khz e avremo pacchetti di 48 bit, ma per i 44.1Khz abbiamo gia' una complicazione. Inoltre, quale e' la stabilita' del clock a 1 ms generato dal computer host? Nel nostro caso si risolve il problema alla radice con una memoria FIFO di una discreta dimensione. La FIFO memory nel nostro caso e' comunque essenziale anche per il fatto che il chip FT245R non funziona in modalita' Audio Class ma Bulk : vedremo che per questo motivo, dovremo impiegare sul PC un programma player sviluppato ad hoc. Le uscite bitstream left/right vanno a un semplice filtro RC passivo, all' uscita del quale e' prelevabile il segnale audio per essere amplificato.
Come abbiamo visto infatti, basta far passare il bitstream a 2.8224 MHz in un filtro lowpass, per ottenere l' audio in uscita: niente piu' oversampling, filtri digitali, modulatore sigma-delta. Potremmo dire che questo e' il nostro DAC! Risposta in frequenza (e fase) del filtro (su un carico di 47KOhm ): Come si vede oltre a essere estremamente semplice (resistenza/condensatore), presenta una frequenza di taglio ben distanziata dalla banda audio ( i -3dB sono a oltre 40KHz). (So che qualcuno potrebbe dubitare che l'unica elaborazione necessaria sia questa: a questi consiglio di leggere attentamente i datasheet di alcuni convertitori disponibili sul mercato, ad es. Burr-Brown DSD1792 o DSD1793. Ci si puo' comunque divertire a sperimentare gli infiniti tipi di filtro possibili).
Questo e' l' aspetto del segnale il bitstream prima del filtro:
Output: sinusoide a 1KHz Come si vede il rapporto segnale/rumore ottenuto con il semplicissimo filtro utilizzato non e' eccezionale, ma siccome trovo molto soddisfacente il risultato all' ascolto, personalmente non vedo la necessita' di complicarlo (si potrebbe anche abbassare l' impedenza di uscita verso l' amplificatore, ma io insisto sulla filosofia minimalista del progettino). La THD e' sicuramente sotto lo 0.1%, anche considerando l' uso di strumentazione di misura non professionale.
Sul PC Abbiamo accennato al fatto che non e' possibile utilizzare un programma player general purpose per trasmettere i files al nostro prototipo: i programmi pensati per gestire integrati USB-DAC Audio Class semplicemente non vedono il chip FT245R. Grazie alle librerie messe a disposizione sul sito FTDI non e' pero' difficile scrivere un piccolo programma adatto allo scopo (nel mio caso ho utilizzato il compilatore "free" MinGW + FLTK). Il software e' stato provato su due sistemi Windows XP (Pentium 4, 2.8 e 3.0 Ghz) e su Windows 7 ( Core i5, 2.5GHz). Un solo inconveniente: a seconda delle prestazioni del PC, nel caso di contemporaneo uso del PC per altre applicazioni, le dimensioni della FIFO realizzabile nel FPGA a basso costo utilizzato possono non essere sufficienti: in questo caso la soluzione e' incrementare la priorita' assegnata nel sistema operativo del PC al programma "DSD USB Audio".
Utilizziamolo ora con: un Media Player DSD Mantenendo la linea low-cost, possiamo costruire un media player fan-less e di minime dimensioni e consumo. Come? Sul mercato dell' usato informatico in rete e' disponibile una vasta scelta di piccoli computers, tipicamente senza hard-disk, i cosiddetti thin-clients. Quello che vedete qui sotto in foto e' costato circa 15 Euro + spese postali. In questo caso, il thin-client ha alimentatore da rete incorporato. Sul pannello frontale e' presente una comoda presa USB, altre due sono sul retro. Niente impedisce naturalmente di collegarci un qualsiasi DAC USB del mercato o perche' no, autocostruito.
Come si vede, il livello di costruzione e' ottimo. L' apparecchio dispone all' interno anche di una memoria Compact Flash. Ho utilizzato questa schedina CF per l' installazione del sistema operativo: si presta molto bene una particolare distribuzione Linux, pensata per risiedere su una chiavetta USB, Puppy Linux. Xhippo, un' interfaccia grafica per media-players, e' utilizzato in combinazione col mio programma, questa volta in versione Linux e a linea di comando.
E' possibile evitare di collegare monitor e tastiera, telecomandando il tutto per mezzo di un collegamento wi-fi. Conclusioni Devo dire che il risultato finale e' soddisfacente: in uscita dal filtro analogico troviamo un segnale di qualita' sorprendente. Ascoltando uno dei brani demo che sono liberamente scaricabili dal sito della casa discografica 2L (http://www.2l.no/hires/index.html), risulta quasi incredibile che da un hardware minimo ed economico come questo si possa ottenere un risultato di livello cosi' buono. Totale assenza di fatica di ascolto, grande naturalezza. Certamente il formato DSD ha delle carte da giocare, riguardo poi all' "ingombro" dei files in termini di Mbytes, bisogna considerare che solo pochi anni fa un hard-disk da 40 Gbytes era considerato di grande capacita': la tecnologia e i termini di paragone cambiano velocemente. Per chi volesse cimentarsi nella realizzazione, qui diy_dsd_player.zip trovate cablaggio, file per la configurazione del FPGA e il software (per Puppy Linux 5.28). Caricate la directory con il software su una chiavetta USB e attivate Xhippo. Nel file test.zip c'e' un segnale di prova sinusoidale. Attenzione: non posso garantire il successo, si tratta di un esperimento non di un prodotto commerciale! Autore: Gianfranco Meneghetti meneghettig @ alice.it