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:
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 Chi
------------------------------------------------------------------------------------------------
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?