このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
WWV デジタル受信器 - 同期と検出
この例は、無線局 WWV がブロードキャストするタイム コード情報に同期し、この情報をデコードして時間情報を表示するデジタル受信器の実装を示します。この例では、MATLAB® Function ブロックと共に Simulink®、DSP System Toolbox™、Stateflow® 製品を使用して、単純で非コヒーレントなデジタル受信器を実現します。
WWV とは
WWV は、コロラド州フォート コリンズにある米国標準技術局が運営する米国政府無線局のコール サインです。WWV は、周波数基準とタイム コード情報を送信します。送信されるタイム コードは、時間精度 10 ミリ秒、周波数精度千億分の 1 のセシウム時計に基づいています。タイム コードは、IRIG-B タイム コード形式を使用するパルス幅変調のある 100 Hz のオーディオ信号を使用して送信されます。
WWV の詳細については、Radio Station WWV を参照してください。
同期の紹介
同期は、通信アプリケーションで共通の問題です。この例では、Simulink でこの問題を解決する方法の 1 つを示します。以下の単純なモデルを考えます。
Buffer Samples ブロックは、入力サンプルの効率的なバッファーのために内部循環バッファーを維持します。このブロックでは、En_Out 入力端子で Boolean の 'true' を受け取った場合にのみ有効な出力フレームが計算されるモードを使用します。Frame Sync Logic サブシステムは、受信側の予想どおりに適切なフレームがバッファーされると Boolean の 'true' を出力します。同じ Boolean 信号が、有効なフレームを処理する Receiver サブシステムのトリガーの役割も果たします。このため、Buffer Samples ブロックと Receiver サブシステムの出力セクションは、要求のあった場合にのみ実行されます。この方法は、この例の 2 か所で使用されています。シンボルの同期と復調の部分と、フレームの同期とデコードの部分です。
例の検証
モデル例は次の要素で構成されています。各構成要素については以下の節で説明します。
Transmitter - BCD タイム コードを生成し送信します。
Random Channel Delay - 送信された信号にランダムな遅延を追加します。
Model - Model (Simulink) を介して dspwwv_receiver モデルを参照します。このモデルは以下で構成されています。
Receiver - 受信したタイム コードを復調し、受信した信号に同期してロックし、BCD シンボルを検出します。
Decoder - BCD シンボルをデコードします。
Display - 対応する時刻と日付情報を表示します。
dspwwv
ではコード生成はサポートされませんが、dspwwv_receiver
ではサポートされることに注意してください。
Transmitter
このサブシステムは、100 Hz トーンで 2 進化 10 進数 (BCD) タイム コードを生成します。Simulink モデルで使用するサンプリング レート (Ts) は 8000 サンプル/秒です。WWV によってブロードキャストされるタイム コードは、毎秒 1 ビットの速度で UTC (協定世界時) 情報を連続して提供します。タイム コード全体の送信には 60 ビット (1 分) かかります。各タイム コード内の各種ビットは、次の情報を示します。
24 時間制時刻 (UTC)
UT1 時刻補正
年
日付
夏時間インジケーター
うるう秒補正
タイム コードの詳細については、NIST の web サイトの「WWV Time Code Bits」および「WWV Time Code Format」の各セクションを参照してください。Transmitter サブシステム マスクの [時間を表示] パラメーターで、[現在] と [ユーザー指定] のどちらを選択したかに応じて、サブシステムは対応する 60 BCD タイム コード シンボルを生成します。各シンボルは、100 Hz トーンのパルス幅変調 (PWM) を使用して表され、Transmitter サブシステムから出力されます。以下の有効なシンボルのいずれかが毎秒送信されます。
MISS - 新しいフレームの開始を示すために、各フレームの先頭にパルスを送信しません。
ZERO - 170 ms のパルスが 0 ビットを示します。
ONE - 470 ms のパルスが 1 ビットを示します。
MARKER - 770 ms のパルスが同期のために 10 秒ごとに送信されます。
送信されたシンボルは、Simulink モデルで以下の整数値にマッピングされます。
0 - MISS
1 - ZERO
2 - ONE
3 - MARKER
送信されるこのトーンは、WWV サブキャリアで送信されるトーンと同じです。
Random Channel Delay
このサブシステムは、送信された信号にランダムな遅延を追加します。受信側セクションは、未知の遅延がある場合でも、送信されたシンボルに同期して適切なタイム コードをデコードします。
Model - dspwwv_receiver
参照モデル
Model ブロックをダブルクリックして dspwwv_receiver
モデルを開きます。このモデルには、送信された信号を正しく復調、同期、および検出するためのすべての成分が含まれています。このモデルは、以下の 3 つのサブシステムで構成されます。
R1 - Receiver
Receiver サブシステムをダブルクリックすると、それを構成する以下のサブシステムが表示されます。
1) Downconvert and Downsample は、パルス幅変調信号を入力として受け入れます。このサブシステムは、エンベロープ検出を実行して受信信号を復調し、ローパス フィルター処理を実行し 1/80 でダウンサンプリングを行います。したがって、復調した信号 (dm
) には送信されたシンボルごとに 100 のサンプルが含まれます。このサブシステムの出力は、一連の可変長矩形パルスです。
2) AGC (Automatic Gain Control) は、dm
信号の振幅を推定します。この値は後で dm
信号のしきい値の設定に使用されます。
3) Symbol Timing Recovery and Buffer for Demod は、信号の同期と、復調のための信号のバッファーに使用されます。このサブシステムには、以下のサブシステムが含まれます。
3.1) Leading Edge Detector は、復調した信号 dm
を受け取り、Boolean 信号に量子化します。dm
信号の値が AGC 値より大きい場合は、Detect
出力信号が 'true' になり、それ以外の場合は 'false' になります。さらに、このサブシステムは dm
信号の立ち上がりエッジを含む Boolean 信号 Edge
も出力します。
3.2) Symbol Sync では、信号の同期を実行し、WWV 信号に同期されたクロック信号を作成します。フレーム同期は、Decoder セクションで後で実行されます。同期は、Stateflow の時相論理機能を利用します。この Stateflow チャートは、以下の 3 つの部分で構成されます。
SymbolSync - このチャートは、さらに Sync State チャートと Lock State チャートに分かれます。
Clock Synchronization
Integration
以下に Symbol Timing Recovery and Buffer for Demod サブシステムと Symbol Sync ステート チャートを示します。
3.2.1) SymbolSync は、信号同期を実行します。このチャートは、dm
信号の立ち上がりエッジ (Edge
) を入力として受け取ります。各立ち上がりエッジは、約 100 サンプル間隔です。
このチャートの内部パラメーターは以下のとおりです。
N1 - 2 つのエッジ間にある実際のサンプル数
N1est - 2 つのエッジ間にある推定サンプル数 (開始値は 100)
Nwin - N1est サンプルの後、次のエッジを見つけるためのウィンドウ (既定値は 11 サンプル)
Nhalfwin - ウィンドウ長の半分 (既定値は 6)
Sync 状態 - 同期を開始するため、このチャートは立ち上がりエッジを探し、次に約 100 サンプルの間、サイレンス (エッジが発生しない) 期間を探します。続いて、その時点で中心にあるウィンドウで次の立ち上がりエッジを探します。チャートでこの操作が正常に完了すると、システムの同期が完了したことになり、残りのシンボルが有効なシンボルであると見なされます。失敗した場合は、チャートはこのようなパターンが再度発生し、操作が成功するまで待機します。
'Sync' ステート チャートは、エッジが発生するまで待機し、次に少なくとも dly = ' N1est - Nhalfwin + 1 ' サンプルの間、サイレンス (他のエッジがない) 期間を探します。
その期間 (dly サンプル) 内にサイレンスが発生せず、別のエッジが検出された場合、このチャートは新しいエッジを基準エッジとして、再びサイレンスを探します。
このチャートは、基準エッジに続く次の dly サンプルの間にサイレンスを検出するまで、手順 1 と 2 を繰り返します。
dly サンプルの間にサイレンスが検出されると、このチャートは dly サンプルの後に次のエッジを検出するまでに要したサンプル数 (cnt) を計算します。次のエッジが Nwin ウィンドウ内に検出された場合は、"ロック" 状態に遷移し、後続のシンボルの受信を開始します。次のエッジが Nwin ウィンドウ サンプル内に検出されない場合は、基準エッジを破棄し、手順 1 ~ 3 で説明したように基準エッジの探索を再開します。
ロック状態 - 同期が完了すると、このチャートは約 100 サンプルごとに中心にあるウィンドウ内で次のシンボルを探し、シンボルが検出される限り、同期が保たれます。チャートで 2 回 (約 200 サンプル) 続けてシンボルが検出されない場合は、同期状態ではなくなり、前述のように再度同期を行います。
"ロック" 状態に遷移すると、このチャートはエッジが定期的 (約 N1est サンプルごと) に発生するものと見なします。
チャートは、N1 を N1+Nhalfwin-cnt に更新し、次の dly = N1-Nhalfwin+1 サンプルを無視します。続いて、Nwin サンプルのウィンドウ内で次のエッジを探します。
ウィンドウ内で次のエッジが検出されるまでのサンプル数 (cnt) は記録されます。ウィンドウ内でエッジが検出されると、前述のように N1 が再び更新されます。
チャートは、新しい cnt 値に基づき、新しい dly を計算し、前述のように新しいエッジの検出を開始します。
このチャートでは、MISS シンボルを考慮して、Nwin ウィンドウ内でエッジが 1 回検出されないことは許容されますが、連続して 2 回検出されないと、ロック状態が解除され、Sync 状態に移行することで、シンボルの同期を再度開始します。
3.2.2) Clock Synchronization は、dm
信号の新しい立ち上がりエッジを受け取るとクロック信号を生成します。これにより、クロックは、定期的に実行される Simulink クロックではなく、新しいエッジの発生に同期します。
3.2.3) Integration は、エッジの検出時 (つまりクロックの生成時) に ZERO シンボルを表す 17 サンプル幅のテンプレート ステップ関数を生成します。この信号は、AGC サブシステムで使用されます。
3.3) Symbol Buffer for Downstream Demod は、クロック信号 (前述の 3.2.2 で計算) を受信すると、信号に対応するサンプルをバッファーします。
4) Symbol Demod and Frame Buffer は、ゼロ以外のクロック信号を受信するたびにトリガーされます。このサブシステムでは、Vector Quantization ブロックを使用して、入力 'Symbols' バッファーを 4 つのシンボル候補 (MISS、ZERO、ONE、MARKER) と比較することで、シンボル復調を実行します。最も一致するシンボルが出力されます。Delay Line ブロックは、連続した 60 個のシンボルをバッファーして "WWV フレーム バッファー" を作成するために使用されます。Delay Line ブロックの前の Frame Sync Logic サブシステムは、連続した MARKER シンボルと 1 つの MISS シンボルを探します。このパターンは新しい WWV フレームの開始を示すためです。Delay Line ブロックは、このパターンが検出された場合にのみ有効なバッファーを出力します。後続の IRIG-B デコーダーも、その時点でトリガーされます。
R2 - IRIG-B Frame Decoder
トリガーされる IRIG-B Frame Decoder サブシステムは、IRIG-B 形式のシンボル フレームをタイム コードの個々の成分にデコードするために使用する MATLAB™ Function ブロックで構成されます。このサブシステムは、有効な WWV フレームが受信された場合にのみトリガーされます。
Display
送信されたシンボルは、Decoded Symbols スコープに表示され、デコードされたタイム コード情報はタイム コード表示と WWV タイム コード ウィンドウに表示されます。WWV タイム コード ウィンドウのボックスは、対応する信号が true の場合に点灯する LED を表します。Daylight Savings に対応する LED は 2 つの部分に分かれ、一方は '夏時間インジケーター 1'、もう一方は '夏時間インジケーター 2' です。Clock Drift プロットは、受信した連続シンボル (symbolClk
) の立ち上がりエッジ間のサンプル数を表します。このプロットのサンプル数は 95 ~ 105 です。
dspwwv
モデル例の使用
モデルをシミュレートします。クロック ドリフト、対応する BCD タイム コード シンボル、および現在の時間がその順序で以下のように表示されます。
[時間を表示] パラメーターを [現在] に設定すると、モデルは引き続き現在の時刻を表示します。この時刻は 1 分ごとに更新されます。Transmitted サブシステムの [時間を表示] パラメーターを [ユーザー定義] に変更して、表示する時間を指定できます。