aboutsummaryrefslogtreecommitdiffstats
path: root/host/docs/sync.rst
diff options
context:
space:
mode:
Diffstat (limited to 'host/docs/sync.rst')
-rw-r--r--host/docs/sync.rst75
1 files changed, 54 insertions, 21 deletions
diff --git a/host/docs/sync.rst b/host/docs/sync.rst
index 55c9f81f0..a1f6cb7df 100644
--- a/host/docs/sync.rst
+++ b/host/docs/sync.rst
@@ -4,21 +4,21 @@ UHD - Synchronization Application Notes
.. contents:: Table of Contents
-The following application notes explain how to synchronize multiple USRPs
-with the goal of transmitting or receiving time-aligned samples for MIMO
-or other applications requiring multiple USRPs operating synchronously.
+The following application notes explain how to synchronize multiple USRP
+devices with the goal of transmitting or receiving time-aligned samples for MIMO
+or other applications requiring multiple USRP devices operating synchronously.
**Note:** The following synchronization notes do not apply to USRP1,
which does not support the advanced features available in newer products.
------------------------------------------------------------------------
-Common reference signals
+Common Reference Signals
------------------------------------------------------------------------
-USRPs take two reference signals in order to synchronize clocks and time:
+USRP devices take two reference signals in order to synchronize clocks and time:
* A 10MHz reference to provide a single frequency reference for both devices.
-* A pulse-per-second (1PPS) to synchronize the sample time across devices.
-* Or, the MIMO cable transmits an encoded time message from one device to another.
+* A pulse-per-second (PPS) to synchronize the sample time across devices.
+* A MIMO cable transmits an encoded time message from one device to another.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PPS and 10 MHz reference signals
@@ -36,7 +36,7 @@ However, some USRP models can provide these signals from an optional internal GP
Sometimes the delay on the PPS signal will cause it to arrive inside the timing
margin the FPGA sampling clock, causing PPS edges to be separated by less or
more than 100 million cycles of the FPGA clock. If this is the case,
-you can change the edge reference of the PPS signal with this special parameter:
+you can change the edge reference of the PPS signal with this parameter:
::
@@ -44,7 +44,7 @@ you can change the edge reference of the PPS signal with this special parameter:
**Note2:**
For users generating their own signals for the external SMA connectors,
-the pulse-per-second should be clocked from the 10MHz reference.
+the PPS should be clocked from the 10MHz reference.
See the application notes for your device for specific signal requirements.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -52,7 +52,7 @@ MIMO cable reference signals
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Use the MIMO expansion cable to share reference sources (USRP2 and N-Series).
The MIMO cable can be used synchronize one device to another device.
-Users of the MIMO cable may use method 1 to synchronize multiple pairs of devices.
+Users of the MIMO cable may use Method 1 (explained below) to synchronize multiple pairs of devices.
::
@@ -60,13 +60,13 @@ Users of the MIMO cable may use method 1 to synchronize multiple pairs of device
usrp->set_time_source("mimo");
------------------------------------------------------------------------
-Synchronizing the device time
+Synchronizing the Device Time
------------------------------------------------------------------------
The purpose of the PPS signal is to synchronously latch a time into the device.
-You can use the set_time_next_pps(...) function to either initialize the sample time to 0,
-or to an absolute time such as GPS time or UTC time.
+You can use the **set_time_next_pps(...)** function to either initialize the sample time to 0
+or an absolute time, such as GPS time or UTC time.
For the purposes of synchronizing devices,
-it doesn't matter what time you initialize to when using set_time_next_pps(...).
+it doesn't matter what time you initialize to when using **set_time_next_pps(...)**.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Method 1 - poll the USRP time registers
@@ -85,7 +85,7 @@ When the last PPS time increments, the user can determine that a PPS has occurre
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Method 2 - query the GPSDO for seconds
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Most GPSDO can be configured to output a NMEA string over the serial port once every PPS.
+Most GPSDOs can be configured to output a NMEA string over the serial port once every PPS.
The user can wait for this string to determine the PPS edge,
and the user can also parse this string to determine GPS time:
@@ -103,27 +103,27 @@ and the user can also parse this string to determine GPS time:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Method 3 - internal GPSDO
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-USRPs with internal GPSDOs properly configured will automatically
+USRP devices with internal GPSDOs properly configured will automatically
configure themselves to set the VITA time to current UTC time.
See the `GPSDO Application Notes <./gpsdo.html>`_ for more details.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Method 4 - MIMO cable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-A USRP can synchronize its time to another USRP via the MIMO cable.
+A USRP device can synchronize its time to another USRP device via the MIMO cable.
Unlike the other methods, this does not use a real "pulse per second".
-Rather, the USRP sends an encoded time message over the MIMO cable.
+Rather, the USRP device sends an encoded time message over the MIMO cable.
The slave device will automatically synchronize to the time on the master device.
See the `MIMO Cable Application Notes <./usrp2.html#using-the-mimo-cable>`_ for more detail.
------------------------------------------------------------------------
-Synchronizing channel phase
+Synchronizing Channel Phase
------------------------------------------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Align CORDICs in the DSP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-In order to achieve phase alignment between USRPs, the CORDICS in both
+In order to achieve phase alignment between USRP devices, the CORDICS in both
devices must be aligned with respect to each other. This is easily achieved
by issuing stream commands with a time spec property, which instructs the
streaming to begin at a specified time. Since the devices are already
@@ -152,8 +152,41 @@ For transmit, a burst is started when the user calls send(). The metadata should
//send a single packet
size_t num_tx_samps = tx_streamer->send(buffs, samps_to_send, md);
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Align LOs in the front-end (SBX/WBX + N-Series)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Using timed commands, multiple frontends can be tuned at a specific time.
+This timed-tuning ensures that the phase offsets between VCO/PLL chains
+will remain constant after each re-tune. See notes below:
+
+* There is a random phase offset between any two frontends
+* This phase offset is different for different LO frequencies
+* This phase offset remains constant after retuning
+
+ * Due to divider, WBX phase offset will be randomly +/- 180 deg after re-tune
+
+* This phase offset will drift over time due to thermal and other characteristics
+* Periodic calibration will be necessary for phase-coherent applications
+
+Code snippet example, tuning with timed commands:
+::
+
+ //we will tune the frontends in 100ms from now
+ uhd::time_spec_t cmd_time = usrp->get_time_now() + uhd::time_spec_t(0.1);
+
+ //sets command time on all devices
+ //the next commands are all timed
+ usrp->set_command_time(cmd_time);
+
+ //tune channel 0 and channel 1
+ usrp->set_rx_freq(1.03e9, 0/*ch0*/);
+ usrp->set_rx_freq(1.03e9, 1/*ch1*/);
+
+ //end timed commands
+ usrp->clear_command_time();
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Align LOs in the front-end
+Align LOs in the front-end (others)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
After tuning the RF front-ends,
each local oscillator may have a random phase offset due to the dividers