• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Article: Understanding Digital Audio Measurements

Yes. The last DAC I ever saw that had an interchannel timing difference was in 1985 or so.
I ran into a new-ish USB CODEC from CMEDIA recently that had the channels changing timing by a sample between Left and Right -- randomly sometimes and not others after each start. I don't remember whether it was the ADC or the DAC part, though as I abandoned all interest when I saw that.
 
I ran into a new-ish USB CODEC from CMEDIA recently that had the channels changing timing by a sample between Left and Right -- randomly sometimes and not others after each start. I don't remember whether it was the ADC or the DAC part, though as I abandoned all interest when I saw that.
No excuse. None.

(BTW, great to "see" you, Bill!)
 
I ran into a new-ish USB CODEC from CMEDIA recently that had the channels changing timing by a sample between Left and Right -- randomly sometimes and not others after each start.
Once in a while I see this as well. Very difficult to pin down what causes it.
 
Bottom line for DAC purchasers: largely ignore the measurements, as they're all pretty doggone good. Look for brands that offer good warranties and the feature set you desire. Avoid brands made in places where workers are exploited, if you care about that sort of thing.

If and when my Topping D30Pro craps out, I'll buy a Benchmark. That seems to me to be a reasonable endgame component.
 
  • Like
Reactions: SIY
Bottom line for DAC purchasers: largely ignore the measurements, as they're all pretty doggone good. Look for brands that offer good warranties and the feature set you desire. Avoid brands made in places where workers are exploited, if you care about that sort of thing.

If and when my Topping D30Pro craps out, I'll buy a Benchmark. That seems to me to be a reasonable endgame component.
Why would you pay so much for a DAC?
 
ESS was founded in California, USA, way back in the 1980's (I first learned of the company due to their association with Commodore computers, to date them and myself). They have several design centers, including one in China, but I would not call them a Chinese company. Furthermore, whilst I have issues with the way the Chinese government runs things, I personally don't think attacking things based on country of origin is all that reasonable.
 
ESS was founded in California, USA, way back in the 1980's (I first learned of the company due to their association with Commodore computers, to date them and myself). They have several design centers, including one in China, but I would not call them a Chinese company. Furthermore, whilst I have issues with the way the Chinese government runs things, I personally don't think attacking things based on country of origin is all that reasonable.
I didn't attack China at all. Someone said they prefer things made in USA.
 
I didn't attack China at all. Someone said they prefer things made in USA.
Got it, my apologies, guilty of jumping to the end of the thread and not reading back far enough.
 
Is there a problem when there's a difference between the SINAD of each channel, like in the Topping DX9 results?

15-12-2024 13-36-11 DX9_-_TOPPING_AUDIO_—_Mozilla_Firefox.png
 
Hi Amir,
Thank you for your work which I admire.

The dBFS explanation below, extracted from the first page of this thread, is confusing and, to my knowledge, partly wrong. I know you master the subject and do not need my explanation, surely you've spent a few minutes where I am needing hours, but, as your page is used as a reference by a large community of less knowledgeable people who risks to also get confused, I thought you'd want to know.
I suspect the confusion comes from trying to explain the concept of ENOB and of digital generator output level in one single shot.

Extract:
"You often read in my reviews that so and so dB value is so many bits. We can convert dB to equivalent number of bits (ENOB) by simply dividing the dB value by 6 (this is a bit of approximation)." [part A] "So if I set the digital generator to -120 dBFS (remember 0 dBFS is maximum so all allowable numbers are negative or less than max), it means I am telling the DAC to reproduce a voltage that is represented by 120/6 = 20 bits. If I set it to -96 dBFS then I am asking the DAC to output a level closest to what 16-bit audio samples would represent (16 * 6 = 96 dB)." [part B]

I suggest you split the dynamic range part [part A] and the dBFS part [part B].

The part A may become clearer if you introduce the notion of dynamic range.

"We can convert a dynamic range, expressed in dB, to an equivalent number of bits (ENOB) by dividing the dB value by 6 (this is a bit of approximation)."
Here you could add "For exemple, 16bits allows a theoretical dynamic range of 96dB, and 24 bit a theoretical dynamic range of 144dB."

