JJY標準電波の受信とデコードに挑戦する

今回は長波帯で送信されているJJY標準電波の受信にトライする。JJY標準電波の送信所は福島県と佐賀県にあり、自宅から受信可能なのは福島から送信されている40kHzの方。受信にはAMラジオのSDR実験と同様の以下のようなシステムを用いた。

  1. アンテナでキャッチした電波をトランジスタのアンプで増幅
  2. ADALM2000でPCに取り込み
  3. GNURadioで信号処理

GNURadioで処理した信号をWAVファイルに保存し、Pythonプログラムでタイムコードのデコードにも挑戦した。

スポンサーリンク

40kHzの受信アンテナとアンプ

古い電波時計を分解して取り出したバーアンテナも試してみたが感度がイマイチだったのでAMラジオのSDR実験の時に作った壁面ループアンテナを使うことにした。

ANT

アンテナでキャッチした電波を増幅するアンプは以下の回路図のようなトランジスタ2石を使った物。壁面ループアンテナはAMラジオの電波も強力に受信するのでL1とC1によるカットオフ100kHzのローパスフィルタにまず通してAMラジオの信号を減衰させ、更にQ1のコレクタ側をL2とC3,C4で作る40kHzの共振回路(C4を0.068uFとすればC5は不要かも)とする同調増幅回路にして出来るだけ不要なノイズを除去するようにした。Q1だけではゲインが足りないので、Q2のアンプを後段に繋げて合計で70dB前後のゲインを得ている。

このアンプ出力をスペアナ表示すると、40kHzが一秒おきに断続しているのが見えてJJYを受信出来ていることが確認出来る。最大で-40dBV(10mV)にも満たないレベルとあまり大きな振幅は得られていないが、後述の通りPythonプログラムによるタイムコードのデコードには成功した。

Scopy

GNURadioのフローグラフでタイムコードをWAVファイルに保存

JJY受信用のフローグラフはAMラジオの時と同様にADALM2000で信号のキャプチャを行う以下のような物。ポイントは40kHzの信号に-39kHzを乗算して1kHzに周波数変換している点で、あとはひたすらダウンサンプリングして最終的に4kHzサンプリングまで落としている。オーディオデバイスからは1kHzのトーンが断続して聴こえ、その昔JJYが短波放送だった頃の音となんとなく似た感じに。信号は後述のデコード実験で使えるようにWAVファイルとしても出力しておく。

  • フローグラフのダウンロードはこちら
GRC

信号をWaterfall表示すると、1kHzがモールス信号のように断続している様子がよくわかる。ちなみに毎時15分と45分には”JJY JJY”というモールス符号が実際送信されていたりもする。

GRC

Pythonプログラムでタイムコードをデコードする

JJYのタイムコードは情報通信研究機構のページでフォーマットが解説されている。信号が持続する長さによってビットを表現し1分間かけて1つのタイムコードが送信される。概ね1秒間に1bit送る仕様だが同期のためのマーカー信号も含まれるため、ビットレートに換算すると1bpsにも届かない非常にゆっくりとした通信だ。

Timecode

GNURadioで保存したWAVファイルからタイムコードをデコードするPythonプログラムはこちら。これを実行すると、以下のように味も素っ気も無い感じでデコード結果がテキスト出力される。

$ ./jjydec.py
21:14 year=20, yday=286, wday=1

プログラムの中身をこの場で細かく解説する事はしないが(もし質問があればコメント欄にお願いします)、プログラムの流れは以下のような感じ。

  1. DFTで1kHzの信号を抽出する
  2. 信号の持続時間によって”0″か”1″もしくは”マーカー”を判定
  3. 簡単なステートマシンでタイムコードをデコードする

まとめ

今どきはインターネットへの接続環境さえあればNTPサーバに接続して正確な時刻を簡単に取得出来るので、わざわざ標準電波を利用する実用上のメリットも少ないが、今回はAMラジオSDR実験の延長で挑戦してみた。ニーズが高い試みでは無さそうなので殆ど自分用のメモとして書いたような記事だが、もしも誰かの役に立つのであれば嬉しい。

コメント