緊急警報信号 JavaScript の説明
戻る


このプログラムは,緊急警報信号の情報を表示するものです.
緊急警報信号は,大規模災害が発生した場合や津波警報が発表された場合などに,自動的にテレビ・ラジオのスイッチを入れるものですが,単にスイッチを入れるだけではなく,信号の中に以下のような情報が入っています.
信号の種類:第一種開始信号/第二種開始信号/終了信号(試験信号)
受信地域:都道府県や「関東広域圏」,「中京広域圏」などの地域
信号送出日時:年月日と時(年は下1桁のみ)
このプログラムは緊急警報信号をマイクで入力し,その情報をデコードして表示します.

プログラムを起動する(ページをロードする)と,マイクからのオーディオ入力を開始し,信号待ち受け状態になります.
緊急警報信号を検知すると,その情報を画面に表示します.
「クリア」ボタンを押すと,表示されている情報を消去します.

本番の緊急警報信号は災害時などにしか放送されませんが,各放送局が試験信号を月1回程度放送しているようです.また,信号のオーディオのサンプルはウェブ上にもあります.

緊急警報信号は,マーク周波数 1024Hz,スペース周波数 640Hz の FSK で,伝送速度は 64bps です.
FSK なのでお手軽にゼロ クロス検出でも復調できると思います.しかし,このプログラムではテレビ・ラジオあるいはコンピュータなどから流れる信号をマイクで拾うことを想定していますので,信号以外の周りの雑音も一緒に入力されます.雑音が多いとゼロ クロス検出ではうまく復調できないかも知れません.そこで,ここでは FFT を使うことにします.

オーディオの入力には Web Audio API を使いますが,Web Audio API ではサンプリング レートを自由に指定できません.そのため,実際に使われているサンプリング レートに合わせて周波数の検出処理を行わなければなりません.
サンプリング レートはブラウザの種類やバージョン,OS の種類などによって異なるようですが,ウェブの情報を見る限りでは,少なくとも主要なブラウザ・OS では,44100Hz または 48000Hz のどちらかが使われているようです.
広い範囲のサンプリング レートに自動的に適応するのは少々面倒ですし,仮にそのような処理にしたとしても,実際にそのサンプリング レートが使われている環境が無ければテストができません.ですので,このプログラムでは,サンプリング レートは 44100Hz/48000Hz またはそれに近い値であることを前提とすることにします.

このサンプリング レートで上記の信号周波数を充分に識別するためには,FFT の点数は 512点位は必要なようです.
仮にサンプリング レートを 44100Hz とすると,64bps の信号の 1ビット分のサンプル数は約 689点になります.単純に 512点ずつサンプル データを切り出して処理するのでは時間間隔が粗すぎますので,64点ずつスライドしながら 512点のデータを取得するようにしています.