On Tue, Aug 23, 2005 at 12:02:43PM -0400, Krzysztof Kamieniecki wrote: > Quoting Martin Dvh <[EMAIL PROTECTED]>: > > > cswiger wrote: > > > One thing I don't understand tho: if a typical mux of > > > 0xF0F0F0F0 feeds zeros to all DDC Q inputs, and ADC 0 > > > to all DDC I inputs, nchannels = 1 sends data from DDC 0 > > > only, and looking at the DDC block diagram in figure 3 at: > > > > > > http://www.gnu.org/software/gnuradio/doc/exploring-gnuradio.html > > > > > > how is it we can a complex stream to the software? Why aren't > > > all the Q values also 0 ( zero * nco-cos ) ? Is the > > > decimating low pass filter also a hilbert?
Good questions. Short answer: The picture is wrong. > > I think simple complex math: > > out.complex=ADC.complex * NCO.complex > > out.real=ADC.real*NCO.real - ADC.imag*NCO.imag > > out.imag=ADC.imag.NCO.real + ADC.real*NCO.imag > > > > ADC.imag=0 ==> > > out.real=ADC.real*NCO.real > > out.imag=ADC.real*NCO.imag This is correct. The picture is wrong (please feel free to make a new one). It is effectively a complex multiplication, although it's implemented with the CORDIC algorithm. > And NCO.imag is only zero if the NCO frequency has not been changed from zero > since USRP powerup. This used to be true. A while ago we added a method to set the ddc phase, and the library code resets it to zero when the device is opened. from usrp_standard.h: /*! * \brief Set the digital down converter phase register. * * \param channel which ddc channel [0, 3] * \param phase 32-bit integer phase value. */ bool set_ddc_phase(int channel, int phase); Eric _______________________________________________ Discuss-gnuradio mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
