Multi-FosphorサンプルデモによるLinux PCでのUSRP-X410動作検証

更新しました Nov 17, 2022

環境

ハードウェア

  • USRP X410

ソフトウェア

  • FPGA Xilinx Compilation Tools

オペレーティング・システム

  • Linux

その他

  • Linux (ubuntu)
  • UHD
  • GNU Radio
  • RFNoC
  • Xilinx VIVADO

LinuxでのUSRP-X410開発環境の構築 」でLinux PC上にUSRP-X410の開発環境を構築した後、本稿でUSRP-X410の動作検証を行うことができます。
本稿では、Linux PCを使ったUSRP-X410のセットアップの検証として、Multi-Fosphorサンプルデモ (4チャンネル同時受信) のインストール、設定、実行の方法を説明します。

 
  1. サンプル・デモ・プログラム(Multi-Fosphor)コードのアップデート

    1. 本書の手順を実行する前に、必ず「LinuxでのUSRP-X410開発環境の構築 」を参照のうえ、X410用のLinux環境(UHD 4.1.0.5/GNU-Radio 3.8.2.0/RFNoC 4)セットアップを実施してください。
    2. まずホストPCでTerminal(端末)を起動し、Terminal上で次のコマンドによりサンプルプログラムのホスト側ソースコード(multi_fosphor_example.py)を最新版にアップデートします。
cd $HOME
git clone https://github.com/EttusResearch/gr-ettus
cd $HOME/git/gr-ettus

 
ただし、上記は、GNU-Radioセットアップ時にリポジトリのクローン先を「$HOME/git」にした場合です。
 
git pull
1-1-a.png
ちなみに、クローンしたFosphorデモのホスト側ソースコード(multi_fosphor_example.py)は、「$HOME/git/gr-ettus/examples/rfnoc/fosphor」ディレクトリにあります。ただし上記は、GNU-Radioセットアップ時にリポジトリのクローン先を「$HOME/git」にした場合です。
 
  1. 次のコマンドにより、正しくアップデートできたか確認します。
git log --oneline
 
下図のような表示になっていれば、アップデート完了です。
1-2-a.png
スペースキーを押して最終行まで表示すると、「(END)」マークが表示されますので、内容を確認したら、<:q> と入力して終了します。
 
  1. Fosphor RFNoCイメージのロード

    1. まず、以下の2種類のX410用4チャンネルFosphor RFNoCイメージファイル(下記の添付ファイル)を、ホストPC(Linux:Ubuntu)上の任意のディレクトリ(例:$HOME/workdir)に保存します。
  • usrp_x410_fpga_X4_200_fosphor_v4.1.0.5.bit
  • usrp_x410_fpga_X4_200_fosphor_v4.1.0.5.dts
​​
2-1-a.png
上図は、上記ファイルを保存後の「$HOME/workdir」ディレクトリ内容です。
 
  1. 次のコマンドにより、X410が正常に検出できること、およびX410のIPアドレス(1GE)を確認します。
uhd_find_devices
2-2-a.png
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
 
  1. 次のコマンドを実行することにより、上記ディレクトリ(例:$HOME/workdir)にダウンロードしたイメージファイルをX410にロードします。
uhd_image_loader --args="type=x4xx,addr=<X410のIPアドレス>,fpga=X4_200" --fpga-path=$HOME/workdir/usrp_x410_fpga_X4_200_fosphor_v4.1.0.5.bit
2-3-a.png
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
 
次のコマンドにより、イメージファイルが正しくX410にロードされたか確認します。
 
uhd_usrp_probe --args="addr=<X410のIPアドレス>"
2-3-b.png
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
 
