自校准
UHD 软件带有多个自校准实用程序,可最大程度地减少 IQ 失衡和 DC 偏移。这些实用程序使用传输泄漏到接收路径来执行校准扫描(不需要特殊设备)。校准结果将写入用户主目录中的文件。当用户重新调整子板 LO 时,UHD 软件将在运行时自动应用校正。校准结果特定于单个 RF 板。
注意:当存在校准表并且用户希望通过 API 覆盖校准设置时:用户应在每次重新调谐 LO 时重新应用所需的设置。
UHD 软件附带以下校准实用程序:
uhd_cal_rx_iq_balance: - 最小化 RX IQ 不平衡与 LO 频率
uhd_cal_tx_dc_offset: - 最小化 TX DC 偏移与 LO 频率
uhd_cal_tx_iq_balance: - 最小化 TX IQ 不平衡与 LO 频率
自校准实用程序支持以下 RF 前端:
RFX 系列收发器板
WBX系列收发板
SBX 系列收发器板
CBX 系列收发器板
UBX 系列收发板
USRP N320
校准实用程序
UHD 软件将校准实用程序安装到<install-path>/bin. 从 RF 天线端口断开任何外部硬件,并从命令行运行以下命令。每个实用程序都需要几分钟才能完成:
uhd_cal_rx_iq_balance --verbose --args=<可选设备参数>
uhd_cal_tx_iq_balance --verbose --args=<可选设备参数>
uhd_cal_tx_dc_offset --verbose --args=<可选设备参数>
有关更多高级选项,请参阅 给出的输出--help,例如手动选择扫描的频率范围和步长。
注意:您的子板需要序列号才能运行校准实用程序。一些较旧的子板可能没有序列号。如果是这种情况,请运行以下命令将序列号烧录到子板的 EEPROM 中:
<安装目录>/lib/uhd/utils/usrp_burn_db_eeprom --ser=<所需序列号> --args=<可选设备参数>
校准数据
默认情况下,校准文件存储在用户的主/应用程序目录 ( $XDG_DATA_HOME) 中:
Linux: ${HOME}/.local/share/uhd/cal/
视窗: LOCALAPPDATA%\uhd\cal\
校准文件是带有.cal文件扩展名的二进制文件。
如果您想指定自定义目录,可以使用$UHD_CAL_DATA_PATH环境变量来实现。
通过复制“cal”目录或其中的单个文件,可以轻松地将校准文件从一台机器移动到另一台机器。重新运行校准实用程序将替换现有的校准文件。旧的校准文件将被重命名,以便用户可以恢复。
修改校准数据
可能有理由在 UHD 的校准过程之外分析或修改校准数据。因为数据是使用 FlatBuffers 存储的,所以这可以在不依赖 UHD 的情况下完成。UHD 以<install-path>/share/uhd/cal.
首先,安装 FlatBuffers。该包可以从https://google.github.io/flatbuffers/获得。安装后,.cal可以使用以下方法将文件转换为 JSON
flatc --strict-json -t <安装目录>/share/uhd/cal/<foo>_cal.fbs -- <数据>.cal
<foo>_cal.fbs用于数据的方案文件在哪里,例如pwr_cal.fbs用于功率校准。data.cal是您工作目录中的校准文件。这将<data>.json在同一目录中生成一个。
JSON数据可以转换回二进制使用
flatc -b <安装目录>/include/uhd/cal/<foo>_cal.fbs <数据>.json
这会生成一个<data>.cal可以被 UHD 的校准程序读取的文件。
将 UHD 3.x 校准数据转换为 UHD 4
较早版本的 UHD 使用基于 CSV 的格式来存储 IQ 不平衡和某些设备(例如 X300、N200 主板和 WBX/SBX/CBX/UBX 子板)上的 DC 偏移校正的校准数据。
展望未来,所有校准数据都以二进制形式存储,以便于将其存储在设备的闪存中,以及其他原因。运行uhd_cal_*实用程序将自动生成新格式的校准数据。
要将现有校准数据转换为新格式,请使用 convert_cal_data.py 实用程序。默认情况下,它将转换所有现有数据。用于convert_cal_data.py --help获取命令行选项的完整列表。该工具与其他实用程序一起安装,例如安装到/usr/share/lib/uhd/utils中,具体取决于您的操作系统和 CMake 设置。
忽略校准文件
在运行时,用户可以通过在参数中添加“ignore-cal-file”来选择忽略子板的校准文件。使用 UHD API,可以按如下方式完成:
auto usrp = uhd::usrp::multi_usrp::make ( "type=x300,ignore-cal-file=1" );
以 tx_waveforms 为例,用户可以按如下方式应用此参数:
tx_waveforms --args="addr=192.168.10.2,ignore-cal-file=1" --freq=100e6 --rate=1e6
前端更正
IQ 失衡和 DC 偏移补偿的校准依赖于位于 FPGA 中的前端校正逻辑。
请注意,USRP E310、E320、N320 和 B200 系列使用专用的 RFIC 进行自己的校准。对于那些,任何校准都是非常特定于设备的,不在本节中介绍。
单抽头直流偏移补偿
直流偏移是永久存在于感兴趣信号上的固定电压。这是一个附加误差,意味着如果感兴趣的信号是 x(t),则实际观察到的信号 y(t) 包括一个常数偏移:

