Return-to-zero shift register FIRDAC

Hi Marcel,

Thank very much you for your considered reply.

IMHO, the main issue at this point is still noise, rather than subtleties of filtering (although that could change if there is some progress on noise).

Somehow or other, IMHO and IME low level information is getting buried in noise (at least insofar as we can tell using the electrostatic speakers and other system components here, and comparing relative to PCM2DSD v4 firmware, and or relative to HQ Player).

Up to you if you think looking for coding issues or if trying higher order dither techniques might might be the first choice to taka a look at.

Also if nothing you try works, then I might ask your advice on implementing a search a little outside of nonsubtractive dither theory. I would be willing to try it, I think, but my FPGA programming knowledge is much more on the book learning side rather than practical experience. Why outside of theory? Its because many audiophiles seem willing to give up a little on distortion measurements in order to get a little more of what they find they care about more, sound stage.

Best,
Mark
 
Oops! Sorry about some typos above. Sometimes I am semi-dyslexic in terms of word order or word omissions (in case anyone hasn't noticed). I type something and don't see the error too late to fix it. Its not like I don't make an effort to proofread. Its more like I read back what I think I wrote rather than the words on the page.
 
  • Like
Reactions: Hierfi
@PJotr25 gave me permission to post the measurements he made using a PCM2DSD board running my topLX9.bit configuration file version 1.2 and the RTZ shift register DAC. The DAC was clocked by the master clock, not by the bit clock output of the PCM2DSD board.

-10 dBFS, 48 kHz input sample rate:

-10dBFS_48k_RTZ.jpg


-10 dBFS, 96 kHz:
-10dBFS_96k_RTZ.jpg


-10 dBFS, 192 kHz:
-10dBFS_192k_RTZ.jpg


-60 dBFS, 48 kHz:
-60dBFS_48k_RTZ.jpg


-60 dBFS, 96 kHz:
-60dBFS_96k_RTZ.jpg


-60 dBFS, 192 kHz:
-60dBFS_192k_RTZ.jpg


The increase of the noise around 20 kHz is due to shaped quantization noise.
 
Do we know how it compares to @PJotr25 v4 firmware measured the same way?

Also, how does it look with no test tone? How about with a different frequency test tone? Is a multi-tone test possible there?

The two pieces of firmware sound different for sure in terms of low-level blurred-together sound, as verus each instrument sounding distinct, separate, and independent from other instruments and or voices (what some people refer to as "closed in" versus "open" sound - referring to the perceived space between the instruments). Therefore, I would expect comparative measurements to look different in some way (unless perhaps the difference is entirely non-PSS).
 
Last edited:
configuration file version 1.2

PJotr25 confirmed that the graphs look the same for version 1.3. The only difference between 1.2 and 1.3 is that 1.2 uses sums and differences of uniformly distributed random signals for dithering left and right, while 1.3 uses different random signals for the two channels (making left and right dither statistically independent, to the extent possible with pseudorandom noise).
 
Regarding the proposal of post #3660 step 1:

I spent two evenings checking the probability distributions of the dithered quantization errors of the main quantizer and an auxiliary quantizer (needed to keep the internal wordlengths finite) in each sigma-delta modulator. For some reason I got a wrong distribution for the main quantizers, but after hours of debugging, it turned out to be an error in the simulation testbench. I was looking at the probability distributions of the dither rather than of the dithered quantization error. For the rounding after the FIR interpolation filter, I only had a very careful look at the Verilog code (it's much more straightforward than what I did in the sigma-delta modulator anyway).

As far as I'm concerned, this concludes step 1.
 
  • Thank You
Reactions: Markw4
Did you figured out whats going on with ENOB? I have similar bad result on direct digital power dac even 2 bits worse than your measurements. In my case I will need to measure by two canal amanero out and post buffer dsd out and compare for where is missing 10++ bits, that might be an dsd input problem e.g. not acceptable capacitive load on amanero out, or modulation problem because pcm2dsd didn't convert sine wave to dsd in multitone corectly (??).
 
Last edited:
When I was working on dithering, I noticed that the more dithering, the smaller the harmonics (in simple terms). But if there is too much dithering, the sound loses quality, even though the harmonics are low and the measurements look very good.
That's why it's so important to find the right level of dithering so as not to lose sound quality. It's very difficult and time-consuming.

For me this is information that the harmonics contain some information about the sound (to simplify).
 
  • Like
Reactions: rockies914
That makes no sense to me if it were the soft passages that sounded more musical with less dither, and it makes perfect sense to me if it were the loud passages that sounded more musical with less dither.

The harmonics are really frequency-modulated idle tones. When the carrier frequency is zero (no offset) and the signal is a sine wave, its spectral components happen to fall at harmonics of the signal frequency, see post #3265, https://www.diyaudio.com/community/threads/return-to-zero-shift-register-firdac.379406/post-7686002 It seems hard to believe that soft tones that get frequency modulated by the music would sound musical and that anyone would miss them if they are not there.

However, a single-bit sigma-delta modulator has too few quantization levels to dither the quantizer according to theory. The stronger you make the dither, the less room there is for the signal. Maybe too large dither just killed the headroom for intersample overshoots, or even caused occasional integrator clipping for large signals without such overshoots.

To a much lesser extent, the same applies to my modulator. There is enough headroom for the signal and 2 LSB peak-peak triangular dither, but extending the dither to higher orders (that is, the sum of n 1 LSB peak-peak uniformly distributed random signals with n > 2) will eventually kill the headroom for intersample overs. I still have to check how far I can go. Maybe I can even make it switchable from n = 1 to some suitable upper limit.
 
IIRC, there is a warning in the HQ Player manual to turn down the volume some when converting PCM to DSD, as clipping or distortion can occur otherwise. They don't seem to know exactly how much it needs to be turned down though. The volume knob only is settable in PCM mode, so you have to turn it down a little before switching to DSD mode.

Regarding my understanding of the listening tests I did for PJotr25, it wasn't clear to me if he was adjusting the dither level, or some other signal level relative to the dither. In any case, IIRC the adjustment increments were quite small, maybe a small fraction of a dB. However, the audible differences resulting from those small changes were quite varied. It just turned out there were a couple of sweet spots where it sounded not too wrong. Some of the other small changes sounded quite wrong, some of them maybe like a wha-wha pedal was inserted in the signal chain (a sharply resonant boost filter sound).
 
Last edited:
For me this is information that the harmonics contain some information about the sound (to simplify).
I wonder if that wasn't coincidental? Maybe the sweet spots just happed to occur at points where the apparent harmonics were not fully minimized? After all, not everything audible shows up very well in these types of measurements. At least I am inclined to concur with ESS on that basic point.
 
Last edited:
I've tried to keep track of that in post #1. Quoting post #1:

"see post #1931, https://www.diyaudio.com/community/threads/return-to-zero-shift-register-firdac.379406/post-7483396 , for the latest BOM and schematics, and see post #241 https://www.diyaudio.com/community/threads/return-to-zero-shift-register-firdac.379406/post-7175580 and its links for the latest layouts. The latest schematic versions are DAC3_10_holdtimefix.pdf and DAC3filter_6.pdf. Versions 9 and 10 of the DAC layout (with or without hold time fix - the fix only consists of four resistors with updated values) are meant for 0.21 mm PR7628 prepreg, the earlier versions for 0.36 mm."

This all applies to my versions, not to the variants that several people made. If a bit of DC offset doesn't matter, you can use Ray's simplified filter board instead of my DAC3filter_6:

"Skipping the last filter stage if DC offset doesn't matter:

You can skip the last filter stage if some DC offset is acceptable, for example because the offset is blocked somewhere further down the signal chain. On the filter board, you can then skip U6 and U13 with the surrounding components and connect the outputs of U5 and U12 straight to the 49.9 ohm resistors. Ray (nautibuoy) made filter boards without the last stage, see posts from #647, https://www.diyaudio.com/community/threads/return-to-zero-shift-register-firdac.379406/post-7365893 "