------------------
1 製作物の概要
------------------
2007年10月1日から,一般向けの緊急地震速報が,テレビやラジオで放送されるようになりました.そこでPSoCを用いて,ラジオの緊急地震速報チャイムを受信したら,音声をONにする装置を製作しました(写真1).
写真1 緊急地震速報受信機の外観
PSoCはLCDの左下に少しだけ見えている.ラジオ・インターフェースとラジオ用電源はLCDの上の万能基板に実装.TCXOとRS-232ドライバはLCDの裏に隠れている.ケース蓋にはスイッチやスピーカなどを実装.ラジオは簡易なAMストレート方式で,本機の調整をしやすいようにしてある.
製作途中で,既にDSP技術を用いた専用ICが販売されていることを知り,製作を放棄しようかとも思いましたが,フィルタによる古風な処理方法でどこまでできるのか試すつもりで完成させました.
本機は非常に簡易的なもので,市販品のような安定した性能は出せませんが,1人でも多くの人が,地震から身を守ることができれば幸いです.
●本機の機能
・緊急地震速報チャイムの受信と警報出力
ラジオの緊急地震速報チャイムを認識したら,音声をONにして情報を得られるようにします.警報もHigh/Low信号で出力し,一定時間後にOFFにします.
・入力レベル調整
適切な入力レベルを維持しないとチャイムを認識できないので,レベル調整の参照信号として時報(「プッ・プッ・プッ・ポーン」という音)を利用します.
・ラジオ時報時計
時報を利用するついでに,「ラジオ時報で時刻を校正する高精度ディジタル時計[1]」も組み込み,付加価値を高めました.
・時刻アラーム
設定時刻になると,アラーム・ビットをHigh/Low出力します.
・ラジオ・アラーム
設定時刻になると,音声をON/OFFします.
------------------
2 チャイムの波形認識
------------------
●“緊急地震速報チャイム”は自動認識が難しい!
チャイム音は,NHKのウェブ・ページ[2]で聞くことができます.また,2009年2月現在,AM中波NHKラジオ第1で,月~土曜の朝7:50ごろに周知放送があります.実際の放送は,震度5弱以上の地震が予測される場合に放送されます.
このチャイムは,人間の注意を喚起させるだけで,機械に自動認識させる意図は全くないと思えるほど,非常に複雑です.1回のチャイムは1.5秒間の長さで,約20個の周波数成分が時間と共に振幅を変え,約0.4秒を境にして大まかな音程が変わります.チャイムは2回連続して放送されます.
図1に緊急地震速報チャイムの波形を,図2に周波数スペクトルを示します.とりあえず,時間帯で分けて解析していますが,実際はもっと細かく変化しています.
図1 緊急地震速報チャイムの波形
図2 緊急地震速報チャイムの周波数スペクトル
最初は全く何も分からない状態だったので,とりあえず,もっと細かい時間帯に分けて周波数スペクトル値を調べました.解析結果を表1に示します.主要な周波数だけに着目すると,
[392(ソ)→523(ド)→659(ミ)]
→[415(ソ#)→554(ド#)→698(ファ)]
という音になっています.最も大きい音で簡略化して表現すると,「ド→ド#」になります.各成分の大まかな振幅形状は,急激に大きくなって緩やかに減衰するノコギリ型になっています.
表1 緊急地震速報チャイムの相対スペクトル値(筆者の解析値)
表1ではよく分からないので先走りますが,PSoCでバンドパス・フィルタ(BPF)の中心周波数f0を変えて処理した後の,周波数別の緊急地震速報チャイムの波形を図3に示します.ラジオが簡易ストレート方式だったので,信号が少しひずんでいます.入力信号に対して,時間差をもって,392Hzから順に信号が立ち上がっているのが分かります(正確には,表1のように,最初に振幅の小さい784Hzがあるが,無視している).また,入力レベル調整用の時報との音量比を図4に示します.
図3 緊急地震速報チャイムの周波数別の波形(図をクリックするとすべての波形を表示します)
Q=16のBPFを2段カスケードにしたもので,緊急地震速報チャイムを処理した波形.
図4 緊急地震速報チャイムと時報の音量比
●音楽的な和音を避けた4周波数を選んで緊急地震速報チャイムを認識
図2と表1の周波数スペクトルを最初に見たとき,どうやって認識したらよいのか分からず,途方に暮れてしまいました.この複雑なチャイムを無理やり何とか1個のPSoCで認識できるように,思い切って検出方法を簡略化し,四つの周波数(392,415,932,988Hz)だけを検出に使いました.なるべく多くの周波数を用いて検出すれば誤認識は減るのですが,4個の周波数に限った理由は,以下の通りです.
(1) PSoCのアナログ・ブロック個数に限りがあるので,処理が2系統になってしまった.
(2) 信号があるのにBPFの中心周波数を切り替えると,異常な振幅が一瞬だけ出てしまう傾向にあるので,誤認識の一因になる.BPF周波数切り替えは,前半と後半の境界の信号振幅が小さい時間帯で行いたかった.つまり,何も考えずに欲張っていろいろな周波数で見ようとすると,異常なピークを生じやすい.
(3) 厳密さにこだわって判定を行うと,逆にチャイムを見逃してしまう恐れがある.
検出を簡略化した代償として,たまに通常の放送内容を誤認することがありますが,できるだけ誤認が少なくなるように周波数を選びました.開発当初は,最もレベルの高い周波数(392,415,523,554Hz)を用いていたのですが,周波数が近くて,かつ音楽的な和音を構成しやすいため,誤認識が多く,変更しました.最も早く立ち上がる周波数392Hz(ソ)と,ある程度周波数が離れていて,かつ和音になりにくい932Hz(シ♭)を選び,それに伴って,後半でそれらから半音上がった415,988Hzを選びました.
図3の波形を基にして,周波数別の信号レベルとタイミングを読み取っていき,しきい値と比較して判定します.判定の厳しさによって,三つの判定モードがあります.正式モードでは,指定の時間帯に信号のピークがあることを確認するのはもちろんですが,信号レベルが低くなる時間帯も見て,ないということも確認して判定します.大ざっぱモードでは,信号レベルが低くなる時間帯を無視します.当初は通常放送の誤認識をなくそうとして正式モードで製作したのですが,入力レベルの管理が難しくてチャイムを見逃しやすいため,調整が容易な大ざっぱモードを追加しました.初期値は,大ざっぱモードを少しだけ厳しくした中間モードです.
------------------
3 ハードウェアの設計
------------------
●回路図
本機のハードウェアは,参考文献[1]と似たような構成なので,そちらも参照してください.異なる個所を重点的に述べます.図5(a),図5(b)に,本機の回路図を示します.
図5(a) 緊急地震速報受信機 回路図 その1(主回路)
図5(b) 緊急地震速報受信機 回路図 その2(外付け周辺回路)
参考文献[1]の回路図との違いは,以下の二つです.
・スイッチとスピーカが付いた
・C21の値が47μFではなく,0.1μFになった
C21の値は47μFのままでも動作しますが,電源ONから安定するまでに約2分かかります.
AGND側のC22は無極性電解47μFのままです.C22の役割は,ラジオと本機の電源電圧が異なるのでDCカットをすることと,ノイズを低減するためのバイパス・コンデンサです.バッファの出力に大容量コンデンサを接続したら異常発振するのではないか,という不安はあるのですが,現在のところ,問題なく動作しています.
スピーカは,8Ωを接続して,何とか普通に聞こえる程度なので,必要に応じて外部アンプに接続してください.
●PSoC内部構成ブロック図
図6にPSoCの内部構成ブロック図を示します.
アナログ部は,PGAからの出力を,2段カスケードしたBPFを通し,パルス状のままコンパレータとバッファを通してCPUに割り込みをかけます.同じ仕様のものを2組で検出します.
PGA_0の出力は,buf0を経由してスピーカに出力します.ソフトウェアでON/OFF制御しますが,PGA_0とbuf0の2カ所を制御して,OFF時のアイソレーションを改善しています.
PGA_2からは,AGNDの2.08Vを出力します.
図6 PSoC内部ブロック図
●クロック構成ブロック図
図7にクロック構成図を示します.
検知フォーマット確認用割り込みは20Hzです.緊急地震速報の判定には,時報などの検出よりも細かい指定が必要になります.
図7 クロック構成ブロック図
● グローバル・リソースの設定
表2にグローバル・リソースの設定一覧を示します.
スピーカを直接駆動するため,A_Buff_PowerがHighになっています.
表2 PSoC DesignerのGlobal Resources設定一覧
●バンドパス・フィルタの設計
表3(a)にBPFの仕様および設定一覧を,表3(b)にサンプリング・クロックをBPFへ供給するためのPWMの分周比を示します.
表3(a) BPF2_0~BPF2_3の仕様および設定一覧
表3(b) PWM16_ BP01,PWM16_ BP23の分周比
Q=16のBPFですが,オーバサンプリング・レシオ(OSR)が12.5で,あまり良くはありません.緊急地震速報チャイムの周波数帯域は広く,エイリアシングひずみが気になるので,アンチエイリアシング・フィルタを置きたいところですが,PSoCリソースに余裕がないし,外付けにする気もないので,問題なければ良しということで,設置していません.
また,ゲインが1.07です.ひずまないように1以下にしたかったのですが,Qを高くしたいこととの妥協で,表3のようになりました.図3の波形の出力で何とか判別できそうだというカット・アンド・トライでQを決めたので,信号レベルでの仕様はありません.
Qが10以上になると,設計の選択肢が狭まり,適切な組み合わせは数個しかありません.当初は非常にQの高いBPFで周波数を弁別しようとして,PSoCの限界に近いQ=57のBPFで製作しましたが,フィルタのゲインが大きくなって振幅の応答が悪くなり,使えませんでした.bpf.cにコメント・アウトした名残があるので,何かの参考にでもしてください.
●ユーザ・モジュールの配置(プロジェクト・ファイルを参照してください)
文献1では,ある程度自由にモジュールを置いてよいと書きましたが,訂正します.
いい加減に置いてはいけません.「モジュール配置位置は,割り込み優先順位を決める」という,極めて重要な意味があります.ディジタル・ブロックでは,左上が最も優先順位が高く,それから右へ,そして2段目の左へ,最後の右下が最も低くなっています.正確には,boot.asmの割り込みベクタを記述している個所の順番で決まるので,モジュールを配置する際には,これをよく考慮しなくてはなりません.
本機は,割り込みを多用しており,開発当初,微妙なタイミングのふらつきに悩んでいました.不適切なモジュール配置による割り込みタイミングが原因だったので,修正後は安定しました.当初は,パルスの割り込みとして,コンパレータ・バスから直接にAnalog_1とAnalog_3の割り込みを用いていました.使用モジュール個数を節約できるので良いと思っていたのですが,割り込み優先順位が高く,不安定の原因の一つになっていました.代わりにDigBufを用いて,適切な割り込み優先順位のところに配置することで,問題を解決しました.
最も優先順位を高くすべきモジュールは,基準クロック発生カウンタCounter8_P1で,左上に配置しています.次に時刻修正用カウンタCounter8_jAdj0,Counter8_jAdj1で,時刻の正確さを優先させます.それから,信号パルスのカウント用割り込み発生源としてのDigBuf_1,DigBuf_3,検知フォーマット用のCounter8_detFormと続きます.パソコンとの通信用UARTは,最も優先度を低くしてあります.なお,UARTなどの通信用モジュールは,DCB(ディジタル・コミュニケーション・ブロック)と呼ばれる領域に置かなくてはなりません.DCB22やDCB23などがそうであり、DBB20やDBB21ではだめです.PWM類は割り込みを使わないので,最下行に配置しています.
------------------
4 ソフトウェアの設計
------------------
●ソース・リスト(*.cと共に*.hも参照してください)
緊急地震速報受信機のソース・リストを以下に示します.
bpf.c :バンドパス・フィルタ設定
detect.c :検出の最も本質的な部分
etc.c :その他
jihou.c :時報検出後の修正動作など
kjs.c :チャイム検出後の警報出力など
main.c :メイン
message.c :メッセージ表示集
printf.c :printfやその他表示
radio-alarm.c :ラジオ・アラーム
rtc-alarm.c :時刻アラーム
rtc-inner.c :時計の基本動作
uart.c :通信
version.c :バージョン表示
●本機の動作概要
緊急地震速報と時報の両方を受信する仕様になっています.最初の待機時は,BPF_0とBPF_1は392Hzで,BPF_2とBPF_3は440Hzで待ち受けます.392Hzのパルスで割り込みがかかると,BPF_2とBPF_3を932Hzに変えて,検知フォーマット用カウンタCounter8_detFormをスタートさせます.検知ステータスの詳細を表4に示します.フォーマットに合致したパルス数を検知するとステータスを進めて,0.4秒付近でBPFを415Hzと988Hzに切り替えます.0.9秒まで検知を継続したところで受信判定し,緊急地震速報だと判定したらフラグkDetFlgを立て,音声をONにして,警報ビットをHighにします.
表4 緊急地震速報検出ステータス定義(正式判定モード)
10msごとにCounter8_P1の時計割り込みがかかっており,1秒ごとに通知フラグが立ち,各種フラグを1秒間隔でポーリングしています.kDetFlgが立ってから3分後にkDetFlgをクリアします.音声は,kDetFlgに追従してON/OFF制御します.その他アラーム動作もポーリングで行っています.
割り込みは本質的な緊急地震速報検知動作に必要な最小限にとどめています.割り込み優先順位が低いCounter8_detForm_ISR 割り込みルーチンにだけ多重割り込みを許可して,基準クロックや信号パルス割り込み等を優先させ,時刻の正確さやパルス取りこぼしの改善を図っています.
時計動作や時刻校正については,参考文献[1]を参照してください.
------------------
5 製作と調整
------------------
特に難しい製作個所はありませんが,12.8MHzのクロックは,できるだけ短く配線します.図5(a)の回路図の汎用部分のプリント基板は通信販売で購入することもできます[3].
この基板に外付けで,図5(b)の
・ラジオ・インターフェース(部品番号20番台)
・スピーカ(部品番号30番台)
・ラジオ電源(50番台)
(ラジオにACアダプタ等の電源があれば製作不要)
・スイッチ(部品番号60番台)
を追加すると完成します.
プログラムはPSoC ProgrammerとMiniProgを用いてKJS.hexを書き込みます.
詳細は取扱説明書を参照してください.
時刻の設定と,ラジオからの入力レベルの調整は必須です.
本稿で紹介したプログラムや取扱説明書は,以下からダウンロードできます.
KJS_Ver208.zip
◆参考文献◆
[1] 朝倉 慎一;ラジオ時報で時刻を校正する高精度ディジタル時計の製作,トランジスタ技術,2008年7月号,pp.243-251,CQ出版社.
../../tabid/123/Default.aspx
[2] NHKオンラインの緊急地震速報
http://www.nhk.or.jp/bousai/
[3] Asa工房ウェブ・ページ
http://homepage2.nifty.com/asa-kobo/