Well now I am on holidays over XMAS I got the time to really put in a solid chunk of time on the DDS based synthesiser.

Previous blog entries describe the PIC32MX based core to this. The thing works like a charm...

To get decent precision on the sinewave I have implemented an interpolation on a high precision Sinewave lookup table.

- The DDS references into a 12 bit "long", 24 bit "amplitude" precision sinewave LUT.

- Of itself this gives mediocre spurs, which in a DDS are heavily dependent on the frequency, but seem to result in 85-90dBc spurs. There is a fair hash of these without treatment.

- By adding a linear interpolation between samples in the Sinewave Lookup table, the spurs come out as shown below...

- The interpolation is actually quite simple in concept:

- The top 12 bits of the DDS Phase Accumulator looks up the "Sine Sample"

...