Windows仮想環境下のUbuntuでGNURadioを動作させる

Radio

前記事でWindows上にVMwareでLinuxを動かす方法を記載しましたが、Ubuntu上でGNURadioを動かしてみると、正常な受信動作ができません。

原因を調べてみると、WindowsとVMware間のUSB通信速度は1Mbps程度に制限されており、GNURadioなど高速IO転送が生じるソフトを動作させると、USBチューナーからのデータ転送が間に合わず動作しないことが分かりました。

GNURadioのHPで記載されている対策方法は、rtl_tcpというソフトウェアを使ってLANのTCP経由でデータを配信する、と記載があったので試してみたところ、うまく動作しましたので記事にしておきます。

rtl_tcp.exeを入手

rtl_tcpはosmocomのHPにWindowsのバイナリがありますので、ダウンロードしてzipファイルを実行できる場所に展開します。

実行ファイルは、32bitと64bitがありますのでOSに適合するものを選択してください。

展開したファイルの中に、rtl_tcp.exeがありますので、Windowsのコマンドプロンプトで以下を実行すれば、受信データをtcp経由で配信することができます。

> rtl_tcp -a <Windows側のIPアドレス>

GNURadioフローグラフの入力ソースを修正

Ubuntu上のGNURadioの入力(osmocom SourceやRTL Source)が、USBチューナーからtcpに変わりますので、”rtl=0”を”rtl_tcp=<WindowsのIPアドレス>:1234”に書き換えます。

rtl_tcpの使い方

ipconigでipアドレスを確認し、rtl_tcp -a <自PCのIPアドレス>を入力して、配信をします。

ポートは"1234"がデフォルトですが変更も可能です。

rtl_tcpは外部にデータを出力するため、Windowsのファイアーウォールの確認ダイアログが出ますので許可してください。

RTL-SDRが見つかると次のようなメッセージが出て接続待ちになります。

RTLSDR>rtl_tcp  -a 192.168.0.102
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Tuned to 100000000 Hz.
listening...
Use the device argument 'rtl_tcp=192.168.0.102:1234' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).

GNURadioのフローグラフを実行して、rtl_tcpにアクセスがあると、データの受け渡しが開始され、GNUradioが動作します。

rtl_tcpの終了は、Ctrl + Cの入力です。

Use the device argument 'rtl_tcp=192.168.0.102:1234' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).
client accepted!
set gain mode 1
set agc mode 0
set direct sampling 0
Disabled direct sampling mode
set offset tuning 0
set bias tee 0
set sample rate 1015873
Exact sample rate is: 1015873.002204 Hz
set freq 479142000
set gain 297
......

VMwareのネットワーク設定はNATのままで、データ問題なく通過できているようです。

うまくいかない場合は、Windowsファイアウォールの設定やIPアドレスの間違い(WifiがあるPCは混同しがち)だと思いますので、再度よく確認してください。

気づいた制約等について

配信はTCPを使うため、たまにデータが欠落することがあります。

データの欠落は、アナログ放送だとノイズの発生となりますが、デジタル放送の場合はエラー補正ができないとデータの欠落になりますので、あまり好ましい使い方ではありません。

TCPの遅延が許容できない場合は、UDPに変えるというのが一般的な対策手法ですが、UDP配信するアプリは製作されていないようなので、根本対策としては仮想環境を使わない方法をとるしかなさそうです。