USRP X310+UBX40ドータボードでのIQ imbalanceとDC offsetの補正
UBXドータボードを使用することが多くなってきた.UHDに含まれるツールでIQ imbalance と DC offset の補正を行うことが可能である.所属する学科建屋の全面改修完了後の復帰により,すべての什器・装置類・書籍の引っ越しを行っていた(より研究が実施しやすい環境になった).この機会に,USRP X310に装着したUBX40ドータボード2枚に対して以下のように実施した.
- UBX装着ずみのUSRPを通電して1時間ほど置いておく(念には念を入れる場合)
- USRPのRF入出力端子には,何も接続しない
以下のコマンドを順次実行していく.verbose オプションはもちろん必須ではないが,何をやっているか表示してもらう意味で指定した.subdev オプションを付けないと,デフォルトでRF A側のドータボードについてのみ補正が実施される.RF B側のドータボードについても補正してほしいので,–subdev B:0 のように明示的に指定して,RF B側についても補正を実施した.1回のコマンド実行には20分ほど要する.時間が取れるときに気長に実施することをお勧めする.
uhd_cal_rx_iq_balance --verbose
uhd_cal_rx_iq_balance --verbose --subdev B:0
uhd_cal_tx_iq_balance --verbose
uhd_cal_tx_iq_balance --verbose --subdev B:0
uhd_cal_tx_dc_offset --verbose
uhd_cal_tx_dc_offset --verbose --subdev B:0
受信側のIQバランス補正,送信側のIQバランス補正,DC offset補正が順次自動で実行され,ホームディレクトリの .local/share/uhd/cal ディレクトリに拡張子がcalのバイナリファイルが(上記の例では6個)生成され,そのファイルに個々のドータボードに対する周波数ごとの補正係数値が書き込みされるようだ(ドータボードのシリアル番号をソフトウェアで取得して記録しているように見える).効果は大きく,DSB-SC変調した送信信号のスペクトルをスペアナで観測すると,いわゆる「キャリア信号リーク」が約30dB減少(at 2.4GHz)した(送信出力-20dBm,ベースバンド信号のサンプリング周波数Fsb=20MHzのとき,スパン10MHzのスペアナの雑音レベル近くまで低減).
RFフロントエンドが上記の補正に対応しているハードウェアは下記であるとの記載がUHDのドキュメントにある.
RFX Series transceiver boards
WBX Series transceiver boards
SBX Series transceiver boards
CBX Series transceiver boards
UBX Series transceiver boards
USRP N320
ちなみに,
uhd_cal_rx_iq_balance --help
のように入力すると,使用方法を表示することができる.UBXドータボードであれば,デフォルトでは10MHzから6GHzまでの周波数範囲について7.3MHzごとに内部的に校正用信号を生成して補正係数値を求めて,それをホームディレクトリ配下の所定ディレクトリのバイナリファイル(calファイル)に書き込むという処理を実施しているようだ.
USRPでの送受信動作時にLO(local oscillator)の tune request がUHDを介してなされた際に,calファイルから補正係数値を読みだして適用する,という動作をするのだと想像する.こちらのドキュメントにそう読める記載がある.
より狭い周波数範囲を指定して,指定した周波数間隔ごとに補正係数値をcalファイルに書き込みさせる,といった指定もできる旨が,こちらのWebページで紹介されている.特定の周波数帯で高精度を得たい,という場合に利用できる可能性がある.ただし,uhd_cal シリーズのコマンドを再度実行すると,補正係数値が記録されている既存のcalファイルが上書きされてしまい,以前に時間をかけて得た補正係数値が失われることになるようだ(USRP X300シリーズであればRF AとRF Bのドータボードに補正を実施するので,20分間×6=120分間の労力が失われることに…).
同じく前述のUHDのドキュメントによると,補正係数値を書き込んだcalファイルを別のPCにコピーしても利用できるとの記載がある.つまり,あるPC1(我々の場合はデスクトップのLinuxマシン)にUSRPを接続して補正を実施して得たcalファイルを,別のLinux PC2のUSRPを使用するユーザのホームディレクトリの所定ディレクトリにコピーしておけば,補正係数値取得済みのUSRP(同じドータボードを同じスロットに装着)をLinux PC2で使用する際にも,UHDが補正係数値を参照してくれるということのようだ.
IQ imbalance と DC offset の補正は,ドータボードを構成するアナログ・デバイセズ社やマキシム社(今はアナログ・デバイセズ社)の半導体チップが有する機能を,UHDを介して使用しているのだと思う.UHDはUSRPそしてGNU Radioの屋台骨となるソフトウェアであると感じる(個人の見解で,ラフに書いています).