USRP Hardware Driver and USRP Manual  Version:
UHD and USRP Manual
Device Calibration


UHD software comes with several self-calibration utilities for minimizing IQ imbalance and DC offset. These utilities perform calibration sweeps using transmit leakage into the receive path (special equipment is not required). The results from a calibration are written to a CSV file in the user's home directory. UHD software will automatically apply corrections at runtime when the user re-tunes the daughterboard LO. Calibration results are specific to an individual RF board.

Note: When a calibration table is present, and the user wishes to override the calibration settings through the API: the user should re-apply the desired setting every time the LO is re-tuned.

UHD software comes with the following calibration utilities:

  • uhd_cal_rx_iq_balance: - minimizes RX IQ imbalance vs. LO frequency
  • uhd_cal_tx_dc_offset: - minimizes TX DC offset vs. LO frequency
  • uhd_cal_tx_iq_balance: - minimizes TX IQ imbalance vs. LO frequency

The following RF frontends are supported by the self-calibration utilities:

  • RFX Series transceiver boards
  • WBX Series transceiver boards
  • SBX Series transceiver boards
  • CBX Series transceiver boards
  • UBX Series transceiver boards

Calibration Utilities

UHD software installs the calibration utilities into <install-path>/bin. Disconnect any external hardware from the RF antenna ports, and run the following from the command line. Each utility will take several minutes to complete:

uhd_cal_rx_iq_balance --verbose --args=<optional device args>
uhd_cal_tx_iq_balance --verbose --args=<optional device args>
uhd_cal_tx_dc_offset --verbose --args=<optional device args>

See the output given by --help for more advanced options, such as manually choosing the frequency range and step size for the sweeps.

Note: Your daughterboard needs a serial number to run a calibration utility. Some older daughterboards may not have a serial number. If this is the case, run the following command to burn a serial number into the daughterboard's EEPROM:

<install dir>/lib/uhd/utils/usrp_burn_db_eeprom --ser=<desired serial> --args=<optional device args>

Calibration Data

By default, calibration files are stored in the user's home/application directory:

  • Linux: ${HOME}/.uhd/cal/
  • Windows: APPDATA%\.uhd\cal\

If you would like to specify a custom directory, you can do so with the $UHD_CONFIG_DIR environment variable:

  • Custom (any OS): ${UHD_CONFIG_DIR}/.uhd/cal/

Calibration files can easily be moved from one machine to another by copying the "cal" directory. Re-running a calibration utility will replace the existing calibration file. The old calibration file will be renamed so it may be recovered by the user.

Ignoring Calibration Files

At runtime, the user can choose to ignore a daughterboard's calibration file by adding "ignore-cal-file" to the arguments. With the UHD API, it can be done as follows:

hint["type"] = "usrp1";
hint["ignore-cal-file"] = "";

Using tx_waveforms as an example, the user can apply this argument as follows:

tx_waveforms --args="addr=,ignore-cal-file" --freq=100e6 --rate=1e6