• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. 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!

Let's develop an ASR inter-sample test procedure for DACs!

Dealing with this issue playing CDs can also be handled by using a CD transport and sending the digital signal to something that can create headroom. For example WiiM devices can do this if you use the volume limit (this is applied before it does any other DSP). What they call 95% is -3dB. 90% is -6dB.
Thank you for the info, that is an interesting additional feature of this little box which I did not know before you mentioned it.
 
I'm not sure I follow your answer.
I essentially meant what NTTY wrote:

No intersample-overs in analog if no oversampling filter. Only potential clip of the analog output stage (which I did not encounter in that case).


It's the question what is meant by "intersample over" however. In either case (mathematically through oversampling or the low-pass filtering), the signal may end up being higher than what the sample points suggest so one ideally always has headroom to cover for that.
 
Hi,

I created a new test file, an unfiltered square at 44100Hz/440 = 100.2227Hz and at different levels, from -3.01dBFS to 0dBFS. At 0dBFS, a square test tone will generate an overshot at +3.01dBFS when reconstructed.

I used a very old Revox B 126 CD player (4x oversampling filter) for the testing.

The low frequency of the test tone helps me getting a condensed view. Here below the results @-3.01dBFS, -1dBFS and 0dBFS (20Hz to 96kHz Linear Frequency Scale):

1731781933595.png


The top first one (-3.01dBFS) shows the ringing of the filter beyond 20kHz and is fully effective at 24kHz.
The second view (-1dBFS) shows the oversampling filter starting to be overloaded and we already see the typical aliases a NOS player.
The third and last view (0dBFS) shows the oversampling overloaded and we find our beautiful aliases like we would with a NOS player.

This one file is cool as I can precisely identify the available headroom.

This Revox has 2dB+ headroom (EDIT: less than 2dB, thanks to @KSTR for the correction), which is not bad.
 
Last edited:
I created a new test file, a square at 44100Hz/440 = 100.2227Hz and at different levels, from -3.01dBFS to 0dBFS. At 0dBFS, a square test tone will generate an overshot at +3.01dBFS when reconstructed.
Are you sure about the 3.01dB, exact sqrt(2) factor? Even with high quality sinc 4x upsampling, I can't seem to get above ~+2dB with a full scale square wave of low enough frequency. And with shorter upsampling filters the overshoot is getting lower.
The +3.01dB is the value you get from a -1, -1, +1, +1 sample train (fs/4 90deg).
 
I think so.

Here below a test with the 100.2227Hz file from the Revox I mentioned before and an SMSL PS200 (which is fed by the digital output of the Revox), both measured from analog output:

Square 100.2227Hz level of the test fileValue read from SMSL PS200Value read from Revox B 126
-3.01dBFS-3.01dBFS-3.01dBFS
-3dBFS-3.00dBFS-3.00dBFS
-2dBFS-2.01dBFS-2.00dBFS
-1dBFS-1.04dBFS-1.00dBFS
0dBFS-0.12dBFS0dBFS

Did I get something wrong?

I attached the files I created and used in the above test. It might facilitate the discussion.
 

Attachments

  • Square_-3.01dB_-3dB_-2dB_-1dB_0db_NoDither_LR.zip
    211.8 KB · Views: 22
Are you sure about the 3.01dB, exact sqrt(2) factor? Even with high quality sinc 4x upsampling, I can't seem to get above ~+2dB with a full scale square wave of low enough frequency. And with shorter upsampling filters the overshoot is getting lower.
The +3.01dB is the value you get from a -1, -1, +1, +1 sample train (fs/4 90deg).

Phase is 45 deg or pi/4 for max ISO at fs/4.

I put MATLAB to work with the frequencies provided by @NTTY: fs = 44100, f = 44100/440. The highest peak value is at one quarter of the cycle of the highest harmonic. Bandlimited to below 22050, i.e. removing all harmonics above 22050, it is 1.1790*FS or +1.4301 dBFS.

Screenshot 2024-11-17 at 00.20.45.png
 
I put MATLAB to work with the frequencies provided by @NTTY: fs = 44100, f = 44100/440. The highest peak value is at one quarter of the cycle of the highest harmonic. Bandlimited to below 22050, i.e. removing all harmonics above 22050, it is 1.1790*FS or +1.4301 dBFS.
Always good to confirm that wikipedia is right :)
For a square wave of amplitude 1 c=2, so the overshoot 1+c*0.08948987 = 1.17897974 = 1.4301 dFBS.

Just a note though, you computed it for a properly bandlimited square wave and also the formula above is for a properly bandlimited square wave, but NTTY's file is not that. His files is a series of +/- amplitude samples and that is a square wave with aliasing and the overshoot is slightly higher.
 
but NTTY's file is not that. His files is a series of +/- amplitude samples and that is a square wave with aliasing and the overshoot is slightly higher.
Yep, I forgot to mention they are digitally created unfiltered. I updated my initial message. I suggested to use these in my review of the Teac VRDS-25X and there I was clear, but not here o_O
 
His files is a series of +/- amplitude samples and that is a square wave with aliasing and the overshoot is slightly higher.
Yep, I forgot to mention they are digitally created unfiltered. I updated my initial message.
But even though they are higher, they are not +3 dB AFAICT. Like KSTR earlier, I get only a bit more than 2 dB.
 
Always good to confirm that wikipedia is right :)
For a square wave of amplitude 1 c=2, so the overshoot 1+c*0.08948987 = 1.17897974 = 1.4301 dFBS.

Just a note though, you computed it for a properly bandlimited square wave and also the formula above is for a properly bandlimited square wave, but NTTY's file is not that. His files is a series of +/- amplitude samples and that is a square wave with aliasing and the overshoot is slightly higher.

That is the limit for N going to infinity but N = 219 is pretty close. The +- FS samples give a square wave output if the images are not filtered out. Removing the images should give the known Fourier series truncated just below fs/2 as I have done.

Here is a DAC doing just about that. The peaks are about 17% above the average of the tops as expected. Below is the filter frequency response.
1731805067339.png

1731805149419.png
 
Yep, I forgot to mention they are digitally created unfiltered. I updated my initial message. I suggested to use these in my review of the Teac VRDS-25X and there I was clear, but not here o_O

I found this in the mentioned review.
[...] I used an unfiltered digitally created square tone at 1002.27Hz, one with a 3.01dBFS peak headroom to give space for the ASRC and oversampling filter to process it, and another with 0dBFS peak.

This is the one with 3.01dB headroom:

1731513736863.png
That means the square wave is attenuated by 3.01 dB not that the overshoot of its peaks is 3.01 dB. Looking at the figure from the review, the highest peaks are after the zero crossing but only about 30% or about 2.3 dB above the average level of the tops.
 
Just a note though, you computed it for a properly bandlimited square wave and also the formula above is for a properly bandlimited square wave
And one more thing, that overshoot in a properly bandlimited square wave probably won't be an intersample over, at least not full 1.43 dB.

The +- FS samples give a square wave output if the images are not filtered out. Removing the images should give the known Fourier series truncated just below fs/2 as I have done.

Here is a DAC doing just about that. The peaks are about 17% above the average of the tops as expected. Below is the filter frequency response.
No, it will give something similar but not quite the same. The +/- FS is a square wave with aliases, they are "baked in the signal", you can't remove them. In this particular case it may not be so obvious because the aliases align with the actual components of the square wave. If you compare frequency magnitude spectrum of your synthetized properly bandlimited square wave and the +/- FS square wave you should notice that only one of them is a "proper" square wave:
100.227.s.png


Or you can nudge the frequency a little, so that the aliases won't align anymore, and it will become more obvious. Here are properly bandlimited and +/- FS 101 Hz square waves:
101.000.s.png


All 4 examples will produce a "squiggly" waveform when reconstructed but the +/- FS will overshoot more than expected. Here the inner dashed lines mark -3 dBFS and the outer ones are 1.43 dB higher:
100.227.w.png

101.000.w.png


Btw, I already talked about the aligned aliases before:
 
Last edited:
Always good to confirm that wikipedia is right :)
For a square wave of amplitude 1 c=2, so the overshoot 1+c*0.08948987 = 1.17897974 = 1.4301 dFBS.

Just a note though, you computed it for a properly bandlimited square wave and also the formula above is for a properly bandlimited square wave, but NTTY's file is not that. His files is a series of +/- amplitude samples and that is a square wave with aliasing and the overshoot is slightly higher.
I saw this post of yours. It makes sense if the frequency is a multiple of the sample rate so the aliases have the same frequencies as the in-band harmonics. I added that into MATLAB. With aliases, the peaks are at 1.4785* FS or +3.3964 dBFS. Without aliasing, they are 1.1790*FS or +1.4300 dBFS. I made some errors in the original summing too many harmonics.

Screenshot 2024-11-17 at 04.07.15.png
Screenshot 2024-11-17 at 04.07.40.png
 
One last tweak. I increased the scale of the search variable to give it higher resolution. With aliases, the peaks are at 1.4785* FS or +3.3965 dBFS. Without aliases, they are 1.1790*FS or +1.4302 dBFS.
Screenshot 2024-11-17 at 04.37.00.png
Screenshot 2024-11-17 at 04.37.30.png
 
I ran @danadam ’s ISO test on my latest purchase (SMSL DS100).

The DS100’s line out is going into the preamps of a UA Volt 2 which are boosted to just below the point of clipping.

Here are the results with the DAC’s volume at 100% and ~50%:

IMG_0214.png


Am I right in concluding that the digital volume of the CS43131 is placed before the oversampling stage?

It looks like the clipping was completely eliminated by lowering the volume.

EDIT: full test description here.
 
Last edited:
Some more simplifications to the code. Results are the same. The questionable part is line 52.

Screenshot 2024-11-17 at 05.11.24.png

