緊急警報信号 JavaScript の説明 |
このプログラムは,緊急警報信号の情報を表示するものです. 緊急警報信号は,大規模災害が発生した場合や津波警報が発表された場合などに,自動的にテレビ・ラジオのスイッチを入れるものですが,単にスイッチを入れるだけではなく,信号の中に以下のような情報が入っています. このプログラムは緊急警報信号をマイクで入力し,その情報をデコードして表示します. プログラムを起動する(ページをロードする)と,マイクからのオーディオ入力を開始し,信号待ち受け状態になります. 緊急警報信号を検知すると,その情報を画面に表示します. 「クリア」ボタンを押すと,表示されている情報を消去します. 本番の緊急警報信号は災害時などにしか放送されませんが,各放送局が試験信号を月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 点のデータを取得するようにしています. |