[USRP-users] XO error correction on B210

Dario Fertonani dario.fertonani at gmail.com
Tue Jul 28 16:18:35 EDT 2015

I'm looking for a software solution for XO error correction. In an ideal
world there would be an API that finely drives the XO, so that every
frequency derived from it through division/multiplication is properly
scaled too. In my understanding this capability doesn't exist on B210/UHD.
Please confirm/correct this understanding.

The focus here is on correcting a long-term bias, not the noise around it
(which is actually satisfactorily low on B210). Let's assume for now that
the correction can be applied at the init stage and doesn't need any update
after that. My plan is to replace the following code

rfBoard->set_master_clock_rate( MasterClockRate_Hz );
rfBoard->set_rx_rate( SamplingFreq_Hz );
rfBoard->set_tx_rate( SamplingFreq_Hz );

with this one

rfBoard->set_master_clock_rate( MasterClockRate_Hz * ScaleXO );
rfBoard->set_rx_rate( SamplingFreq_Hz * ScaleXO );
rfBoard->set_tx_rate( SamplingFreq_Hz * ScaleXO );

and similarly with all other calls with values in Hz, like for
uhd::tune_request_t. In the code above the variable *_Hz are double
variables in Hz and ScaleXO is a double variable very close to 1 (for
example 1.0000005 is an error of 500 ppb). Am I overlooking anything? The
only problem I can think of is preserving the constraint that the master
clock rate is an integer multiple of the sampling rate, which isn't a
function of ScaleXO in exact math but may become so in finite math. For
example, if an exact ratio of N becomes (N+1e-30) because of finite math,
will UHD work? If not, will it dump a warning/error?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ettus.com/pipermail/usrp-users_lists.ettus.com/attachments/20150728/a2ec358f/attachment-0002.html>

More information about the USRP-users mailing list