上図で、CLK、STARTはオリジナルな信号である。ここでは、ノイズの多い(0dB)とノイズのない(100dB)の信号を復調した信号を作成し、エラーの発生している箇所を数える方法を示す。
上図でRXIN0DBはノイズの多い信号である。8サイクルごとにSTART信号がアサートされているが、START信号から最初の4サイクルがy0,y1,y2,y3の送信データに対応している。RXIN0DBをエラー訂正をなにもしないで、復調してビット情報に直すのは簡単で、RXIN0DBの符号を調べればよい。すなわち、正であれば’0’、負であれば’1’である。
上図でDEMOD信号はそのRXIN0DBである。ただし、FFを介しているので、クロックの立ち上がりと同期している。
また、上図でREFはノイズのない場合の復調である。
START信号がアサートして4サイクルのデータが送信データなので、その期間を示すENABLEという信号を生成している。ENABLE=1の区間のDEMODとREF信号がy0,y1,y2,y3の送信データに対応している。
上図ではENABLE信号を生成するために、3ビットのカウンターを用いている。START=1となると、COUNT=7となり、その後減少し、7,6,5,4,3と数える。3まで減少すると値を固定している。すなわち、COUNTのMSB=1の区間がENABLE信号となる。
次に、送信データの総数をTCOUNTで数え、エラーすなわちREFとDEMODが異なる箇所をECOUNTで数えている。
上図ではちょうど20から28のデータを数える区間であり、21個目のデータの箇所で、1つ目のエラーが発生している。
以下の上記シミュレーションを実現するVHDL記述を示す。
その他の必要なファイルとしては
|
library STD, IEEE;
|
いつもどおりの宣言 |
begin
|
クロック生成
ファイルからの信号生成 |
|
-- CORRECT SIGNAL : REF -- DEMOD SIGNAL : DEMOD
|
信号の符号による復調
正ならば'0' 負ならば'1' |
|
-- ENABLE GENERATOR
|
3ビットカウンタによる ENABLE信号の生成 | |
-- ERROR COUNTER
|
DIFFはエラーかどうかの判定
ENABLE=’1’の区間で、 トータルデータTCOUNTと エラーカウントECOUNTを カウントしている。 |
|
コンフィギュ |
configuration CFG_SIGDUMP of SIGDUMP is
|
詳細な説明は講義でやります。
rxin信号(SN=0dB、ノイズ非常に大): rxin0DB.txt
rxin信号(SN=3dB、ノイズ大): rxin3DB.txt
rxin信号(SN=6dB、ノイズやや大): rxin6DB.txt
rxin信号(SN=9dB、ノイズ小): rxin9DB.txt
に対応する10000ビットの送信信号に対して復号できなかったビットエラー率を報告してください。
ビットエラー率(BER)とは、”エラービット数/トータルビット数” で定義されます。
上記BERをメイルにて下記の要領で報告せよ!
メイルタイトル: BER測定
以下の内容を含むこと
1) 学生番号
2)名前
3)4種類のSN比に対する BER値
以上