MastHead

NRZ 信号と PRBS とカップリング


以前にも書きましたが、NRZ 信号を取り扱うときはカップリングが難しくなります。  M-Seq の PRBS を使って実験してみましょう。
アイパターンの窓がとても狭くなっていく様子が分かります。 
2^31-1 の PRBS でカップリングのカットオフ周波数をクロックの 1/40000 まで下げてみましたが、まだ影響が残っています。



上のような回路をでっち上げました。 12.8MHz をクロックとして、31 ビットのシフトレジスタを駆動します。   24 にタップをとった ガロア型ですが、25 を一番左にして書き換えるとフィボナッチの回路になります。  パターンの一巡は 3 分かかります。 Init のスイッチははじめに一瞬だけ閉じて 1 を入れてやります。
HC366 の出力は 30Ω 程度もありますし、出力電流をとりたいので 3 パラにしてやります。  バイアス-T (Bias-T) を 56Ω程度で 20kHz に設計します。 2次のバタワースのハイパスフィルタになります。  (56 という数字に特別の意味はありません。 たまたま手持ちのインダクタとキャパシタで 50 に近かったのがそうだっただけです。)
スコープは 25MHz のバンド幅に制限しています。


NRZ の原理ですが、一定のクロックを使って、ビットの 1 は上のレベル、0 は下のレベルで表現します(正論理の場合)。  図で書くと右のようです:
PRBS はこの NRZ 信号をシミュレートするわけです。


では回路のバイアスT (Bias-T) を切り離して TestPoint 1 をスコープしてみます。 
Infinite Persistence を On にして、3分間待った絵です。 全く問題はありません。 きれいな窓が開いています。


次に Bias-T をつないで TestPoint 2 をスコープしてみます。 これも 3 分です。

これはいけません。 白い影がワッと広がって、 長い時間のうちに上下に振れている様子が分かります。  窓は小さくなりました。 伝送路としては使えないでしょう。

黄色のトレースは過去 16.7ms の期間です。 それ以上古いトレースは白くなっています。


これは BIAS-T によるサグが原因です。  長時間の連続した 1 や 0 が来ますと、カップリングで直流分を切っていますから、サグが出てきます。


このため、信号レベルが以前のベースラインにどんどん近づいてきます。  また、次に来るパルスはずれた方にバイアスされてしまいます。
この影響はしばらくの間(時定数で決まる時間の間)残ります。  こうしてベースラインは上下にふらふら揺れ動いて伝送されるわけですが、 この現象を Baseline Wandering といいます。  こうなると受信側では信号の検出が難しくなってエラーレイトが上がっていきます。

上の絵に描いたようにジタの一因にもなります。

サグを小さくするにはカットオフ周波数を下げるのですが、C を大きくし、また同時に L も大きくしてやります。  そしてカットオフ周波数でのインピーダンスを伝送路のインピーダンスに合わせます。  やってみるとすぐ分かりますが、GHz を扱うときはとても広い帯域になりますから C や L の自己共振点を避けようとすると部品の選択に悩むことになります。  これについては 2005/9/14 の「GHz 帯でのセラミックキャパシタ」の記事と同日の 「キャパシタを並列接続またはコイルを直列接続」の記事を参照してください。


まあとにかく下げてみましょう。 試しに C を 6.8uF、L を 30mH として、カットオフを 300Hz まで下げると右の絵のようになります。
ずいぶん良くなりました。

振れが下側の方に大きいのは、使った PRBS の性質によるもののようです。 1 の長い連続したものが比較的多数接近してくることがあるのに対し、0 の長い連続は分散していることが原因ではないでしょうか。


で、カットオフを下げると窓が大きくなることは分かりましたが、一体どこまで下げればいいのでしょうか。  それはひとえにコーディングの手法によります。 0 や 1 が長く続くことを避ける手法です。


話はちょっとずれますが、ディスクのような磁気記録装置でもやはり同じ問題があります。  NRZ を使うと、全部 1 が来たら読み出すことはできません。  (コイルを使った)ヘッドは磁束の変化を読み出しますので、問題となるわけです。  手っ取り早くこれを解消するにはクロックを2倍にして 1 サイクルで 1 ビットを表し、0 と 1 でパルスの形をひっくり返す (Manchester code) といいですが、そうすると密度が半分になってしまいます。

それで皆さん工夫をするわけですが、さまざまなコーディング手法が生まれました。 
よく使われるのは 8bit/10bit エンコードです。  これは 8 ビットのかたまり (Octet) を、1 や 0 が 5 つ以上続かないように別の 10 ビットのコードに置き換えて、 さらに最近の 1 と 0 の頻度が均等にならないときは逆相にしてやる手法です。  帯域の増加は 25% ですみます。 (下の[参考]の特許を参照)
8B/10B を使ったときは、低域はクロックの 3 桁下で十分です。 NRZ では 6 桁ほどほしくなります。  許せるエラーレイトとのにらみ合いになりますが。
6 桁というと 10Hz あたりになりますね。 300Hz ではまだ物足りない不満が残ります。
NTT の仕様では BER は 10^-12 以下というのが一応の基準です。






[参考]
8B/10B についての IBM の特許は US Patent 4486739 です。
そのサイトでは図がうまく見えないので、特許公報を Word 文書にしました ==> 広報
                                            (IE: 右クリックして「対象をファイルに保存」を選ぶ)
                                            (FireFox: 単に左クリックし、保存する)
IBM Journal of Research and Development Vol 27, No. 5, pp.440-451 (Sep.1983)
   "A DC-Balanced, Partitioned-Block, 8B/10B Transmission Code"==> PDF 文書

特許の中で使われている "running disparity" という言葉の概念は、アナログ回路上での直流分に相当するものです。  パルスを 1 と -1 の列としたとき、過去の総和が 0 になれば直流分がなくなるわけですが、NRZ だと + にも - にも大きく振れていく場合がありえます。  8B/10B ではどのブロックの送り完了の瞬間をとっても disparity が +-1 以内になるように工夫されています。

上の PDF 文書が 8B/10B が世間に知られる元祖になったものです。 8B/10B は ANSI 標準にも採用されています。  下は PDF 文書に出てくる回路図の見方です。


もし光ファイバでインターネットにつないでいらっしゃるのでしたら、8B/10B エンコーディングの恩恵を受けている可能性が高いでしょう。


--------------------------
[M-系列、関連記事]
- M-系列のタップ位置の表とプログラム
- M系列で White Noise の生成
- M系列のレジスタを0で始める、ガロアとフィボナッチを入れ替える