如果常数值 D 已知,则可以简单地再次减去它。为此,直流偏移补偿由一个简单的加法器组成。校准工具uhd_cal_tx_dc_offset将估计使各种频率的直流偏移最小化的值 D'(即,D' 大约等于 -D)。
要对加法器进行编程,请使用以下 API 调用设置 DC 偏移校正值:
uhd::usrp::multi_usrp::set_tx_dc_offset()
uhd::usrp::multi_usrp::set_rx_dc_offset()
uhd::rfnoc::radio_control::set_tx_dc_offset()
uhd::rfnoc::radio_control::set_rx_dc_offset()
对于 RX DC 偏移补偿,D 的估计可能很困难。因此,RX DC 偏移补偿还包括一种自动模式,它充当 DC 周围的陷波滤波器。它被实现为具有以下差分方程的单抽头 IIR 滤波器:

的值α是设备相关的,但默认值为2个? 20.
要启用自动 DC 偏移校正,请使用参数“true”调用以下 API 调用之一:
uhd::usrp::multi_usrp::set_rx_dc_offset()
uhd::rfnoc::radio_control::set_rx_dc_offset()
直流偏移通常是由 LO 泄漏引起的。因此,建议对无线电进行偏移调谐,以避免在感兴趣的频段中出现 LO。DC 偏移补偿不仅会消除 LO 杂散,而且如果 LO 在感兴趣的频带内,还会影响感兴趣的信号。
诸如 TwinRX 之类的超外差式接收器通常不需要直流偏移校正值。
单点 IQ 失调补偿
为了校正 IQ 失衡,用户可以指定两个实数值 A 和 B。在 FPGA 中,复数信号根据以下等式进行修正:

这是 IQ 不平衡常用校正矩阵的归一化版本,更容易在 FPGA 中实现。因为这个矩阵左上角的值取决于 IQ 不平衡的幅度误差,而底行取决于相位误差,所以值“A”通常被称为“幅度校正值”,而值“ B”被称为“相位校正值”。然而,这些值与 IQ 不平衡引起的实际相位和幅度误差并不相同。
uhd_cal_tx_iq_balance和工具将uhd_cal_rx_iq_balance简单地搜索 A 和 B 值,从而最大限度地减少由 IQ 不平衡引起的错误。
笔记:
API 调用uhd::usrp::multi_usrp::set_rx_iq_balance()和uhd::usrp::multi_usrp::set_tx_iq_balance()将复数作为校正值,由std::complex<double>(A, B). 考虑到校正算法,复杂的数学不是必需的,但选择参数是因为它与 DC 偏移校正 API 对称,而且因为将校正值视为复数可以使其易于处理和存储,与直流偏移校正。
这种校正算法对于高带宽不是最优的,尽管总比没有好。
IQ 不平衡是由直接转换接收器的同相和正交路径幅度略有不同以及它们的相位不完全相隔 90 度(由于模拟组件)引起的。因此,像 TwinRX 这样的超外差架构不需要它。