The second [part B] needs to be reframed.
In my attempt to be understandable with minimal prior knowledge, I came up with a wordy blob here:
"The “level” settings of the digital generator is expressed in dBFS - "decibels from Full Scale". 0 dBFS means that the signal is generated at full amplitude, where all the bits - here 24 - are needed to encode the signal peaks.
Each times you removes 6dB from this dBFS value, you divide the amplitude of the generated signal by a factor two, and you remove one bit from the numbers of bits needed to represent the peaks of the signal.
For example, -6 dBFS means that the signal is generated at half the full amplitude, where the most significant bit is not used.
-18 dBFS means that the signal is generated at 1/8th of the full amplitude, where 21 bits are needed to encode the signal peaks.
Towards the bottom of the range, -120 dBFS would mean that the signal is generated at 1/2^20th of the full amplitude - here 20 = 120/6. 2^20 means 2exp20 that is 2x2x2.. 20 times that is 1’048’576, so the amplitude of the signal is about one million-th of the full amplitude, and the 4 least significant bits are needed to encode the signal peaks."
Note that this last part explaning -120dBFS may actually rather be confusing and not needed at this stage of your page.
Hope this helps, please correct me if I'm wrong, respectfully,
Daniel.
 
Is there a problem when there's a difference between the SINAD of each channel, like in the Topping DX9 results?

View attachment 414193
SINAD in these devices is usually dominated by noise. There, there can be small differences due to ground current/loops, that account for some of that difference. Other differences could be real but is really not material. FYI in my SINAD ranking graph, I use the average of the two channels.
 
@danhilu Well, this also wrong; because if you want to be accurate, at 16 bits the dynamic range is ~90dB and ~138dB at 24 bits (if we do not dither). This is because audio samples are signed number. Which implies another inaccuracy in your post above: the most significant bit is always “used”.
 
"The “level” settings of the digital generator is expressed in dBFS - "decibels from Full Scale". 0 dBFS means that the signal is generated at full amplitude, where all the bits - here 24 - are needed to encode the signal peaks.
Each times you removes 6dB from this dBFS value, you divide the amplitude of the generated signal by a factor two, and you remove one bit from the numbers of bits needed to represent the peaks of the signal.
I think you are confusing bits needed with bits set/unset. With lower amplitudes the top bits are unset (ignoring two's complement for now) but they are still needed.

For example, -6 dBFS means that the signal is generated at half the full amplitude, where the most significant bit is not used.
-18 dBFS means that the signal is generated at 1/8th of the full amplitude, where 21 bits are needed to encode the signal peaks.
A signal can be represented by N bits. Full amplitude is represented by all bits set (ignoring two's complement for now) but how many bits you need depends on the lowest level that you want to be able to represent.

If you want to represent 1/256 amplitude, you need 8 bits:
  • the full amplitude is represented as swinging -128:127
  • the 1/256 amplitude is represented as swinging -1:1
But wait, you say, "1" is only 1/127 of "127". Yes, but think of it like this: the 1/256 amplitude signal was swinging -0.5:0.5 and was rounded (quantized) to -1:1. Anything lower than 1/256 would be rounded to 0. In other words it wouldn't be captured. So the 1/256 amplitude is in fact the smallest signal that can be captured by 8 bits. It will have tons of distortion, sure, but it is captured.

Moving on, if you want to represent 1/65536 amplitude, you need 16 bits:
  • the full amplitude is represented as swinging -32768:32767
  • the 1/65536 amplitude is represented as swinging -1:1
The lower the signal you want, the more bits you need. That means that the description you quoted:
So if I set the digital generator to -120 dBFS (remember 0 dBFS is maximum so all allowable numbers are negative or less than max), it means I am telling the DAC to reproduce a voltage that is represented by 120/6 = 20 bits.
is correct. The only clarification could be that this number of bits is the least amount of bits needed to represent such signal.

Well, this also wrong; because if you want to be accurate, at 16 bits the dynamic range is ~90dB ...
I don't think so, as explained above.

I can also copy here my another response:

Yes, the difference between the sample value 32767 and 1 is 90 dB but that's not what the dynamic range is. The most correct definition, I think, is the ratio of "full scale signal" and "quantization error" variances (powers) as described in Quantization Noise 101: Where does SNR about 6N dB come from?. If however the "difference between the lowest and the highest level" is preferred (because maybe it's easier to understand), then "level" is a wrong concept, it should be "amplitude". The highest amplitude is 32767 (the signal swinging from -32767 to 32767) and the lowest amplitude is 0.5 (the signal swinging from 0 to 1). Then we get our 96 dB:
20 * log(32767/0.5) = 96.
 
Last edited:
Back
Top Bottom