JI3GAB/blog

ラジオに関する話題を中心につらつらと

rtl_tcpとVirtualBoxを使ってGNURadioからRTL-SDRを使う1つの方法

2013-05-07 22:51:34 | ソフトウェアラジオ
RTL-SDR関係の情報を調べているとGNURadioを使ったソフトウェアや実験をしているページが見つかります。また、何かこれをきっかけにSDRの実験をやろうという時にGNURadioを使えると色々と助かります。

GNURadioは基本的には信号処理を行うためのライブラリ群なのですが、信号処理のユニット(例えばフィルタや発振器等)が「ブロック」として定義されていて、それらを接続してフローグラフ(flow graph)を構成することで必要な一連の信号処理を行うことができます。さらに、GNURadio Companion(GRC)というグラフィカルなツールが用意されていて、その上でブロックを繋いで行くだけで、信号処理プログラムを生成させることも出来るようになっています。

このように便利なGNURadioですが、Windows上にインストールするのは結構面倒そうです(自分でやったことは無いのですが、多分CygwinやMinGWを使ってということになるのかな)。

一方でLinux、特にDebian, Ubuntu, Fedora, Cent OSなどのメジャーなディストリビューションやそれらから派生したものでは比較的簡単にインストールすることができます。このエントリでは詳しくは述べませんが、build-gnuradioというスクリプトを走らせればほぼ自動的にやってくれます。

しかし、1台しかPCが無く、メインのOSはWindowsで無ければならないという場合にはちょっと困ってしまいます。1つはデュアルブートにするという手がありますが、GNURadioを使うために再起動するのはかなり面倒です。

そこで考えるのがVMWareやVirtualBoxといった仮想化ソフトウェアを用いてLinuxをゲストOSとしてインストールする方法です。
これは一応理屈としてはうまく行くはずなのですが、問題があります。RTL-SDRのチューナはUSB接続です。仮想化ソフトウェアにはUSBパススルーの機能があって、PCに接続したUSB機器をゲストOS(この場合はLinux)から利用するように設定することが出来ますが、実際にやってみるとどうも転送速度が出ないようで、RTLSDRのサンプリングレートを1Msps等にすると転送が追いつかず、buffer underrunと思しきエラーが起こります。
私が現在利用しているのはOracle(元はSUN)が提供しているVirtualBoxですが、メーリングリスト等を見ているとVMWare Playerでも同じような問題があるようです。

これを回避するためUSBパススルーは利用せず、ホストのWindows側でrtl_tcp.exeを起動しておき、ネットワーク経由でゲストOSから接続するというのが今回の主旨です(それだけですHi)。すでに仮想マシンやGNURadioを使った経験のある方は、もう何をするのかお分かりだと思いますが、以下簡単に手順を書いておきます。

準備としてホストOSのWindows上にVirtualBoxをインストールし、ゲストOSとしてUbuntu Linux等をインストールします。ネットワークの設定はNATでもブリッジでも利用したい形態に合わせて設定します。さらにゲストOS上で先ほど触れたbuild-gnuradioスクリプトを用いてGNURadio一式をインストールしておきます。GNURadioからRTL-SDRを利用するためのライブラリ等もデフォルトでインストールされます。

rtl_tcpはosmocomで提供されているソフトウェアで、SDR#等で利用したことのある方もいらっしゃると思います。
rtl_tcpはデフォルトではlocalhost(127.0.0.1)からの接続のみ受け付けるようなので、オプションでWindowsに割り当てられているアドレスをオプションで指定します。例えばコマンドプロンプトから

> rtl_tcp -a 192.168.0.3

等と入力して起動し、接続待ち状態にします。Windowsの使用しているIPアドレスが分からない場合はipconfigコマンドやコントロールパネル等で調べましょう。ポート番号はデフォルトの1234でとりあえず良いとおもいますが、変更したい場合は'-p'オプションで指定します。

ゲストのLinux上のGNURadio側では、信号源としてOsmoSDR Sourceを使い、デバイス名を"rtl_tcp=192.168.0.3:1234"と指定すれば、GNURadioからWindowsで起動しているrtl_tcpに接続することができます。
もしうまく接続出来ない場合は、Windowsのファイアウォールで接続が禁止されていないか等、調べてみてください。

以上説明したような方法でGNURadioを使用している時のスクリーンショットを貼っておきます。GNURadioで動かしているのはサンプルとして作ったFM放送の受信機です。GNURadioにはWBFMという名前のFM復調器のブロックがあるので、それを使えば復調できます。また、グラフィカルなFFTのブロックも用意されているのでそれを利用しています。

何か今更感がすごくてためらったのですが、せっかく書いたのでご参考まで。





コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする