APRSの複数周波数・モードでのBeaconを、RTL−SDRでまとめて受信する

TL;DR

  • rtl_fm ではスケルチ機能を組み合わせて複数周波数の同時待機をします。
  • DirewolfはAFSK 1200bpsとGMSK 9600bpsの2個を立ち上げます。
  • 1個のrtm_fmからの標準出力を2個のDirewolfの標準入力に渡すため、tee などを使います。

コマンドはこのようになりました。

#!/bin/bash
thisdir="$(dirname $0)"
direwolf_conf="$thisdir/direwolf.conf"

(
  rtl_fm -M fm -f 144.64M -f 144.66M -f 431.04M -p 36 -s 48000  -l 20 -  | \
  tee >(direwolf -c "$direwolf_conf" -r 48000 -D 1 -t 0 -B 1200 - | logger -t direwolf1)| \
  direwolf -c "$direwolf_conf" -r 48000 -D 1 -t 0 -B 9600 - | logger -t direwolf9)  &
  
同じディレクトリにおいてある direwolf.conf の中身は、このようになっています。

ADEVICE null null
CHANNEL 0
MYCALL コールサイン-10
IGSERVER asia.aprs2.net
IGLOGIN コールサイン Passcode
PBEACON sendto=IG DELAY=0:30 EVERY=90:00 SYMBOL="igate" overlay=R lat=34^46.02 long=139^02 alt=in_meter comment="Inatori 144.640MHz, 144.660MHz, 431.040MHz Receive-only GW 1200bps+9600bps"

SDRドングルを使ったAPRS I-Gateについて

アマチュア無線で位置情報を送受信するAPRSでは、複数の周波数帯で複数のモードが使われております。最近ですと受信機にはUSBのSDR受信ドングルを用いて、PCやRaspberry Piで復調しインターネットにUploadするようなI-Gateを構築される方も多いでしょう。

 SDR受信ドングルではRealtek RTL2832Uが安価で流行っており、これを操作するソフトウェアで RTL-SDRが使えます。RTL−SDRにはSDRからの信号をFM復調など行うコマンドが収録されています。SDRから復調したFM音声を Direwolfというソフトウェアにわたすと、 AFSK, GMSKなどからデジタルデータへの復調を行ったうえで、受信した位置情報をインターネット上のサーバに送信するなどの、APRS I-Gate としての機能を実現してくれます。

複数周波数・モードへの対応

I-Gateを作るならば、どうせならば多くの周波数とモードに対応した受信環境を作って、全部インターネットに上げたいな、と考えたりしました。 諸先輩方の資料を読んでいると、複数の周波数やモードに対応するために、このようなことを行われていました。

  • 周波数ごとにSDRドングルを準備する。アンテナもその本数を準備するか、分配器使うか。
  • 近接する周波数ならば、1個のSDRドングルからIQ信号を出して複数のFMの復調を行って2チャンネル以上を取り出す。個々のチャンネルでデジタル信号への復号を行なう。

周波数ごとにSDRドングルを準備するのは、機材を増やす方向の解決策でソフトウェアでの工夫ができないものかと考えました。 IQ信号の方式も良さそうですが、今回は144MHzと431MHzの両方で受信しようと考えたので、別の方法を考えることにしました。

今回の利用環境はLinuxです。MacのShellならば似たような方法もできるかもしれません。Windowsではどうやればよいかわかりません。

いつも使っているSDRドングルのRTL-SDRを利用するコマンド rtl_fm の説明を読んでいたら、受信周波数を指定するオプション -f を複数並べたり範囲を指定して、スケルチ機能を設定すれば、複数周波数の受信待機ができるとのことでした。 同時にBeaconが来る場合は後から受信するBeaconを取り逃しますが、うちみたいにショボい受信環境ではそんなにBeaconの量が多いわけでもないので、まぁいいでしょう。これで一つの音声ストリームで複数の周波数・チャネルの内容がやってきます。

コマンドにすると、下記のようになります。 -l がスケルチのレベルですので、利用環境に合わせて調整してください。

rtl_fm -M fm -f 144.64M -f 144.66M -f 431.04M -p 36 -s 48000  -l 20 -  

この複数のチャネルでは、AFSK 1200bps とGMSK 9600bpsの2つのモードが混在してやってきます。また rtl_fmのFM復調された音声信号は標準出力へ出力されます。こんどは DirewolfをつかったソフトモデムでARPSの demod, decodeを行って、I-Gateとして送信します。 Direwolf の音声入力では標準的なコマンドから実行できるmodemの種類が1個までで1モードまで対応しています。ここは仕方ないので標準出力を2つに複製し、Direwolfを2個立ち上げることにしました。

コマンドにすると、下記のようになります。

tee >(direwolf -c "$direwolf_conf" -r 48000 -D 1 -t 0 -B 1200 - | logger -t direwolf1)| \
  direwolf -c "$direwolf_conf" -r 48000 -D 1 -t 0 -B 9600 - | logger -t direwolf9

1個目のtee は、通常ですと標準入力からの内容を、引数にある1個以上のファイルと teeの標準出力へ、複製しながら出力します。tee の引数部分ではファイルではなく「 >(direwolf ... )」 と書いたため、子プロセスがbashから起動され、子プロセスの標準入力へと出力されるようになっています。tee は更に標準出力に出力し、次の Direwolfへと渡します。

ついでに logger を実行して、Direwolf が標準出力に出力する情報を syslog へと渡しています。

このようにすることで、複数の周波数とモードを同時に受信する環境ができました。 Beaconの同時受信ができないという制約はありますが、1つの周波数を受信するのに比べて多くのBeaconが受信できるので、ちょっと嬉しいです。

この方式を取ってみての感想

この方式を稲取と世田谷で行っております。執筆段階では開始から12時間程度ですが。

 稲取では 144.64MHz AFSK 1200bspが多いようです。ちょうど遠笠山のデジピータの電波が入らない場所なので、地味に役立っているかと思います。アマチュア無線人口は東京に比べると圧倒的に少なそうなので、Beaconの同時受信で悩むこともないかと思います。

世田谷では、高尾山などにあるデジピータのBeaconはしっかり入るが、それ以外は周囲数km程度が受信できる状態でした。ちょっとは受信件数が増えて、これまた楽しいです。

ということで、受信するBeaconの量が少ないとお考えでしたら、ぜひスケルチ機能を使った複数周波数・モードの受信をお試しいただければと思います。



コメント

このブログの人気の投稿

大型特殊自動車免許を取った時の話。

パスワードを覚えるのも無理があるから、パスワードマネージャ使いましょう。

車両系建設機械運転者(整地) の講習