緊急警報放送を復調する

緊急警報放送は災害時にラジオなどの受信装置を自動起動するための信号です。このブログに辿り着いている時点で、そんなことは知ってるわいって感じですかね。でも一応書いておかないことには記事として成立しないので書きます。

EWSは災害時にラジオやテレビ放送で聞くことがある、あの不穏なピロピロ音です。全く一般には普及していませんが、あれにはデジタル信号が含まれていて、それを検知すると自動起動する機能があるラジオなどがあります。どうやっているかというと、デジタル信号の0と1をそれぞれ640Hzと1024Hzの音に置き換えて表現します。これを変調といい、とくに0と1のデジタル信号を2つの周波数の変化に置き換える方式をBFSK(Binary Frequency Shift Keying, 二値周波数偏移変調)といいます。この切替を1秒間に64回行うので変調レートは64Bd(ボー)で、1回の変調で1ビットを送りますから転送レートは64bpsです。

さて、アルゴリズムについてですが、音声周波数の変化をどうやってを0と1に戻すのかというと、たとえば640Hzの波は言い換えれば1/640秒に1周期の波なので、振幅軸上の特定のポイントを通過する時間間隔を測定して1/640秒と一致すれば640Hzの波だと判断できるわけです。ちなみに64Bdなので1変調の1/64秒あたりの640Hzなら10周期、1024Hzなら16周期です(取りこぼしもあるので、何回この周期を検知したら信号とみなすかは調整が必要です)。さいごに640Hzを検出したら0、1024Hzを検出したら1に置き換えればデジタル信号になります。

ソースはこちら。
https://github.com/nbtk/EWSDemodulator

Raspberry Pi 4とUSBオーディオアダプタで動作確認しました。

Coursera Machine Learning with Raspberry Pi 4

Raspberry Pi で Coursera Machine Learning をやりたい人のための記事です。Octaveでグラフが表示されないエラーで躓いてる方は、Octaveの設定までスキップしてください。

まずRPiでできるのかという疑問があるかもしれません。できます。 なんなら Windows/Mac より Octave の環境構築がかんたんでおすすめの選択肢です。 Continue reading →

Linuxでホットキーを検出する

ホットキーとかショートカットキーとかキーコンビネーションとか、キーボードのいくつかのキーが同時に押さたことをバックグラウンドで検知する方法です。先に自分で作らずともサードパーティ製モジュールがあることをお知らせしておきます。このほかにも同じような機能のモジュールがいくつかあるとおもいますが、困ったことに執筆時点でキーボードの抜き差しにうまく対応できるものが見つかりませんでした。 Continue reading →