手習ひデジタル信号処理(79) Scilab、BER(ビットエラーレート)をプロットしてみる

Joseph Halfmoon

前回はPSD(パワースペクトル密度)プロットがスペアナみたいと喜びました(毎度のことだな。)今回はBER(ビット・エラー・レート)プロットです。いろいろ難しいことはあるものを全部踏みつけにしてしまえば、プロット自体は簡単。そういうことでいいんか?

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※動作確認に使用させていただいているのは、Scilab 6.1.1(Windows版)です。

BER: Bit Error Rate、プロット

通信素人が書くのもなんなのですが、通信にエラーはつきものということで、送信された総ビット数に対するエラーになったビット数(もっと厳格な定義があると思うので調べてくだされ)の割合がBERです。Scilabのcomm_tbx(コミュニケーション・ツール・ボックス)内のplot_ber()関数は、このBERをプロットしてくれる関数です。2種類の引数をとれるようです。プロットの「お化粧」引数を除くとこんな感じ。

    1. plot_ber(Eb/N0, BER)
    2. plot_ber(wf)

1の方はEmpiricalと呼ばれてますが、実験データなどをこのプロットの形式(片対数)で処理するためのものみたいです。これは後でやってみます。

2の方はtheoricalと呼ばれていて、各種変調方式の理論値を与えるものです。変調方式は例によって waveformオブジェクトを与えてもよいし、文字列で指定してもよいようです。こちらを先に動かしてみます。

縦軸の方はBERということで良いのですが、横軸のEb/N0はなんだかな~な指標です。トラ技編集部殿の以下の用語検索をご覧くだされ。

Eb/N0

私などは上の説明を読んでもますます混迷が深いです。何か分かりやすい(そして短い)説明ないかいな(それも日本語で)と探してみつけたページが以下です。

Eb/N0

上記も英語の解説を翻訳したものみたいですが。ともあれ単純なS/Nでは条件の異なる各種変調方式を公平に比較できないので「スペクトラム効率(単位はビット/秒/Hz)」で正規化したということみたいです。知らんけど。

もともと「土俵をそろえる」ための指標のようなので複数の変調方式を比較する、という使い方をするのが当然かと思われます。

TheoricalなBERプロット

さて理論値のBERプロットでは、FSKとBPSKを比べてみました。ぶっちゃけ、これはScilabのHelpに載っている例と同じっす。そのままでは、あまりに芸が無いのでPlotの周辺でちょいとお化粧を施してみました。

gda().grid = [1 1]*color("grey70");
clf()
plot_ber('fsk', 'b')
plot_ber('bpsk', 'r')
legend(['fsk', 'bpsk'])
gca().sub_ticks = [4 4]
title("Bit Error Rate: fsk - bpsk")
xlabel("Eb/N0 [dB]")
ylabel("BER")

プロット結果が以下にberPlotExample

Helpにある素っ気ないプロットよりかは、ちょいと美麗になったのではないかと。

EmpiricalなBERプロット

Empiricalなプロットの方は、プロットの下地は用意してくれますが、プロットすべきデータは行ベクトル(リスト?)で与えねばなりません。テキトーな値を列挙して描かせてみることにいたしました。こんな感じ。

EbNO_x = [0 1 2 3 4]
BER_y = [1e-1 0.5e-1 2e-2 2e-4 2e-5]
gda().grid = [1 1]*color("grey70");
clf()
plot_ber(EbNO_x, BER_y)
gca().sub_ticks = [4 4]
title("Bit Error Rate: Dummy data")
xlabel("Eb/N0 [dB]")
ylabel("BER")

プロットが以下に。berPlotSampleData

5点だと折れ線グラフぽいですが、ま、形式はBERプロットだと。実際にBER測定するのはメンドそうですが。

手習ひデジタル信号処理(78) Scilab、パワースペクトル密度プロットを使ってみる へ戻る

手習ひデジタル信号処理(80) Scilab、変調/復調系関数、どこまでOKなの? へ進む