# [time-nuts] HP 5065A A1 replacement with DDS

Mon Jun 25 08:38:14 EDT 2018

```On 6/24/18 2:05 PM, Hal Murray wrote:
>
> Poul-Henning Kamp said:
>> That's one of the reason I went with Bo's DDS (32bit0 instead of the eBay
>> modules (20-24 bit).  Higher resolution mitigates the spur problem at least a
>> little bit.
>
> I think it also moves the spurs closer in.  But maybe if they are small enough
> they get lost in the normal noise.
>
> Does anybody have a handy formula for the spurs given the parameters for a DDS?

There isn't one.. <grin>

The spur size and location is more determined by "how many loops through
the cosine table til you wind up back at zero" which gets down to the
phase quantization - or the cosine table size

Think of a cosine table that's 16 elements long (i.e. a 4 bit phase).

If the output frequency is fclk*8/16, your DDS puts out entry 0 and
entry 8, and repeats
If the output frequency is fclk*2/16, your DDS puts out entry
0,2,4,6,8,10,12,14,0,2,4,6

If the output frequency is fclk*3/16, your DDS puts out 0,
3,6,9,12,15,2,5,...  and it takes a few cycles to repeat around

If the output frequency is fclk*2.5/16, your DDS puts out
0,2,5,7,10,12,15,1,4,6,9,11,14,0,3, etc.

these all have very different spur patterns.

>
> I've occasionally thought of writing code to generate the output of a DDS and
> run it through a FFT.  I haven't figured out how much memory that would need,
> or rather how wide a DDS I could simulate with the memory I have.  A 20 bit
> accumulator repeats after a million cycles.  At 8 bytes/sample that's 8
> megabytes which I can do.  (Round down if FFT needs another copy.)

That is, in fact how people do it.

>
> We are only interested in the close-in area, so old brute-force calculations
> maybe fast enough.
>
>
>

```