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.




_______________________________________________
time-nuts mailing list -- [email protected]
To unsubscribe, go to https://lists.febo.com/cgi-bin/mailman/listinfo/time-nuts
and follow the instructions there.

Reply via email to