Implementation Notes - 2023.2 English

Vitis Libraries

Release Date
2023.2 English

In a conventional DDS (sometimes known as an Numerically Controlled Oscillator), a phase increment value is added to a phase accumulator on each cycle. The value of the phase accumulator is effectively the phase part of a unit vector in polar form. This unit vector is then converted to cartesian form by lookup of sin and cos values from a table of precomputed values. These cartesian values are then output.

It should be noted that, in the dds_mixer_lut the sin/cos values are not scaled to the full range of the bit-width to avoid saturation effects that arise due to 2s complement representation of numbers. The maximum positive value representable by an n-bit 2s complement number is 1 less than the magnitude of the largest negative value. So, the sin/cos values are scaled by the magnitude of the maximum positive value only. So, for cint16 type, +1 scales to +32767 and -1 scales to -32767. Also, following the run-time multiplication of the looked-up cartesian value for a cycle by the precomputed vector, scaling down and rounding will lead to other small reductions in the maximum magnitude of the waveform produced.