
SDR (Software Defined Radio) を試します。
SDRと一口に言っても、 ハードウェアは何を使うのか、(PCと接続する前提で)RTL2832U+R820T2などを搭載したいわゆるRTL-SDRドングルか?より高性能なHackRF OneやUSRPか?それともPCとは独立させる1のか? ソフトウェアはどうするか、既存のものをそのまま使うのか?多少はアレンジするのか?それともフルスクラッチか? そもそも受信だけか、送信もするのか? といろいろあるでしょう。
今回の記事は「RTL-SDRをドングルを使って、既存のソフトウェアをそのまま使って、(ハードウェア的に送信できないので)受信のみする」内容です。
セットアップ
主にハードウェアをセットアップしていきます。
ハードウェアの選定
実は選定もなにも、すでに手元には
- (おそらくRTL2832U+R820Tが搭載の)“DVB-T+DAB+FM”と書かれたドングル(2014年にaitendoで購入)
- RTL-SDR Blog V3ドングル(2019年にAliExpressのRTLSDRBlog Storeで購入)
があります。 RTL-SDR Blog V3ドングルのほうが動作が安定しているのでこちらで試しましょう。
RTL-SDR Blog V3ドングルの主なスペックは下記のとおり。
- 周波数範囲: 500 kHz ~ 1766 MHz
- 帯域幅: 安定的に使えるのは2.4MHz(仕様上の最大は3.2MHz)
- ADC解像度: 8bit
- 送信: 不可(受信のみ)
特に不満はありません。 ただ、もし不満が出るとしたら帯域幅が狭いのと送信ができない点なので、そうなったらHackRF Oneあたりに買い替えると思います。
ドライバ類
ドライバ類をセットアップしていきます。
ここではWindows環境に導入していきますが、RTL-SDR Blogのガイドに従ってSDRSharpの導入から進めていけば特に詰まるところはありません。
Quick Start Guide
SDR# (SDRSharp) Set Up Guide (Tested on Windows 11/10/8/7) (XP/Vista Incompatible) (Works with RTL-SDR Blog V4/V3)
https://www.rtl-sdr.com/rtl-sdr-quick-start-guide/
MacやLinux環境に導入する場合でも、“Getting Started on Linux” や “Getting Started on Mac OSX” に沿って進めれば問題ないでしょう。 RTL-SDR Blog V3ドングルに限らず、他のRTL-SDRドングルでもRTL2832Uが搭載されていれば2同様の手順でいけます。
なお、SDRSharpについてこの記事を執筆している時点の最新版は “revision 1921 (2025-01-01)” です。 少なくともこのバージョンには “SDRSharp.dotnet8.exe” と “SDRSharp.dotnet9.exe” という2つの実行ファイルが含まれていますが、dotnet8を選ぶことをおすすめします。 dotnet9だとPluginが動きませんでした。 (Pluginが悪いのかdotnet9が悪いのかは切り分けていません。)
アンテナ
次はアンテナの話です。
これまでその辺のよく分からないロッドアンテナ(おそらく144/430MHz帯向け)を室内で使ってきました。 え、これまで?使ってきました? この記事はいかにもSDRをこれから試しますという内容に見えますが、ドングルを購入したのは2014年や2019年。 その頃から塩漬けにしてきたわけではありません。 たまに思い出しその辺のよく分からないアンテナを使って、ノイズまみれのFMラジオやエアバンドをかろうじて聞いたり、LTE-Cell-Scannerを使ってみたり3しました。 ただ、これだと近くの信号や強い信号しか見えません。 もっとよく分からない謎の信号が見たい。
少しはまともなアンテナを用意しましょう。 どんな周波数範囲もキャッチできるように広帯域のほうが良いですよね、持ち運びはしないので多少ゴツくても大丈夫です。 ただ、既製品の固定局用アンテナ(ディスコーンアンテナ)はそれなりの価格もするしまともすぎる。飽きたら処分に困る。 小型のハンディアンテナは室内受信だと性能が期待できない。
そこで、安価なアンテナを自作することにしました。
Planar Disk Antenna
RTL-SDR Blogのガイドでは、下記のPlanar Disk Antenna4と呼ばれるアンテナが紹介されています。
Planar Disk Antennas
Kent Britain WA5VJB/G8EMY
https://www.wa5vjb.com/references/PlanarDiskAntennas.pdf
構造としては、ピザパン5 (Pizza Pan) 2つを隣接して配置し、同軸ケーブルの芯線を一方のピザパンに、外部導体をもう一方のピザパンに接続するというもの。 簡単そうですね。 受信可能な周波数範囲の下限はピザパンの直径による(1/4波長)、上限はピザパン同士の距離によるらしい。 製作サンプルでは直径18インチのピザパンを使って、2 Meter6 ~ 1296 MHzとのこと。
でも直径18インチ(約46cm)のピザパンはなかなかありません。 専門店には売っていると思いますが少なくとも100均には無く、あるのはせいぜい直径30cmのステンレス製カレー皿(300円)くらいです。 直径30cmだと周波数範囲の下限は250MHzほどになります。 いや……もう少し低い周波数帯も見たい。
なんかもう板に何かの金属を貼って使えば良いのでは? ということで、段ボールにアルミホイルを貼り付けて、その辺の2x4材に固定してみました。
自作Planar Disk Antenna(床をぼかした結果、オーラを発するようになった)
あまりに趣きのある外観。諸行無常。侘び寂び。 屋外に出したら一瞬で壊れるでしょう。 アルミシートとか、金網とかを使ったほうがマシだったかも知れません。
なお、同軸ケーブルはTV受信用の75Ωを使っています。 本来であれば50Ωの同軸ケーブルが適切です。 また、段ボールを円形に切るのが面倒だったので四角形のままとしました。
周波数範囲の下限は110MHzほどの想定。 実際に使っている様子は後述しますが、なかなか良かった。 少なくとも以前のよく分からないアンテナよりは良かったです。
ループアンテナ
110MHzよりも低い周波数帯も受信したいです。 Planar Disk Antennaのサイズを大きくしたり巨大なダイポールアンテナを作るのは難しい。 そこで、ループアンテナを作って試してみます。
ループアンテナと言ってもいろいろあるようですが、ここでは下記のWebサイトを参考にマグネチック・ループアンテナ7を作りました。
Cepstrum, 受信専用マグネチック・ループアンテナ
https://www.cepstrum.co.jp/hobby/magnetic_loop/2magnetic_loop.html
中波帯対応受信用 マグネチック・ループアンテナの作り方 3D無線クラブ
https://www.ddd-daishin.co.jp/ddd/56-loopant-bcl/index.htm
マッチング部は設けていません。 同軸ケーブルはやはり75Ωのものを使用しています。
これも実際に使っている様子は後述しますが、AMラジオの周波数帯ではちゃんと受信できました。 この周波数帯域はPlanar Disk Antennaだとまったく受信できなかったところです。 (受信可能な周波数範囲から外れているので当然といえば当然) 一方で、60MHzあたりになってくるとPlanar Disk Antennaと同じような……120MHzあたりになってくるとPlanar Disk Antennaのほうが良い、という感じでした。
ほか
専用の周波数帯に向けたアンテナも作ってみました。 具体的にはエアバンド(118 MHz ~ 136 MHz)用のダイポールアンテナ。 エレメントとして同軸ケーブルを利用したものとアルミテープを利用したものをそれぞれ作ってみましたが……ざつに作りすぎたのかPlanar Disk Antennaの方が良いという結果に。 これはボツです。
また、今回の記事ではADS-B (1090 MHz)の受信は行っていません。 そのため特にこれ用のアンテナなども作っていませんが、もし受信することになったらグランドプレーンアンテナか、コリニアアンテナを作ってみたいと思います。
アナログ無線
こうしてセットアップが済みました。 まずは、アナログ無線(AM, FM)を聴いてみましょう。
SDRSharpの設定
ここではSDRSharpを使います。
直感的なUIで、ちょっと使うだけなら何も意識せずに済みます。 適当に周波数を合わせて、受信モードやステップサイズを設定するだけです。
ただ、ちゃんと使うなら実行ファイルと同じ階層にあるFrequencies.xml
とBandPlan.xml
をちゃんと書くと便利です。
Frequencies.xml
には興味ある周波数を書いておく。 あくまで一例ですがこんな感じに。
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMemoryEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MemoryEntry>
<IsFavourite>false</IsFavourite>
<Name>NHKラジオ第1 関東</Name>
<GroupName>Broadcast</GroupName>
<Frequency>594000</Frequency>
<DetectorType>AM</DetectorType>
<Shift>0</Shift>
<FilterBandwidth>10000</FilterBandwidth>
</MemoryEntry>
<MemoryEntry>
<IsFavourite>false</IsFavourite>
<Name>NHKFM 東京</Name>
<GroupName>Broadcast</GroupName>
<Frequency>82500000</Frequency>
<DetectorType>WFM</DetectorType>
<Shift>0</Shift>
<FilterBandwidth>200000</FilterBandwidth>
</MemoryEntry>
</ArrayOfMemoryEntry>
そして、メニューから “Frequency Manager” を表示させておく。
Frequency Managerの表示
そのFrequency Managerから選択すると、AMとかWFM/NFMとかBandwidthとかが設定された状態で周波数に合わせてくれます。
BandPlan.xml
は……別に初期設定でも良いのですが、興味ある周波数帯の情報を書いておくと便利です。 たとえば、B型ワイヤレスマイク(ラジオマイク)に興味があればこんな感じに書いておく。
<RangeEntry minFrequency="806125000" maxFrequency="809750000" color="90FFA500" mode="NFM" step="125000">RadioMic (Type-B)</RangeEntry>
この辺に周波数を合わせたとき、どこからどこまでが帯域か表示してくれたり、自動でモードやステップサイズ8を合わせてくれます。
あとはPluginを入れておけば良い……のですが、この辺は試している途中でよく分かっていません。 なお、Pluginの導入手順について古いバージョンだとPlugins.xml
を書いていたようですが、現在(少なくともrevision 1921)ではPlugins/
フォルダにdllを入れるだけで済むようでした。
FMラジオ
以上で準備が済んだとして、実際に電波をゆんゆん受信してみましょう。 まずは分かりやすく、FMラジオの聴取を試します。
最初は以前からあった「よく分からないロッドアンテナ」。
FMラジオの受信(ロッドアンテナ)
かろうじて何か音が流れていることは分かりますが、鮮明ではありません。 おそらく144/430MHz帯向けのアンテナで、想定している周波数帯から外れているので仕方ないといえばそのとおり。
続いて、自作したPlanar Disk Antenna。
FMラジオの受信(Planar Disk Antenna)
こちらも想定している周波数帯(110MHz~)から外れていますが、普通に聞こえます。 素晴らしく鮮明!とまでは言いません。
おまけで自作のループアンテナ。
FMラジオの受信(ループアンテナ)
ロッドアンテナと同じ感じですね。
AMラジオ
続いてAMラジオ。ロッドアンテナとPlanar Disk Antennaではまったく受信できなかったため(当然)、ループアンテナのみです。
AMラジオの受信(ループアンテナ)
よく聞こえました。
ほか
残念ながら、HF帯のラジオNIKKEI第1 (6.055MHz) あたりは今回試したアンテナではいずれも受信できませんでした。 本当にアンテナのせいかは切り分けていません。外に出て、360度方向を変えて探れば受信できたかも知れませんね。
エアバンド(118 MHz ~ 136 MHz)は聞こえて、Planar Disk Antennaが一番良かった。 一応、ロッドアンテナやループアンテナでも聞こえることは聞こえます。
400MHzあたりでも、おおむねPlanar Disk Antennaが一番良かった。 ただ、ロッドアンテナも十分調整すればいい感じになってくる。
800MHzあたりはよく分かりません。 Planar Disk Antennaでかすかにワイヤレスマイクの信号を拾いましたが、他のアンテナでは未検証です。
デジタル無線
次はデジタル無線です。 デジタル無線と言っても多岐にわたりますが、ここでは温度計などのセンサやリモコンが出している、いわゆる「テレメータ」の信号を見てみます。
とりあえず周囲のセンサやリモコンを手当たり次第見つけて、デコードしまくりましょう。 merbanan/rtl_433を利用すれば、スキャンしてデコードしてくれます。
インストールして、こんな感じに実行します。 これで各種周波数を60秒間スキャンして切り替えつつ、見つかった信号が(既知のものなら)デコードしてくれるはずです。
$ rtl_433 -f 315M -f 433.92M -f 868M -f 915M -H 60 -v
……ところが、何の反応もありません。 周囲に何もセンサやリモコンが無い? いえいえ、「CITIZEN THD501」という、コードレス温湿度計がありました。 子機が親機に対して、温度などの情報を無線で送っているようです。
技適によると周波数は426.025MHz、ちなみに電波の形式はF1Dとのことで周波数変調らしい。 これをもとに、もう一度rtl_4339を実行してみます。
$ rtl_433 -f 426.025M -v
……依然として何の反応もありません10。 本当に電波出てて受信できているんですか?ということで、SDRSharpで確認します。
426.025MHzの確認
ちゃんと受信できていました。FSKっぽい様子も見えます。 rtl_433だとこのセンサーは対応していないようですね。
そこで、jopohl/urhを利用して波形を見てみます。 見よう見まねでBPFを通して、シビアなしきい値を調整すると、なんとかビット列までは出てこさせられました。
426.025MHzの波形
ただ、この先は確認していません。 おそらくこの中にIDとか温湿度とかバッテリーの情報が含まれていると思いますが……。 ちゃんとデコードできたらまた記事にします。
おまけ: 温湿度計の分解
ここで信号を調査した温湿度計の分解もしてみました。 信号に関連するようなものは得られませんでしたが……。
分解自体は裏のネジを外すだけで行えます。 ただし、このネジが三角ネジでしかも小さい。少なくとも2.0mmのドライバーでは合いませんでした。 代わりに3.0mmのY字ドライバーがなんとか合ったので、なめないように気をつけながら外した結果がこちら。
温湿度計の中身
“MCU” とか “RF IC” が樹脂に覆われていますね。 COB (Chip On Board) で実装されていると思われるので、仮に樹脂を除去してもICの型番などは(少なくとも肉眼で簡単には)分からないでしょう。 “AD825311”は、TIのAD8253だとしたら計装アンプ? 裏面にあるかも知れません(分解しにくかったのでその辺は割愛)。 用途としては、無線関連?または下部の温度センサや湿度センサは抵抗値が変化するタイプのためこれを電圧に変換するために使っている? いや……このICは、いま手に入れようとすると安くても5ドルくらいします。 昔はもっと安かったのかも、大量購入で割引が効いていたのかも知れませんが……参考までにTHD501購入時(2016年)の価格は5000円程度。 これに親機と子機(いま分解している温湿度計)が含まれます。 その割にICだけで5ドルというのは高価なため、無線関連でどうしても必要だったかそもそも計装アンプとは関係ない11かも知れませんね。
温度センサはNTCサーミスタと思われる。 また、湿度センサは外観を見る限りCL-M53Rのような……? 実はこの温湿度計は過去に水を当ててしまって、それから湿度センサがうまく動いていません。 CL-M53Rを買って交換、いや入手性が悪いので特性が似ていそうな12HR202Lを買って交換したくなってきます。
おわりに
「SDRを試した日記 その0」でした。 温湿度計のデコードはしたい、また他のデジタル無線もデコードしたい思いはありますが、続編の「その1」があるかは分かりません。
アンテナについては、早くも自作したPlanar Disk Antennaの扱いに困っています。 デカすぎます! NCPL? YouLoop? は300MHzほどまでいけるようなので、とりあえずYouLoopを買って300MHz以下はそれで、それより上は小さめのPlanar Disk Antennaを作るとかで良いかも知れませんね。 それより屋外にクソデカアンテナ出すのが一番というのはそのとおり。
Footnotes
Armマイコンでつくるダイレクト・サンプリングSDRや、ARM Radio: A Cheap SDR built out of an ARM Processor and not much moreをイメージしています。 ↩
RTL2832Uが搭載されていないRTL-SDRドングルがあるのか、そもそもそれはRTL-SDRドングルと呼ばれるのか?は分かりませんが……。 ↩
2019年に青海展示棟で使ってみたり(特筆すべき点はなし)、別の場所では東京五輪用のMCC/MNCが書かれたMIB (Master Information Block)を広報する局を観測した思い出があります。 ↩
ちなみに、製作例1:Planar Disk Antenna | Scribblings of an Engineer、製作例2:[QuikHax:3] Creating a planar disk cookie sheet antenna for your RTL-SDR - YouTube ↩
ピザトーストのことではない。 ↩
馴染みがないが、144MHz(波長2m)帯の「ツーメーター」「2mバンド」のことを指していると思われる。 ↩
マグネチック・ループアンテナもいろいろあるようですが……今回作ったアンテナ以外にもYouLoop? NCPL? Moebius Magnetic Loop Antenna? など。今回は必要な部品が用意できなくて断念しましたが、いつかDIYに挑戦するかも知れません。参考1:マグネティックループアンテナの実験 – 自宅で隠遁生活 参考2:Moebius Magnetic Loop Antenna | Hackaday.io 参考3:DIY: How to build a Noise-Cancelling Passive Loop (NCPL) antenna | The SWLing Post ↩
もしかしたらステップサイズの指定はうまくいかないかも知れない……。 ↩
どうしても “rtl_443” と間違えそうになる。もし文中でこう書いていてもご容赦ください。 ↩
ちなみにドリテック製の温湿度計だといけるようです。参考: 市販のワイヤレス温度計|Takao Takahashi ↩
もし温湿度の測定用として使っていたらオーバースペック。そして5ドルもあれば、(あくまで個人で1個だけ買うとして)DHT20などのデジタル出力の温湿度センサ自体が買えてしまう ↩
似ているだけで、完全に同じとは言えない……。 ↩