CD Player bit-accuracy

This is how I tested the bit-accuracy of my CD723 player.

I selected a CD from my virtual collection and uncompressed the files. The CD was Diana Krall, a pickly audiophile landmark which has been played an untold amount of times at dealer stands in audio salons. I put the wav files in an "original" directory.

Then, I burnt the files using Nero, and ripped the resulting CD with EAC, in another directory "rip".

Then files in both directories were compared and found to be identical apart from offset, which means my test CD was good, and that my Plextor drive was able to extract all bits from it correctly. Thus any would be CD player should be able to do the same.

Then I tried to play the CD on my Harman Kardon DVD-1, which unfortunately does not support CD-R. So I had to grab the original Diana Krall CD on my shelf, dust it off, and load it. The player's SPDIF output was directed to the computer's soundcard SPDIF input, and a track was recorded.

My soundcard is an RME Digi96-8, which offers SPDIF and ADAT in/out. It is a very nice pro board. I don't expect it to corrupt the signal like a SBLive would.

The track thus streamed through the SPDIF input and to my harddisk. I then compared it to the files in the "original" directory on my computer. Because there was a lot of offset (I can't press play and click on record on my computer in the time of 1 sample), I had to write a little program which would look through the files, find the correct offset, and compare the samples.

No frills -- the digital audio data sampled through the Harman player and my SPDIF soundcard input was bit-identical to the wav files (which had been ripped from this CD long ago, when I setup my CD collection). Thus the Harman player was able to output all the bits on the CD correctly. This player's analog output sounds terrible, but that is another story.

Now I knew that my SPDIF soundcard was bit-accurate and that I could use it to test the CD723. So I plugged the CD723 in, played a track, recorded it, and went through the same comparisons. Surprise surprise, nearly all samples were wrong.

I had an intuition that the player would perform some kind of scaling, thus I modified my comparison program accordingly. It would look for the original wave in the recorded one using intercorrelation to find the right offset, then try to determine the scaling factor (mean of B/A where A is large enough not to cause problems). Here is what I found :

The volume control goes from 0 (mute) to 20 ("max") and works on the SPDIF output as well as the analog output. I suppose there is only one multiplier for both, which must therefore be located right after the CD decoder, and must feed both oversampling filter the digital output. Looking at the Datasheet block diagram confirms this.

Here are the scaling factors according to the volume settings :

Volume SettingScaling
max0.9375 (-0.56 dB)
19 0.9375 (-0.56 dB)
18 0.8984 (-0.93 dB)
17 0.8516 (-1.40 dB)
16 0.8047 (-1.89 dB)
15 0.7578 (-2.41 dB)
14 0.7109 (-2.96 dB)

Remember these are digital measurements, there are no Volts to be seen anywhere. It simply is the mean of the sample values output by CD723 divided by the real sample values on the CD.

As we can see the two highest steps are identical and the Max position does not scale the signal by 1, but by .9375. This may be a software bug, or a design miscarriage, but whatever the cause, it makes the player unsuitable for high-end.

There is no dithering done after this scaling (I have checked with my program). This shows as every input value is scaled down to the same output value, whereas a dithered scaling would give several different output values for each input value, due to random dither.

At "Max" volume, here is the correspondence table between sample values on the CD and on the digital output. The scaling is not even symmetrical around 0 :
Sample InOutInOut
0 0
1 1 -1 -1
2 2 -2 -2
3 3 -3 -3
4 3 -4 -4
5 4 -5 -5
6 5 -6 -6
7 6 -7 -7
8 7 -8 -8
9 8 -9 -9
10 9 -10 -10
11 10 -11 -11
12 11 -12 -12
13 12 -13 -12
14 13 -14 -13
15 14 -15 -14

I could have gone to +- 32767 but figured it'd get you bored.

So this proves that my CD723 does not have a bit accurate digital output. I can hear this. First I used the player as a digital source. Then I used the computer and was startled to hear a lot more details. Jitter cannot explain this, as both were slaved to the clock in my DAC, which reclocks everything. If there is a significant amount of jitter from this clock, it must be the same for all sources.

I made another experiment. I burnt a CD with the following waveform :

Here is a closeup :

As you see, this is simply a 1 LSB square wave at 2 kHz, with a varying offset. Every second, the offset goes up by one. If the CD player has a good output, it will output exactly the same waveform. However, if it scales brainlessly, like the correspondence table above shows, some portions of the sqare wave should be muted, because some adjacent input values are mapped to the same output values. I recorded the output, and here it is :

It is obvious that some portions of the 1 LSB square wave are muted. This confirms that this player performs brainless scaling.

As I read on the Audio Circle Mailing List : "This is particularly bad, as most commercial recordings are heavily noise shaped... distortion of the LSB will ruin the dynamic range encoded on the disc. I would imagine this would have a number of effects on the sound... some of which might be to flatten the soundstage, and add a congested quality."

This is exactly what I heard when using the CD723 as a digital source.

If you like to perform the same experiment, you can download the wav-files (in a sfx archive) here and test it for yourself. I used Cool Edit Pro for these screenshots.

Back