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"
...