-
サンプル・デモ・プログラム(Multi-Fosphor)コードのアップデート
- 本書の手順を実行する前に、必ず「LinuxでのUSRP-X410開発環境の構築 」を参照のうえ、X410用のLinux環境(UHD 4.1.0.5/GNU-Radio 3.8.2.0/RFNoC 4)セットアップを実施してください。
- まずホスト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
ちなみに、クローンしたFosphorデモのホスト側ソースコード(multi_fosphor_example.py)は、「$HOME/git/gr-ettus/examples/rfnoc/fosphor」ディレクトリにあります。ただし上記は、GNU-Radioセットアップ時にリポジトリのクローン先を「$HOME/git」にした場合です。
- 次のコマンドにより、正しくアップデートできたか確認します。
git log --oneline
下図のような表示になっていれば、アップデート完了です。
スペースキーを押して最終行まで表示すると、「(END)」マークが表示されますので、内容を確認したら、<:q> と入力して終了します。
-
Fosphor RFNoCイメージのロード
- まず、以下の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
上図は、上記ファイルを保存後の「$HOME/workdir」ディレクトリ内容です。
- 次のコマンドにより、X410が正常に検出できること、およびX410のIPアドレス(1GE)を確認します。
uhd_find_devices
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
- 次のコマンドを実行することにより、上記ディレクトリ(例:$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
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
次のコマンドにより、イメージファイルが正しくX410にロードされたか確認します。
uhd_usrp_probe --args="addr=<X410のIPアドレス>"
上図の場合、X410のIPアドレス(1GE)は、「192.168.11.10」です。
上図表示の途中にある「
Static connections on this device:」セクションの中に、下図のように4組のFosphorチャンネル(
0/Fosphor#0~#3)が表示されていることを確認します。
-
サンプル・デモ・プログラム(Multi-Fosphor)の実行
- X410前面パネルにある4つのRX1ポートのそれぞれに観測したい信号を入力します。
- 本デモ用の送受信バッファメモリのサイズを指定するために、次の2つのコマンドを実行します。
sudo sysctl -w net.core.rmem_max=25000000
sudo sysctl -w net.core.wmem_max=25000000
- ホスト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 Name | Description | Default Configuration | Configuration 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 |
- 上記コマンド内の周波数指定は、必要に応じて変更可能です。上記のコマンドが正しく実行されると、下図のように、4チャンネル分のFosphorディスプレイが表示されます。
上記ディスプレイ表示の初期ウィンドウはかなり小さいので、マウスでウィンドウサイズを変更したり、ウィンドウ最大化ボタンにより最大化表示してください。また、「--no_gui」オプションを付けて上記コマンドを実行することによって、4チャンネル分のスペクトラム表示のみにすることもできます。
- デモを終了する場合は、ウィンドウ右上のクローズボタンにより終了します。
-
トラブルシューティング
- 以下のようなエラーが表示されてデモの起動に失敗した場合、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'
- デモの起動に失敗し、コンソールに「[ERROR] (MainThread) No fosphor chains found」と表示された場合、デモはUSRPへの接続に成功したが、与えられたデバイスにFosphor対応チャンネルが見つからなかったことを示します。argsパラメータに正しいネットワークアドレスが指定されていること、Fosphor対応のRFNoCイメージがX410に正常に書き込まれたことを確認してください。
- デモの起動に失敗し「RuntimeError: ValueError: Histogram decimation value must be in [2, 1024]」というメッセージが表示された場合、「-bandwidth」パラメータの値が低すぎることが考えられます。10M未満の値を使用しないでください。
- デモが実行されても、パフォーマンスが悪く表示が遅れたり、ロックしたり、コンソールに「O」という文字が書き込まれたり、「gr::log :DEBUG: rfnoc_rx_streamer - UHD recv() call timed out」などのメッセージが表示された場合、デモがX410からのデータ受信に追いつけないことを示しています。
- 「--args」パラメータには、管理インターフェイスのIPアドレスではなく、高速インターフェイスのIPアドレスを使用していることを確認してください。
- 「--bandwidth」パラメータで指定した帯域幅を小さくしてください。
-
Hints & Tips
- このデモは、特に活発に使用されている周波数帯にチャンネルを合わせると、目を引くものになります。LTEのアップリンク/ダウンリンク周波数、2.4GHzおよび5GHzのWi-Fi周波数、FM放送帯の中心周波数(100MHz)、または地域のISM帯などが適しています。
- スペクトラムやヒストグラムの設定をコントロールするスライダーは、場合によっては非常に敏感であったり、有効な範囲が狭かったりします(スペクトラム設定のMax Hold Decayスライダーがその良い例です)。スライダーが反応しにくくなったり、表示が変化しなくなったりした場合は、デモを停止して再起動し、値をデフォルト値にリセットすることを検討してください。これは既知の問題であり、将来のアップデートで対処される予定です。