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


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

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

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

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

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

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