上図表示の途中にある「Static connections on this device:」セクションの中に、下図のように4組のFosphorチャンネル(0/Fosphor#0~#3)が表示されていることを確認します。
2-3-c.png
 
  1. サンプル・デモ・プログラム(Multi-Fosphor)の実行

    1. X410前面パネルにある4つのRX1ポートのそれぞれに観測したい信号を入力します。
 
  1. 本デモ用の送受信バッファメモリのサイズを指定するために、次の2つのコマンドを実行します。

sudo sysctl -w net.core.rmem_max=25000000
sudo sysctl -w net.core.wmem_max=25000000

3-2-a.png

  1. ホストPCのTerminal(端末)上で、以下の2つのコマンドを実行することにより、サンプル・デモ・プログラム(Multi-Fosphorデモ)を起動します。

cd $HOME/git/gr-ettus/examples/rfnoc/fosphor
PYTHONPATH=/usr/local/lib/python3/dist-packages python3 ./multi_fosphor_example.py --channel_select 0 1 2 3 --args "addr=<※X410の high-speed interfaceのIPアドレス>" --bandwidth 100000000 --channel_freq 2450000000 1750000000 915000000 725000000 --channel_gain 50 50 50 50

ちなみにデフォルトでは、<X410の high-speed interfaceのIPアドレス>= 192.168.10.2 です。

X410のHigh-Speed Interface(QSFP28ポート)のIPアドレス初期値は下表のようになっています。
また、下表内のConfiguration Fileは「(X410にssh接続後) /data/network/」に保存されています。

Interface NameDescriptionDefault ConfigurationConfiguration File Example:
X4_200 FPGA image
 eth0 RJ45 DHCP eth0.network DHCP
 int0 Internal 169.254.0.1/24 int0.network 169.254.0.1/24
 sfp0 QSFP28#0 (4-lanes interface or lane 0) 192.168.10.2/24 sfp0.network 192.168.10.2/24
 sfp0_1 QSFP28#0 (lane 1) 192.168.11.2/24 sfp0_1.network 192.168.11.2/24
 sfp0_2 QSFP28#0 (lane 2) 192.168.12.2/24 sfp0_2.network 192.168.12.2/24
 sfp0_3 QSFP28#0 (lane 3) 192.168.13.2/24 sfp0_3.network 192.168.13.2/24
 sfp1 QSFP28#1 (4-lanes interface or lane 0) 192.168.20.2/24 sfp1.network N/C
 sfp1_1 QSFP28#1 (lane 1) 192.168.21.2/24 sfp1_1.network N/C
 sfp1_2 QSFP28#1 (lane 2) 192.168.22.2/24 sfp1_2.network N/C
 sfp1_3 QSFP28#1 (lane 3) 192.168.23.2/24     sfp1_3.network N/C

 

  1. 上記コマンド内の周波数指定は、必要に応じて変更可能です。上記のコマンドが正しく実行されると、下図のように、4チャンネル分のFosphorディスプレイが表示されます。

3-3-a.png
上記ディスプレイ表示の初期ウィンドウはかなり小さいので、マウスでウィンドウサイズを変更したり、ウィンドウ最大化ボタンにより最大化表示してください。また、「--no_gui」オプションを付けて上記コマンドを実行することによって、4チャンネル分のスペクトラム表示のみにすることもできます。
 

  1. デモを終了する場合は、ウィンドウ右上のクローズボタンにより終了します。

 

  1. トラブルシューティング

    1. 以下のようなエラーが表示されてデモの起動に失敗した場合、PythonがGNU Radio または 「UHD/gr-ettus」ディレクトリのPythonサポートライブラリを見つけることができなかったことを示しています。その場合は、GNU RadioのインストールやUHDとgr-ettusのコンパイルとインストールの手順が成功し、プロセス中にエラーが発生していないことを再確認してください。また、これらのモジュールが別のディレクトリにインストールされた可能性もあります(他のLinuxディストリビューションでもあり得ます)。必要であれば、PYTHONPATH環境変数に、これらのモジュールを検索するための追加のパスを設定することができます。

エラー表示の例

   ModuleNotFoundError: No module named 'gnuradio'

or ModuleNotFoundError: No module named 'ettus'

  1. デモの起動に失敗し、コンソールに「[ERROR] (MainThread) No fosphor chains found」と表示された場合、デモはUSRPへの接続に成功したが、与えられたデバイスにFosphor対応チャンネルが見つからなかったことを示します。argsパラメータに正しいネットワークアドレスが指定されていること、Fosphor対応のRFNoCイメージがX410に正常に書き込まれたことを確認してください。

 

  1. デモの起動に失敗し「RuntimeError: ValueError: Histogram decimation value must be in [2, 1024]」というメッセージが表示された場合、「-bandwidth」パラメータの値が低すぎることが考えられます。10M未満の値を使用しないでください。
  1. デモが実行されても、パフォーマンスが悪く表示が遅れたり、ロックしたり、コンソールに「O」という文字が書き込まれたり、「gr::log :DEBUG: rfnoc_rx_streamer - UHD recv() call timed out」などのメッセージが表示された場合、デモがX410からのデータ受信に追いつけないことを示しています。
  • --args」パラメータには、管理インターフェイスのIPアドレスではなく、高速インターフェイスのIPアドレスを使用していることを確認してください。
  • --bandwidth」パラメータで指定した帯域幅を小さくしてください。

 

  1. Hints & Tips

    1. このデモは、特に活発に使用されている周波数帯にチャンネルを合わせると、目を引くものになります。LTEのアップリンク/ダウンリンク周波数、2.4GHzおよび5GHzのWi-Fi周波数、FM放送帯の中心周波数(100MHz)、または地域のISM帯などが適しています。
  1. スペクトラムやヒストグラムの設定をコントロールするスライダーは、場合によっては非常に敏感であったり、有効な範囲が狭かったりします(スペクトラム設定のMax Hold Decayスライダーがその良い例です)。スライダーが反応しにくくなったり、表示が変化しなくなったりした場合は、デモを停止して再起動し、値をデフォルト値にリセットすることを検討してください。これは既知の問題であり、将来のアップデートで対処される予定です。

 

次のステップ