PRBSの設計方法と概念

PRBSの設計方法と概念

 シリアル通信を行っていると、エラーを確認する必要があります。一般に通信にはエラーが付き物で、エラーの発生する率をエラーレートといいます。この場合の通信は「無線」「有線」「光」などがありますし、電話やインターネットのような双方向の場合もありますし、放送のような一方通行の場合もあります。

 エラーレートを測定するには、その通信規格で測定方法が定められていますので、規格に沿って測定することになるのですが、ある程度知識をもって規格を読む必要があります。

 エラーレートを測定するには、ビットエラーレートを測定するのが一般的です。ビットエラーレートはBit Error Rate(BER)と呼ばれます。現場ではバーとかエラーレートとかビーイーアールとか呼んでいます。

 昨今の通信や放送ではエラー訂正という回路が付加されており、BERもエラー訂正前とエラー訂正後の2種類に分ける事ができます。余談ですが、変調されている通信が多いので、変調のエラーレートはMERと呼んでいます。

 それでは、どのようにして通信のビットエラーレートを測るのか。という事になりますが、これは単純です。送った値と受け取った値が同じかどうかを数えます。こんな単純な事が規格には載っていないことが多いので、規格書を読んでも式が書いてあるだけで、わからない。という事になります。下の図のように、送信するデータと受信したデータを照合して、いくつ間違いがあったのかを数えます。

 上の例では、10ビット送って1ビット間違っていますので、式のようにBERは0.1になります。一般的な通信では10E-6以下のBERを満足します。

 上の例では10ビットだったので、1個間違えば0.1でした。100ビット送って1ビット間違えば0.01になります。このようにBERを測るには多くの数のデータを送信・受信する必要があります。多くの数を照合するにはどうすれば良いでしょうか? 送信機側と受信器側で同じデータ列を持っていて、照合しましょうか? そこで考えられたのが長い巡回符号です。

 巡回符号というのは、一見ランダムに見える値ですが、一定の周期で一巡する値の事です。たとえば、10E29個で一巡するようなデータの列を作って送信器から出力するのです。受信側では、一巡するデータであることがわかっているので、その周期で照合すれば良い事になります。

 そこでPseudo-random bit sequence(PRBS)という巡回符号を使ってBERを測るようになります。PRBSはランダムなデータなので、ノイズとして用いられることも多く、ノイズとして用いる場合にはPN(Pseudorandom Noise)と呼ばれています。業界でも呼び名が異なるようで、放送や通信の業界ではPRBSと呼ばれますし、宇宙通信の場合にはPNと呼ばれています。

 そして厄介なのがPRBSを発生する回路を線形帰還シフト・レジスタ(英語:Linear Feedback Shift Register)と呼び、しばしばLFSRと略されます。なので、PRBSもLFSRもPNも元は同じです。さらに混乱する言葉としてM系列という事ががあり、これはLFSRの中でも巡回周期が最大になる式の事を表します。

 PRBS回路は規格書で、そのものズバリの回路を示していない事が多く、規格書を書いた人がイジワルしているのかと思うことがあります。通常規格書では、PRBSの回路を式で次のように示しています。

G(y)= X7 + X3 + 1

 初めてこの式を読んで、電気回路にできる人がどれぐらい居るのでしょうか?以下のように書けば誰でも設計できると思います。


 DFFへの初期値やクロックは省略していますが、単純なシフトレジスタの回路です。式から、XORへの分岐部分が想像できると思います。つまり、Xで示したのはXORに入力するシフトレジスタの位置を示しています。このように引き出す位置の事をタップといいます。式の+1は1ビット目に戻す。と意味すると思います。こうなれば、どんなPRBSでも式を与えられれば設計できると思います。

 注意しなくてはいけないのは、上記のシフトレジスタが全部ゼロから始まったらどうなるでしょう? そうです。ずっとゼロになります。したがって、PRBSの初期値は全部”1″から始めるのが定説です。大抵の規格書では初期値の事が記載されています。

 実際の設計は別のページで解説することにして、ここまでで送信器側の回路は設計できそうな雰囲気です。それでは、受信側はどうすれば良いでしょうか?

 これも規格書には載っていません。実は受信側にも同じ回路を載せます。そして、初期値を全部”1″ではなく、受信したデータ(上記であれば受信した7ビット)を初期値としてスタートします。すると、不思議なことに、送信側と受信側では同じ周期でランダムな値が生成されます。

 ここまでくれば、どうすれば良いのかわかると思います。受信側では、データの周期も値もわかっているので、受信したデータと照合できます。そして、エラーの数を数えれば良い。という事になります。

 エラーが非常に少なければ、単純に数ビットのエラーを数えれば良いのですが、エラーが多くなればなるほど、周期を合わせるのが怪しくなります。その場合には一定時間で初期値を取り直す等して、BER測定をやり直す必要が出てきます。

 先に示したM系列はこのシフトレジスタ(上記の場合7ビット)のうち、タップを取る場所で巡回する周期が変わりますので、最大の物をM系列といいます。

 たとえば、上記のように7ビットの場合、M系列は

  • G(y)=X7+X1+1
  • G(y)=X7+X3+1
  • G(y)=X7+X3+X2+X1+1
  • G(y)=X7+X4+X3+X2+1
  • G(y)=X7+X6+X4+X2+1
  • G(y)=X7+X6+X5+X2+1
  • G(y)=X7+X6+X5+X4+X2+X1+1
  • G(y)=X7+X5+X4+X3+X2+X1+1

 以上のようにな組み合わせ(式)が考えられます。そして、巡回する周期はM系列の場合

 という計算で求める事ができます。つまり、シフトレジスタが7ビットの場合は127ビットで一巡する疑似ランダム信号。と言えます。

 PRBS信号と一言で言っても、シフトレジスタのDFFの数と引き出すタップの位置は様々なので、規格書に書いてある式から上記のような回路に落とし込む必要があります。