緊急警報放送(EWS) デコーダ

1、最初に…

緊急警報放送(EWS)は、地震や津波などの緊急時に待機状態の受信機を起動するデータ放送の一種です。

緊急警報放送の受信機構成の一例
このページでは、音声信号から緊急警報信号を検出するデコーダ装置の作り方を紹介します。 この記事を読んで実際に機器を製作するには、若干の電子工作の知識と半田ごてや PIC Writerなどの開発環境が必要です。 なお、製作は自己責任でお願いします。

2、緊急警報信号の概要

緊急警報放送の信号は、ラジオやテレビの音声信号として送信されます。 信号は 64bpsのFSK信号で、0の時 640Hz1の時 1024Hzとなります。 送信される符号は、前置符号(4bit)、固定符号(16bit)、可変符号(16bit)で構成され     固定符号+可変符号+固定符号+可変符号+固定符号+可変符号   で一かたまりです。前置符号ののち、このブロックが複数回送出されます。具体的な符号は以下のとおりです。
前置符号
固定符号と可変符号
  固定符号は、第1種と第2種の2種類があります。   可変符号は、地域や日時を表しているそうです。(詳細は知りません)   要するに、緊急警報放送を検出するには 固定符号 16bit分を検出すればよいのです。   そして、前置符号で開始なのか、終了なのか、試験なのか判別することができます。

3、製作した装置の仕様

入力信号は、0.5 [Vp-p]程度の音声信号(テレビ、ラジオなど)です。 出力信号は、いろいろな用途に利用できるように以下の3種類を提供します。 (1)待機時で、開始信号、試験信号を受信するとになり、リセットするまでその状態を保持する信号 (2)待機時で、開始信号を受信するとになり、リセットするまでその状態を保持する信号 (3)待機時で、開始信号を受信するとになり、終了信号を受信するととなる信号 また、(1),(2),(3)のそれぞれの状態に対応するLED点滅用の出力信号も用意します。 この信号は負論理です。待機時には、アクティブ時にはを交互に出力します。   電源として+5Vを必要とします。

4、ハードウェア

ハードウェアの主な構成部品は400円程度で入手できるPICマイコン PIC16F84と10円以下のトランジスタ1石です。
回路図
音声信号をハイゲインな増幅回路に入れて、矩形波に変換しています。これをシュミット・トリガ入力の RA4で読み取ります。 PICのクロックは、10MHzのセラミック振動子で発振させています。これ以外の周波数の振動子を利用する場合はソフトウェアの変更が必要となります。
入出力ポートの割り当て表

I/O No. 用途
RA0 I 17 リセット信号(負論理)
RA1 O 18 未使用
RA2 O 1 未使用
RA3 O 2 未使用
RA4 I 3 2値化されたオーディオ信号
RB0 O 6 開始・試験信号を検出するとHになり、Reset するまで保持する信号
RB1 O 7 開始信号を検出するとHになり、Reset するまで保持する信号
RB2 O 8 開始信号を検出するとHになり、終了信号を検出するとLになる信号
RB3 O 9 未使用
RB4 O 10 RB0 に対応するLED駆動用信号(負論理) ※1
RB5 O 11 RB1 に対応するLED駆動用信号(負論理) ※1
RB6 O 12 RB2 に対応するLED駆動用信号(負論理) ※1
RB7 O 13 PICのテスト信号 ※2
  ※1   RB4,5,6 は、RB0,1,2 がLの時Hとなり、RB0,1,2 がHの時周期 約0.4秒の矩形波を出力します。   ※2   周期 約0.4秒の矩形波を出力します。(リセット時を除く)

5、ソフトウェア

緊急警報放送デコーダプログラム for PIC16F84

アセンブラのプログラム(ソースとHEX) 秋月電子通商で無料配布されているアセンブラ PAでアセンブルできます。 回路の動作チェック用の wavファイルも付属していますので、緊急警報放送の音の一部を聞くこともできます。

6、デコードのしくみ(プログラムの解説)

デコードの方法を考える前に、1つの符号当りの波のサイクル数について見てみます。
符号 周波数 1つの符号当りの波の数
0 640Hz 10 (=640 / 64)
1 1024Hz 16 (=1024 / 64)
この表を見て思いつくデコードの方法は、信号の1周期分の時間を計り、 1.56 ms(=1000/640)なら 640Hzと判定し、これが 10個連続したら符号 0を受信したとみなす。 0.98 ms(=1000/1024)なら 1024Hzと判定し、これが 16個連続したら符号 1を受信したとみなす。 という方法です。しかし無線伝送に雑音は付き物です。雑音によって、周期の測定をミスる可能性があります。 また測定のタイミングによって、カウントが±1変動することもあります。 そこで「状態」を導入した次の方法を使用します。
状態変移図
     状態1 − 640Hzの信号が連続している状態      状態2 − 信号が640Hzから1024Hzに変化した状態            符号の変わり目か?それともノイズ?      状態3 − 1024Hzの信号が連続している状態      状態4 − 信号が1024Hzから640Hzに変化した状態            符号の変わり目か?それともノイズ? これは、周期が変化した場合1回だけでは符号が変化したと判断せずに保留とし、2回目の測定で判断する、ということをやっています。 具体的に行う処理を状態1、2の場合について説明します。      処理1(図の丸1) − 信号用のカウンタをインクリメントする。                  もし、10になったら FIFO に符号 0を詰め、全てのカウンタを0にする。      処理2(図の丸2) − 何もしない。(保留動作)      処理3(図の丸3) − 信号用、ノイズ用のカウンタをインクリメントする。(さっきのはノイズでした動作)                  もし、ノイズ用カウンタがある一定値を超えた場合、FIFOと全カウンタをリセットする。      処理4(図の丸4) − 信号用カウンタがある一定値を超えている時は、FIFOに符号 0を詰める。(さっきのは符号の変わり目でした動作)                  信号用カウンタに 2をセット、ノイズ用カウンタをリセット。 FIFO に符号を詰めた時、FIFOのビット列チェックも行い緊急警報信号の符号と一致するか調べます。 状態3、4の場合も同様に行います。(定数は異なる) 以上がデコードのしくみです。 実際のプログラムでは、状態1,2と3,4が対称的なのを利用して状態を2つに減らして実装しています。
状態変移図

7、参考文献

日本放送協会編 「NHK カラーテレビ受信技術 増補版」
実物

戻る