[hpsdr] "Taylor Corrected DDS"

John B. Stephensen kd6ozh at comcast.net
Wed Jun 14 15:21:47 PDT 2006


A simpler and smaller mechanism is to do linear interpolation between the
points in a sine table.

73,

John
KD6OZH

----- Original Message ----- 
From: "Bob McGwier" <n4hy at idaccr.org>
To: <hpsdr at hpsdr.org>
Sent: Wednesday, June 14, 2006 18:04 UTC
Subject: [hpsdr] "Taylor Corrected DDS"


> ***** High Performance Software Defined Radio Discussion List *****
>
> This is really straightforward and was what we used for the sinusoidal
> oscillator back in the visual basic code for the SDR-1000 in our
> numerically controlled oscillator before we figured out how fast modern
> desktop/laptop CPU's are when doing floating point arithmetic.   In
> fact, we did not need it at all for our PC based NCO's.  But in FPGA and
> DDS's,   it is a boost and this set of tricks should be filed away in
> your repertoire even if ultimately they do not prove useful here.
>
> It is based upon nothing more sophisticated than  sin(a+b) and cos(a+b)
> and trigonometric identities.
>
> The "Taylor corrected"  is all marketing hype.  You are making a first
> order correction to the sinusoid from a table lookup and that means you
> have done a first order Taylor series expansion that amount to nothing
> more than linear interpolation where the interpolating steps are
> quantized.  It sounds very sexy.  It is not.
>
> That said,  this will be a really great experiment for us to conduct
> with our ALTERA parts (to shove it to Xilinx for doing this kind of hype).
>
>
> sin(a+b) = sin(a)cos(b) + cos(a)sin(b)
>
> and
>
> cos(a+b) = cos(a)cos(b) - sin(a)sin(b)
>
> And the magic is over  ;-).
>
>
> There has never been a simpler problem that is more illustrative of WHY
> one should think of these things as complex numbers.  These same two
> identities are one trivial identity in complex numbers.
>
> exp(j (a+b))  = exp(ja)exp(jb)  (because the arguments are exponents)
> is the entire thing (if you follow Euler's identity in its   exp(j C)
> =   cos(C) + j sin(C) you will see it immediately).
>
> So let us suppose that we wish to have 4096 points in our main look up
> table.  This is 2^12 points so we are looking at 12 bits of our
> accumulator for A.  There is NO advantage in our procedure for doing
> more than just truncating the phase Phi to 12 bits and calling the
> truncation a, an integer.
>
> The residual phase error not taken into account by our truncated phase
> is   Phi - a.   Notice since we truncated Phi to twelve bits,  Phi - a
> is ALWAYS nonnegative.  This is a definite plus.  Let us add a new table
> of complex numbers 256 long and it will be
>
> exp(j b)  where b takes on the values
>
> b =    2 * i  * pi /(256*4096)  where i can take on the values  0,1,
> ..., 255.    Pick the i  from 0 - 256 so that  Phi - a -
> (2*i*pi/(256*4096))is MINIMIZED.   If i is 256,  add one  phase step to
> a  and make b = 0.   Otherwise,   b is in our little 256 long table of
> complex numbers.
>
> The final complex sinusoid output is   exp(ja)exp(jb)  and we have
> tremendously reduced the total harmonic distortion and phase truncation
> spurs.   But all we have is two table lookups.    In simple terms,   you
> have broken up the phase circle in 256*4096 or 2^20 pieces BUT, using
> the trig identities above  we can do the entire 2^20 different points
> with a single 2^12  lookup and a 2^8 lookup.  So in two table lookups,
> you get a very nice complex number with much lower phase truncation crud
> than the 2^12 lookup.
>
>
> So,  what is the catch?   They have NOT told to you in the dds  paper
> from Xilinx how to make the analog signals, the voltages for the RF
> combine for the final output.  Notice that the entire block diagram set
> ends in the table lookups.  The hard part is what must then follow.  For
> the real channel  we need
>
> cos(a)cos(b) - sin(a)sin(b) for example.  This is a summer and two
> mixers running at RF frequencies and we expect them to be perfectly
> balanced, etc.  We need to figure out how to do the two multiplies and a
> subtract to take advantage of the trivial trig identities and we need to
> do a pair of these, again perfectly balanced and identical group delay
> to produce signals in quadrature.   Running at tens to hundreds of MHz,
> this is a nontrivial issue.   Analog devices has spent tons of money
> learning how to make these nonlinear processes produce linear results.
> We do not have this at our disposal.  We are better off spending a few
> tens of dollars to get a DDS and feeding it to a PLL if you want spur
> free (and phase noise increased) operation.
>
>
> Bob
> N4HY
>
>
>
>
>
>
> -- 
> Robert W. McGwier, Ph.D.
> 805 Bunn Drive
> Princeton, NJ 08540
> (609)-924-4600
> (sig required by employer)
>
>
> _______________________________________________
> HPSDR Discussion List
> To post msg: hpsdr at hpsdr.org
> Subscription help: http://lists.hpsdr.org/listinfo.cgi/hpsdr-hpsdr.org
> HPSDR web page: http://hpsdr.org
> Archives: http://lists.hpsdr.org/pipermail/hpsdr-hpsdr.org/


 1150323707.0


More information about the Hpsdr mailing list