How good can USRPs with internal GPSDOs being synchronized?

Hi all,

I am trying to synchronise two USRP N210 with the goal of receiving
time-aligned samples.
I’ve modified the rx_samples_to_file.cpp code according to this page:
http://files.ettus.com/uhd_docs/manual/html/sync.html

It seems that the signals at the USRPs have between +0.2 and -0.2 us
time
difference.
This time difference seems to be random, as it changes every time I run
a
new experiment.

Does anyone know why the samples receive at these two USRPs are still
not
aligned?
I thought the time difference should be less than 100ns.
What’s the right way to minimize the time difference??

Best regards,
Cheng C.


Here is the setup and the code snippet that I’ve add to the example
rx_samples_to_file.cpp.

  • USRP N210 with internal GPSDO module, daughtherboard is DBSRX2
  • Signal generator outputs a common signal and connects to the two USRPs
    through equal length cables

Transmitter part: Common signal is FM signal with 1MHz bandwidth,
carrier
frequency is 1.6GHz.
Receiver part: Sampling rate is 5Msps

  1. For Common Reference Signals
    {{{
    usrp->set_clock_source(“gpsdo”);
    usrp->set_time_source(“gpsdo”);
    }}}

  2. For synchronising the Device Time
    Because each N210 has an internal GPDSO module, the device times are
    automatically synchronised

  3. For Synchronising Channel Phase

To align CORDIC:
{{{
uhd::stream_cmd_t stream_cmd((num_requested_samples == 0)?
uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS:
uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE
);
stream_cmd.num_samps = num_requested_samples;
stream_cmd.stream_now = false;
stream_cmd.time_spec = uhd::time_spec_t(time_to_receive);
usrp->issue_stream_cmd(stream_cmd);
}}}

To align LOs in the frontend:
{{{
uhd::time_spec_t cmd_time = usrp->get_time_now() +
uhd::time_spec_t(0.1);
usrp->set_command_time(cmd_time);
usrp->set_rx_freq(1.6e9);
usrp->clear_command_time();

}}}
For DBSRX2, does this method for aligning LO work?