On Wed, Nov 09, 2005 at 04:16:33PM -0800, Jonathan Jacky wrote: > > I'm trying to understand how the USRP TX-A and TX-B outputs (on the > Basic TX daughterboards) are generated, and how they are related to > each other. This has been discussed here before [1] but I think that > diagram and explanation were not quite complete. I think I've got it > now. Can anyone here confirm my understanding?
See also: http://lists.gnu.org/archive/html/discuss-gnuradio/2005-10/msg00142.html > When I run usrp_siggen with -f1e5 -c1M flags to modulate a 1 MHz > carrier with a 100 kHz signal, I get a 1.1 MHz cos wave on > TX-A and a 1.1 MHZ sine wave on TX-B (shown on a scope, or by > usrp_fft.py with RX-A connected to TX-A or TX-B). That is, the I get > the sum of the carrier and the signal frequencies on both A and B, > but B is shifted 90 degrees after A. > > As I understand it, here's what's going on in the USRP (actually in > the AD9862). This is the standard way to do quadrature modulation, > which is mentioned in the data sheet [2] and explained in an article > [3]. It's a way to do single sideband modulation (so we get only the > sum frequency 1.1 MHz but not the difference) > > cos x * cos y > cos x cos x * cos y - sin x * sin y = cos(x + y) > I ------->(X)----------------->(-)---------> TX-A > ^ ^ > | cos y / > from | / > USB [ NCO ] / . > | / . > | sin y / \ > v / v > Q ------->(X)------------ ... (+)------> TX-B > sin x sin x * sin y sin x * cos y > + cos x * sin y = sin(x + y) > > This diagram shows the complete path for TX-A. It is similar to the > TX-A path diagram in [1], except there is an additional block > after the multiplier to compute the difference cos x*cos y - sin x * sin y, > to get cos(x + y). Moreover, in the TX-B path there are (in effect) two > more multipliers to compute sin x * cos y and cos * sin y, and an > adder to compute the sum sin x * cos y + cos x * sin y to get sin (x + y). > To reduce clutter I haven't shown these two multipliers in my diagram > either. Yes. In effect the device performs a complex multiplication of I/Q on one input times the NCO cos/sin on the other input. In reality, it's all munged together in the CORDIC block. > This explanation is also consistent with other observations. For > example running usrp_siggen with flags -a0 -o9999 -c1M to send no > modulating signal but just a constant offset of 9999 (or whatever) on > I and zero on Q, TX-A and TX-B produce cosine and sine waves at the > carrier frequency with amplitudes proportional to the value of > the -o flag (replace cos x with 9999 and sin x with 0 in the formulas > above). > > Is this correct? Is there anything I've overlooked? A couple of additional details: We can't control the phase accumulator in the AD9862 digital up converter. Thus after it's run for a while with a non-zero DUC freq and then reset to a zero DUC freq, you'll get non-zero outputs on both channels even with a constant real input signal. This is because it's performing a fixed rotation based on the contents of it's phase register. > Jon Jacky > > [1] Block diagram of FPGA interface (thread in discuss-gnuradio) > http://lists.gnu.org/archive/html/discuss-gnuradio/2005-04/msg00201.html The block diagram isn't quite right. Needs complex mulitply, not two real multipliers. > [2] AD9862 data sheet (get PDF data sheet linked to this summary page) > http://www.analog.com/en/prod/0%2C2877%2CAD9862%2C00.html > > [3] Fundamentals of digital quadrature modulation (get PDF version > w/figures) > http://rfdesign.com/mag/radio_fundamentals_digital_quadrature/index.html > Eric _______________________________________________ Discuss-gnuradio mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
