The objective is to compare different DAC chips and topologies.
A local oscillator and synchronous counter provide all timing and export clocks to slave a CDP or PC sound card. Analog output via passive I/V, transformer, and deemphasis and reconstruction filters. Digital to analog conversion is non-oversampled, 2x or 4x oversampled with null insertion and/or analog interpolation, or 8x oversampled with digital interpolation. There is also a hybrid mode that combines 2x and 8x oversampling.
Additional features and options include:
· 256Fs or 384Fs system clock.
· Slow or fast digital filter roll-off.
· Input to the clock divider from MCLK instead of the oscillator for occasional use with unsynced digital sources.
· S/PDIF input via transformer-coupled coax or via twisted pair using the same differential transceivers that transmit the CDP clock; i.e., one Cat5 cable between the DAC and CDP.
· The sample position within the sub-frame is optimized for best sound. Right-shifting the sample reduces the maximum and RMS sample value, which reduces the maximum and RMS output current of the DAC. Right shifting also reduces the maximum and RMS step size, which reduces di/dt and DAC settling time.
· With different DAC and fan-out modules almost any kind or number of DAC chips can be evaluated.
I’ve designed two DAC modules so far: One uses four PCM1704K that can be configured as two parallel or differential pairs and the other uses two PCM1794A that can be configured as two singles or one pair. Each DAC module has a corresponding fan-out module: 1:16 and 1:4. Summing the output of many parallel DACs improves S/N, dynamics, and reveals more low-level detail. The observed effect is greater than the theoretical +3dB S/N per doubling because human hearing and perception are not simple linear processes. This technique is common practice in astrophotography.
The project started with the idea of comparing NOS with 8x digital interpolation using four PCM1704 and a DF1704. It then grew in successive stages:
· Added shift register to time-align the left and right sub-frames. (This is an issue only when using mono DAC chips.)
· Added shift register to optimize sample position in the sub-frame.
· Added 2x OS with null insertion. (This is the simplest form of OS and only required the addition of a mux.)
· Added fan-out for 16 PCM1704 modules.
· Added 2x OS with analog interpolation. (Requires more shift registers and twice as many DAC chips as null insertion.)
· Added 4x OS with null insertion or analog interpolation. (Requires more shift registers and twice as many DAC chips as 2x OS.)
· Added PCM1794 module. (Required a different interface to include signals for system clock, deemphasis, and reset.)
· Added fan-out for 4 PCM1794 modules.
· Added hybrid 2x & 8x OS. (This was lurking in the design and only needed a unique 2x word clock to make it usable.)
I achieved 4x oversampling by double pumping the DIR and demultiplexing the stereo data stream.
Double pumping the DIR means running the BCK and WCK inputs at twice the incoming sample rate. The DIR responds by outputting each sample frame twice. This requires a DIR configured in slave mode and a source that is also slaved to the DAC clock otherwise samples may be missed or repeated.
The sample frames coming from the CDP looks like this:
| L1 R1 | L2 R2 | L3 R3 | L4 R4 |
Where Ln and Rn are the left and right samples for frame n. The vertical bars represent the frame boundaries (WCK).
The outgoing frames from the DIR looks like this:
|L1 R1|L1 R1|L2 R2|L2 R2|L3 R3|L3 R3|L4 R4|L4 R4|
That 2x stereo stream is demultiplexed into two mono streams.
The demultiplexed frames look like this:
|L1|L1|L1|L1|L2|L2|L2|L2|L3|L3|L3|L3|L4|L4|L4|L4|
|R1|R1|R1|R1|R2|R2|R2|R2|R3|R3|R3|R3|R4|R4|R4|R4|
With that stream and four DACs per channel, all permutations of NOS, 2x, and 4x OS are possible. (For clarity, the following stream diagrams omit the L/R channel prefix.)
NOS:
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
2x null insertion:
|1|1| | |2|2| | |3|3| | |4|4| | |
|1|1| | |2|2| | |3|3| | |4|4| | |
|1|1| | |2|2| | |3|3| | |4|4| | |
|1|1| | |2|2| | |3|3| | |4|4| | |
2x analog interpolation:
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|0|0|1|1|1|1|2|2|2|2|3|3|3|3|4|4|
|0|0|1|1|1|1|2|2|2|2|3|3|3|3|4|4|
4x null insertion:
|1| | | |2| | | |3| | | |4| | | |
|1| | | |2| | | |3| | | |4| | | |
|1| | | |2| | | |3| | | |4| | | |
|1| | | |2| | | |3| | | |4| | | |
4x analog interpolation:
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
|0|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|
|0|0|1|1|1|1|2|2|2|2|3|3|3|3|4|4|
|0|0|0|1|1|1|1|2|2|2|2|3|3|3|3|4|
Combining null insertion with analog interpolation yields many possible combinations limited only by the multiplexer configuration. Two examples:
|1| |1| |2| |2| |3| |3| |4| |4| |
|1| |1| |2| |2| |3| |3| |4| |4| |
|0| |1| |1| |2| |2| |3| |3| |4| |
|0| |1| |1| |2| |2| |3| |3| |4| |
|1| |1| |2| |2| |3| |3| |4| |4| |
|1|1| | |2|2| | |3|3| | |4|4| | |
|1|1| | |2|2| | |3|3| | |4|4| | |
|1|1|1|1|2|2|2|2|3|3|3|3|4|4|4|4|
The hybrid 2x & 8x mode sends a 2x data stream to each of two PCM1794 chips, which do the 8x digital interpolation.
No interpolation method if perfect. Null insertion attenuates the signal and increases sampling noise. Analog interpolation attenuates the high frequencies. Digital interpolation adds enharmonic ringing to transients and music is full of transients. Perhaps combining 4x null insertion with 4x analog interpolation will be preferable to either one alone because null insertion better approximates the ideal sinc function and provides some high frequency boost.