一部界隈で話題のワンセグチューナを転用したSDR(Software Defined Radio)を試してみました。
ワンセグチューナーなら何でも転用可能なわけではなく、SDR用に転用するにはRTL2832Uを採用したチューナーである必要があります。
※本来、RTL2832UはUSB2.0インタフェースを搭載したOFDM復調ICとしてカニさんマークのRealtekが販売している製品です。
RTL2832U DVB-T COFDM Demodulator + USB 2.0 | Realtek
ワンセグチューナーをSDR化すると、ワイドバンドレシーバとして使えるようになります。ワイドバンドレシーバなので、普通のラジオでは聞けない周波数、例えば航空無線などが聞けたりします。さらに、音声に限らず航空機のACARSや船舶のAIS情報を受信し、ソフトウェアで処理することで航空機や船舶の位置情報を知ることができるようにもなります(Flightrader24やMarinetrafficのようなアプリの元ネタが直接受信できることを意味します)*1。
ということで、面白そうなので試してみました。
使用チューナー
ZOXのDS-DT305BKを使用しました。
ゾックス パソコンでワンセグテレビを楽しめるUSB接続ワンセグチューナー ブラック DS-DT305BK
- 出版社/メーカー: オウルテック
- 発売日: 2012/08/08
- メディア: Personal Computers
- 購入: 4人 クリック: 8回
- この商品を含むブログ (5件) を見る
Android編
Nexus7(2013)で試してみました。基本的にUSBホスト機能があればタブレットでもスマートフォンでも何でもいいと思われますが、特殊な使用形態のため動作しない機種もあるかもしれません。
DS-DT305BKを含めワンセグチューナーは基本的にフルサイズのUSB端子のため、Android端末のmicroUSB端子にはそのままでは刺さりません。OTGケーブルのようなUSB-microUSB変換アダプタが必要です。今回は、以下の投稿で紹介したアダプタを使用しました。
wave.hatenablog.com
Rtl-sdr driver(無料)
Google Playストアで公開されている以下のRtl-sdr driverを導入します。これ自体はドライバなので、受信した音声を聞いたりデータを表示したりすることはできません。
RTL2832U driver - Google Play の Android アプリ
SDR Touch(無料・機能制限有)
上記のRtl-sdr driverの開発者と同じ開発者によるレシーバアプリ。FM/AM/narrowband FM/USB/LSBを復調して聴くことができます。
SDR Touch - Live offline radio - Google Play の Android アプリ
以下は、TOKYO FM(80.0MHz)を受信している様子。ワンセグチューナーに付属のロッドアンテナでも一応受信できています。
全機能をアンロックするためには以下のキーの購入が必要です。DEMO MODEの表示が消え、スペアナや録音機能などが使用可能になるようです。
SDR Touch Key - Google Play の Android アプリ
Air Band Receiver(無料)
エアバンド(118~136MHz)の受信に特化したアプリ。
Air Band Receiver - Google Play の Android アプリ
- アプリアイコンをタップすると以下の画面が表示されるので、"Connect"をタップします。
- 次の画面で"Validate"をタップして、サーバ(Rtl-sdr driver)との接続を確認します(Rtl-sdr driver側で事前に何かをする必要はありません)。
- USBデバイス(すなわひワンセグチューナー)にドライバ(Rtl-sdr driver)をアクセスさせてよいか、OS(Android)から確認ダイアログが表示されるため"OK"をタップ。
- レシーバを模した受信画面が表示され、音声出力されます。が、当然の如くワンセグチューナー付属のロッドアンテナでは受信できませんでした。エアバンドの周波数に適したアンテナを別途用意する必要があります。
Windows編
Windows 10(64bit版)搭載機で試してみました。今回紹介する方法ではPCのUSBポートにワンセグチューナーを繋がないため、ドライバ周りなどを気にする必要はありません。
※PCに直接チューナーを繋いで利用することも可能です。
SDR#/SDR sharp(無料)
AIRSPYというRTL2832Uドングルの販売元が公開しているレシーバソフトウェアを導入します。
Download | airspy.com
導入といってもインストール不要で、ダウンロードしたZIP中のSDRSharp.exeを実行するだけで起動します。
- server起動(Android端末側の操作)
- client起動(WindowsPC側の操作)
- PCでSDRSharp.exeの実行を試みると、OS(Windows)に警告されるため、セキュリティリスクを許容できるのなら"実行"を押下して起動する(事前にウイルススキャンを行うなど、最低限必要なレベルの自衛措置は取りましょう)。
- SourceをRTL-SDR(TCP)に変更。
- 歯車ボタンを押下し、RTL-TCP Settingsダイアログを表示させる。
- Android側の設定に合わせてHost/Port/Sample Rateを変更して閉じる
- SDR#ウインドウで周波数を設定し、再生ボタン(停止ボタンとトグル表示)を押下すると復調された音声が再生される。
(復調方式はNFM/AM/LSB/USB/WFM/DSB/CW/RAWから選択可能)
- (参考) 正常に接続されていれば、Android側で"SdrTcp: Client has connected."というメッセージが表示されていることが確認できる
- (参考) 正常に接続されていれば、Android側で"SdrTcp: Client has connected."というメッセージが表示されていることが確認できる
- PCでSDRSharp.exeの実行を試みると、OS(Windows)に警告されるため、セキュリティリスクを許容できるのなら"実行"を押下して起動する(事前にウイルススキャンを行うなど、最低限必要なレベルの自衛措置は取りましょう)。
やっていることは、Android端末がSDRサーバとなり電波をTCPパケット化し、クライアントとなるWindows PCでソフトウェア的に復調処理するといった感じの分散処理と言えそうです。
AndroidのRtl-sdr driverのUI上で、sdr_tcpコマンドらしきものでサーバ起動していますが、コンソール中のメッセージや引数などから察するにrtl_sdrコマンドをAndroidに移植したもののようです。rtl_sdrコマンドのオリジナルは以下のもので、パラメータ変更時など参考になると思います。今回はAndroidを利用していますが、LinuxマシンやRaspberry PiですらSDRサーバになれるようです。
rtl-sdr – OsmoSDR
参考までに、一連のRtl-sdr driverのコンソール出力(?)っぽいものは、正常動作時は以下のように出力されます。
# START_STREAMをタップ RtlSdr: found 1 device opening options Only 1 option available, no need to ask user. Opening rtl-sdr /dev/bus/usb/002/002 Queueing Arguments SdrTcpArguments{gain=24, samplerateHz=1024000, frequencyHz=91800000, address='0.0.0.0', port=14423, ppm=0} Starting service with device rtl-sdr /dev/bus/usb/002/002 Permissions granted and device is accessible Opening fd 25 Set sampling rate to 1024000 Tuner gain set to 2.400000 dB SdrTcp: Listening on 0.0.0.0:14423 Device was open. Closing the prompt activity. SdrTcp: Waiting for client... The rtl-tcp implementation is running and is ready to accept clients Acquired wake lock. Will keep the screen on. Starting was successful! # CLIENTが接続 SdrTcp: TCP server succesfully started and listening for clients! SdrTcp: Client has connected. set sample rate 1024000 set freq correction 0 set agc mode 0 set gain mode 1 set tuner gain by index 0 # KILLをタップ Closing device SdrTcp: Requested sdrtcp stop asynchroneously SdrTcp: Command listener thread exiting SdrTcp: Waiting for command thread to die SdrTcp: TCP server shutting down. SdrTcp: Closing sdrtcp due to main thread finishing SdrTcp: Closing from state 0 SdrTcp: Server thread shut down rtlsdr_read_async finished successfully SdrTcp: Requested sdrtcp stop but already stopped Successfully closed service Wake lock released Closing service
受信感度向上のためにアンテナを屋外或いは窓際に設置したい場合でも、Android端末などであれば容易に移動可能ですが、PCの場合は面倒です。PCを移動させずに、アンテナとチューナー間を同軸ケーブルで引き回すことも可能でしょうけれど、単純に邪魔だったり減衰が気になったりすることもあるでしょう。といった観点から、PCとチューナーを物理的に切り離せる方がメリットが多いのではないかと思います。
以上。