Screenshot 2024-11-17 at 05.11.45.png
 
Phase is 45 deg or pi/4 for max ISO at fs/4.
Ah, sorry and thanks for the correction.
But even though they are higher, they are not +3 dB AFAICT. Like KSTR earlier, I get only a bit more than 2 dB.
1731824499956.png

I would bet the actual upsampling done in that Revox CDP will have lower peaks as the digital reconstruction filter will not be that good.

Hence,
This Revox has 2dB+ headroom which is not bad.
No. If the above upsampled stream hits numeric limits at -1dBFS levels (of the max value of the square) this means the actual headroom is only +1dB because the overshoot is only 2dB, not 3dB.
This one file is cool as I can precisely identify the available headroom.
Only that you seem to have made the wrong assumption what the max level at the output of the upsampler would be.

The only way to find out what really happens is to scope the analog output in front of any additional analog filter and look how that waveform develops vs. input levels, that is, at what input levels it starts to visibly clip/deform when zooming in. Looking at the final analog output is of course possible but the start of the clipping will be not as visible, depending on the actual analog filter transfer function. OTOH, one could double check by this whether its really the digital stages clipping first and not the analog ones.
 
That means the square wave is attenuated by 3.01 dB not that the overshoot of its peaks is 3.01 dB.
Correct.

I shared the WAV I now use, series of 5 squares at -3.01.dBFS, -3.00dBFS, -2.00dBFS, -1.00dBFS, 0dBFS.
 
And sorry, you've put a lot of comments guys. And I realize I probably was unclear again, I think I get lost in translation sometimes (English is not my native language).

dBFS (sine at a full amplitude) is defined as: dBFS=20*log(sample value/maximum possible value)
With 16 bits, that is: 20*log(16384/32767)=–6.02dBFS

This definition uses RMS value of the signal. So the peak value will often be greater than RMS value. The only time this is not the case is with a square wave in which they are equal. That is why I said I created the square at peak values.

Also, my square files are digitally created, ie not filtered.
 
Last edited:
Out of curiosity, I have burnt NTTY's test CD in order to check the performance of my CD players on the ISO tests with modest analogue equipment.

Here are the results (comments below) :

CD_players_ISP_tests.jpg


The Sony SCD-555ES is an European and Japan only 2 channels SA-CD/CD player. It uses a Sony standalone interpolation filter (CXD8762) which precedes the DAC (one of the last Sony PLM converter, a descendant of the CXD2552). The DSP offers the choice between 5 different types of digital filter for CD replay. Obviously, none of them have any headroom.

I also own a Sony DVP-S9000ES, which uses the same interpolation filter built-in within the DAC chip (Sony CXD9556), with only a choice of 2 filter types and, interestingly, the added possibility to apply a fixed digital attenuation. Unfortunately, the drive of the DVP-S9000ES does not read CD-R and I was unable to test this player and the effect of the digital attenuator.

The Marantz DV-12S2 uses Cirrus Logic CS4392 DAC chips with built-in interpolation filter. It is my belief that the wide-band THD+N only shows the effect of the aggressive noise-shaping this DAC is known for. When the measurement bandwidth is restricted to 30 kHz (the Boonton 1130 cannot do better), the THD+N drops to about 0.04 %, even with the two first ISO test signals. Only with the 11,025 Hz +3dBFS test signal does the THD+N rise to 2.83 % (-30.9 dB) over a 30 kHz measurement bandwidth. The interpolator in the CS4392 DAC chip seems to have some kind of headroom to accommodate ISO.

The Pioneer DV-868AVi (known as Elite DV-59AVi in the US or DV-S969 in Japan) is a complicated topic. It uses Burr Brown PCM1738 DAC chips with built-in interpolation filter, but there is a user choice to add to the two front (stereo) channels an optional Pioneer standalone DSP (PD0274) with two different functions : (1) a "bit extension" function (?) dubbed "Hi-Bit" from 16 (or 20) to 24 bits depth and (2) four different user defined interpolation filters (dubbed "Legato Pro", standard through 3). The effect of those functionalities and their interaction with the DAC chips are not clear to me. With CD data, the "Hi Bit" function appears to be transparent, because nothing changes with or without it. As navigating through the on-TV screen menu in order to select the various "Legato Pro" filters is very cumbersome (I hate that kind of user interface!), I only take measurements with one filter position. The Pioneer seems to perform not much better than the older Sony.

The Pioneer CLD-2950 is an old European-only Laserdisc player which is also able to play CDs. It uses a Pioneer DAC chip (PD2026). It also has a built-in digital attenuator which can bring 25 dB of attenuation in 1 dB step. I have not yet tested that function. The behavior of the converter is odd, as it mutes the output with two ISO test signals, but seems to be happy with the 7,350 Hz test signal.

I have not tested the digital level trim function of every channels of the Marantz and Pioneer DVD players. I am not sure this trimming function does work on CD replay. I will give them a try if I find the time.
 
Last edited:
Back
Top Bottom