マゾ向け電波時計 - 受信アルゴリズム概要

kikyou.info»電子工作»マゾ向け電波時計»マゾ向け電波時計 - 受信アルゴリズム概要

電波時計のタイムコードに関して

ページ先頭へ

電波時計の元となる電波は、JJYというコールサインを持った標準電波です。その標準電波の強弱にのせて時刻情報(タイムコード)が送信されています。

強弱の変調は1Hzで、このデューティー比によってタイムコードがエンコードされています。

デューティー比(パルス幅)が20%のコードがマーカーおよびポジションマーカー、50%のコードが"1"、80%のコードが"0"として定義されています。

これらのコードが60秒(閏秒挿入時は61秒)分が1レコードとなり、タイムコードとなっています。

タイムコードには以下の情報が含まれます。

標準電波の出し方の詳細はこちら。このように何らかの人間の可聴域の「音」が発信されているわけではなく、あくまで電波が1Hz周期で強くなったり弱くなったりで時刻情報が伝えられているというわけです。

レコード内の整合性チェックについて

ページ先頭へ

上記のようにJJYは比較的原始的な方法で情報を送信しているため極めてノイズに弱く、60秒のうちの1秒がノイズで撹乱されただけでもそのレコードの情報が無駄になる可能性があります。

しかもそのレコードが正しいかどうかを検証する手立ては、時と分に対してはそれぞれ1ビットのパリティ、日と年と曜日についてはこれら3つの関係が正しいかどうかのチェックしかなく、他の情報にいたっては検証の手立てすらありません。

市販の電波時計には、パリティや曜日が正しかっただけで時刻を決定してしまうもの、ひどいものではこれらのチェックすら行っていないものもあるようで、このような電波時計はしばしば狂った時刻を表示することがあるようです。マゾ向け電波時計ではこのようないい加減な決定方法は用いていません。

レコードをまたがっての整合性チェックについて

ページ先頭へ

上記のパリティや年/日/曜日の整合性のチェックは、「1レコード内での検証」です。標準電波は休みなく送信されているので、連続した複数のレコードを受信し、それらが連続した相関性を持っているかどうかを検証することにより、より厳密なチェックができるようになります。

受信状態が悪いときは特に、レコードのすべてのビットがすべて正しく受信できるのを待っていると、いつまでたっても受信できないことがあります。また、JJYではいわゆるバーストノイズ(短期間に集中するノイズ)がおおく、1レコードの一部はダメだったけれども、他の情報は大丈夫だった、ということがよくあります。

マゾ向け電波時計では、この様な状況でも受信に成功するよう、電波を長時間受信し、それに統計的処理を施すことで「もっとも確からしい時刻」を決定するアルゴリズムを採用しています。

秒への同期(Sステータス)

ページ先頭へ

タイムコードを受信するにあたっては、秒の始め(パルスの始め)を知る必要があります。マゾ向け電波時計では、まず最初にパルスの立ち上がりをとらえ、それを手元の水晶発振器を元にしたタイミングと比較し、もっとも秒の始めとして確かであろうタイミングを決定します。

具体的には一秒間を8つの区間にわけ、それぞれの区間においてパルスの立ち上がりをカウントし、確度が高くなれば、それを秒の始めとして採用します。

確度が高いとは、そのカウントがしきい値"th"以上で、そのカウント以外がしきい値"ot"未満である、ということにしてあります。パラメータ"th"や"ot"は十分な確度で時刻を決定できる値になっています。

秒の始めを決定できると、受信ステータス画面では左下のドットが秒に同期して点滅するようになります。

ポジションマーカーへの同期(Pステータス)

ページ先頭へ

タイムコードは10秒おき、すなわち毎分9,19,29,39,49,59秒にマーカー(20%デューティーのパルス)があります。秒への同期が完了したら、マゾ向け電波時計はこのポジションマーカーの同期を行います。

具体的には10秒間の観測を繰り返し、その繰り返しのなかで、どのタイミングでマーカーが来たかの統計をとります。確度の高いタイミングが、ポジションマーカーであると決定できます。

分への同期(Mステータス)

ページ先頭へ

次は分への同期をおこないます。分の始めにはマーカー(20%デューティーのパルス)がありますから、これを探します。すでにポジションマーカーは分かっているので、この分の始めのマーカーが出現するであろうタイミングは6箇所あります。これまた統計的に確度の高いタイミングをもって分の始めとみなします。

この時点で分の始めが決定できたため、どのタイミングでレコードのどの情報が来るかもこの時点から分かるようになります。

その他の同期

ページ先頭へ

次は順々に各情報について統計をとっていきます。たとえば時の情報は0〜23の値の範囲をとるわけですが、数分間受信をつづけ、もっとも確度の高い時の値を時として決定します。

このようにして他の時刻情報も受信していきます。分の下位ビット(ML)、分の上位ビット(MH)、時(H)、年の上位ビット(YH)、年の下位ビット(YL)、日の上位ビット(DH)、日の下位ビット(DL)の順に受信を行います。

分などは0〜59の値の範囲ですが、これだとヒストグラムの母数が多く、信頼に足る確度になるまで長時間がかかるため、この様な情報に対しては、上位ビット、下位ビットにわけて決定を行っています。

本来ならばたとえばML,MH,H,YH…などはこの様に順々に行わなくても、すべて並列して受信してそれぞれ独立して統計をとればよいはずですが、マゾ向け電波時計のアルゴリズムはもともと非常にメモリ容量の少ないプロセッサ向けに作られているので、このように時間のかかる方式になっています。

初回の時刻決定

ページ先頭へ

上記の統計的な受信処理のほか、初回のみ(電源投入直後のみ)、レコードを受信して、それらのパリティや年/日/曜日の整合性がとれ、かつ2分間連続の整合性がとれていればすぐに時刻を決定する処理が並列に行われています。これはいち早くこのマゾ向け電波時計を時計として機能させるための仮の時刻表示で、より信頼性の高い時刻情報を表示するために、上記の統計的な受信処理を継続してバックグラウンドで行い続けます。