What could be the source of this sine wave distortion, visible as equally spaced lines in FFT

dacdistortionfftharmonicsjitter

I have an MCU controlling a 16bit DAC via SPI (and an additional LDAC output, which triggers the update of the DAC output). The MCU has a precalculated 1120Hz sine wave in a 364-byte long buffer (all calculations in float32, rounded to uint16 for DAC output), sampled at 29120Hz. In a timer interrupt, the update of the DAC is triggered via LDAC and then a new value is loaded from the buffer and sent via SPI. The update to last value is triggered in the beginning to reduce jitter due to memory access races against DMA. Interrupt has a sufficiently high priority to not be delayed.

Althrough visually the sine looks good, FFT of my Rigol DS1054Z behind the DAC (before the reconstruction filter) shows a significant distortion:
Distorted signal spectrum behind DAC

The highest peak is the required 1120Hz, others are equally spaced by 260Hz. The right peak seems to be only 5dB below the main!!

The jitter on the LDAC pin is on the order of +/- 0.25us, which I'd consider acceptable against 34.3us sample time. The timer itself runs from the MCUs crystal and should be stable enough.

What kind of a problem would lead to such a distortion pattern? What could be the ways to diagnose and reduce it?

Just in case relevant: the DAC is an AD5686, full-scale reference is 5V, sine amplitude is 25mV which results in roughly the lower 10 bits being "switched".

Best Answer

I've hooked up a lab signal generator to the input of the scope to compare it to the measured signal and surprisingly saw the exactly same spectrum in it's FFT. Turning up the frequency the subharmonics went away at 1250 Hz. Changing memory depth in the "Aquire" settings from Auto to 6K removed the effect. It seems like some kind of an aliasing problem is going on in the FFT of the DS1054Z.

===

EDIT: Looking carefully at the image you will see a sampling rate of 5kHz shown over the FFT window. It would have been too less to sample the DAC output before the filter. It's surprising that it still looks the same if provided with a clean 1120Hz signal, as it's still below the niquist frequency.