RTL2832Uドングルは最大で3MHz程度でサンプリングすることが可能ですので、SDRソフトウェアを使った場合その帯域幅で信号を観察することができました。そこそこ広い帯域幅ではあるものの、信号がどこにあるのかわからない場合、周波数を手動でスキャンするなどの操作が必要でした。
スペアナのように広い周波数をいっぺんに観察できたらと思っていたのですが、そんな時librtlsdrメーリングリストにRTLSDR-Scannerについて投稿されていたのでこれを試してみました。
READMEを読むとLinuxとWindowsではテストされているとのことでしたが、構成を見るとpythonで実装されているようですので特にOS依存性は無さそうです。いつも通りMac OSXで試してみることにしました。
依存ライブラリは以下のとおりです。
- Python 2.6 or greater
- wxPython
- matplotlib
- numpy
- rtlsdr
- pyrtlsdr
既にGNURadioをインストールしてあれば殆どのものはカバーされているようですが、librtlsdrのpythonバインディングであるpyrtlsdrが足りなかったので、これを追加インストールする必要がありました。pipではインストールできなかったので、githubからソースを持ってきてsetupします。
$ git clone git@github.com:roger-/pyrtlsdr.git
$ cd pyrtlsdr
$ pyton setup.py install
RTLSDR-Scannerのコードはgithubからgit cloneしておきます。
$ git clone git@github.com:EarToEarOak/RTLSDR-Scanner.git
コードはpythonソース一つだけです。実行してみると、エラーが発生してしまいました。
$ cd RTLSDR-Scanner/src
$ python rtlsdr_scan.py
Traceback (most recent call last):
File "rtlsdr_scan.py", line 29, in
from matplotlib.backends.backend_wxagg import \\
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_wxagg.py", line 23, in
import backend_wx # already uses wxversion.ensureMinimal('2.8')
File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_wx.py", line 47, in
raise ImportError(missingwxversion)
ImportError: Matplotlib backend_wx and backend_wxagg require wxversion, which was not found.
wxpythonをbrewでインストールしている場合、以下のようにレシピを修正し、再インストールしておきます。
$ brew edit wxwidgets
"INSTALL_MULTIVERSION=1",
$ brew uninstall wxwigets
$ brew install wxwidgets
改めて起動してみます。
$ python rtlsdr_scan.py
起動に成功するとこのようなウインドウが現れます。
Range(MHz)の欄に、Start/Stopの周波数をセットして、Startボタンを押します。スキャンの進行につれてプログレスバーが表示され、完了するとスペクトルが表示されます。この例ではFM放送波が三つ見えます。
若干のノイズが見られます。スキャンは帯域幅が広ければそれだけ時間を要します。また、Dwellの設定によっても変化します。
マウスでエリアを選択することでスペクトルを拡大することが可能です。ホームボタンで全領域表示に戻ります。
RTL2832Uドングルは数十ppm程度の誤差がありますが、既知の周波数の信号を入れ、メニューからAuto Calibrationを選ぶことで、周波数を校正することができるようです。
以上、RTLSDR-ScannerをMac OSXで使うことができました。OSXで動作した旨報告したところ、テスト済環境としてOSXを追記してくれました。
SDRソフトウェアを使った場合はリアルタイムで信号を観察することが可能でしたが、RTLSDR-Scannerによるスキャンには帯域幅により十数秒から数分の時間がかかります。目的に応じて使い分けるのが良いと思われます。
以下は800-1000MHzを観察した例です。携帯電話の電波が見えます。変調方式でスペクトルの形が異なるのがわかります。
リファレンス
- Alさんのosmocom-sdrへの投稿 https://lists.osmocom.org/pipermail/osmocom-sdr/2013-January/000446.html
- RTLSDR-Scanner https://eartoearoak.com/software/rtlsdr-scanner
- github https://github.com/EarToEarOak/RTLSDR-Scanner
- wxpythonの修正方法@StackOverflow https://stackoverflow.com/a/10660785