[time-nuts] DDS'ery

Jim Lux jimlux at earthlink.net
Tue Jun 21 14:29:20 UTC 2011

On 6/21/11 6:14 AM, dk4xp at arcor.de wrote:
>   There is an excellent article about cordic on
>       http://www.andraka.com/files/crdcsrvy.pdf

Yes..good explanation..

So, in the "general case" where you might want to rotate by an arbitrary 
angle at each time step, where the angle doesn't happen to be 1/2^n, you 
still need either multiple shift/add operations, or a multiply add.

(i.e. it's no different than longhand multiplication... it takes N 
(optional) adds to multiply by an N bit precision number, or you 
cleverly parallelize/pipeline it).

And, in a lot of applications, you'll need to still do a multiply by the 
"gain" (product of all those cos phi) term you factored out

I can see that there could be advantages in implementation, but in the 
general case, is it actually that much more efficient?

(in a CPU with no multiply, yes, it's a lot better, because it's 
essentially the same as doing long multiplication, but you get more done 
for the same amount of work)

Maybe it's a "how many gates do you need for a given precision" sort of 
thing?  Or the fact that it generates sin/cos together (which is very 
useful in some cases)

in a random "give me the cos(theta)" sort of situation (e.g. a 
calculator), compared to computing the series expansion, clearly CORDIC 
is the way to go.

But in a DDS, you're generating a continuous series of samples.

I'll have to think about it.

(and, because it's integrating a difference equation, CORDIC does have 
the accumulating roundoff, unless you compute each sin/cos from scratch 
each time)

More information about the time-nuts mailing list