前回はPSD(パワースペクトル密度)プロットがスペアナみたいと喜びました(毎度のことだな。)今回はBER(ビット・エラー・レート)プロットです。いろいろ難しいことはあるものを全部踏みつけにしてしまえば、プロット自体は簡単。そういうことでいいんか?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※動作確認に使用させていただいているのは、Scilab 6.1.1(Windows版)です。
BER: Bit Error Rate、プロット
通信素人が書くのもなんなのですが、通信にエラーはつきものということで、送信された総ビット数に対するエラーになったビット数(もっと厳格な定義があると思うので調べてくだされ)の割合がBERです。Scilabのcomm_tbx(コミュニケーション・ツール・ボックス)内のplot_ber()関数は、このBERをプロットしてくれる関数です。2種類の引数をとれるようです。プロットの「お化粧」引数を除くとこんな感じ。
-
- plot_ber(Eb/N0, BER)
- plot_ber(wf)
1の方はEmpiricalと呼ばれてますが、実験データなどをこのプロットの形式(片対数)で処理するためのものみたいです。これは後でやってみます。
2の方はtheoricalと呼ばれていて、各種変調方式の理論値を与えるものです。変調方式は例によって waveformオブジェクトを与えてもよいし、文字列で指定してもよいようです。こちらを先に動かしてみます。
縦軸の方はBERということで良いのですが、横軸の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")
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")
5点だと折れ線グラフぽいですが、ま、形式はBERプロットだと。実際にBER測定するのはメンドそうですが。