Scilabのcomm_tbxにはお世話になっているのだけれど、いろいろ問題もあり「代替自前関数」を作ると前回書きました。今回はアイ・ダイアグラム(アイ・パターン)のプロット関数を作成してみました。ぶっちゃけオシロスコープでデジタル信号をシンボルレートの倍数でトリガかけるようなやり方でプロットできそうだし。イイのか?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上で、Scilab6.1.1およびScilab上のツールボックス Scilab Communication Toolbox 0.3.1(以下comm_tbx)を使用させていただいとります。
comm_tbxのplot_eye()関数
plot_eye()関数自体は、上記のScilabバージョンにて今のところ問題なく動作しているのですが、気になっているのが以下です。
plot_eye()内部で使っている機能がそのうち無くなるぞ、という警告みたいです。そのくせ、comm_tbx自体は更新されてはいないみたい。まあ有料ソフトではないのでそういうテキパキ更新などは期待薄だと。ちなみにどの機能が無くなるのかは調べてないデス、手抜き。
既にScilab 2023年版をとっくの昔にインストール済なのですが、上記などの行く末は動作未確認デス。
テストパターンの生成
さて、アイ・パターンを描くテストのために、そのテストパターンが必要であります。ちょうどplot_eye()関数のHelpページにnrz信号でテストパターンを作る例が掲載されてました。しかし、残念というか例によってで、そのままコピペしても思ったような信号は得られません。ありがち。
手元の環境で動作するようにHelp例に勝手変更入れたものが以下に。
T = 128; x = nrz(prbs(500),T); x = ma(x, T); x = awgn(x, 0.1); clf(); plot_eye(x, T);
上記のテストパターンxをcomm_tbx内のplot_eye関数を使ってプロットした結果が以下に。
ノイズが載っているとは言え、人工的なテストパターンであります。
なお、アイ・パターンの実機測定に関しては、オシロスコープ業界最大手、テクトロニクス様の以下のページなどが参考になるかと。
自前関数作成
作製した自前関数が以下に。plot_eye()関数に比べると相当な手抜きであります。引数に与えた信号をシンボル長の2倍で折り返してプロットするだけのもの。なおplot_eye()関数は信号の各点をドットで描いてますが、以下の自前関数では、オシロスコープ風の見た目にしたかったので、時系列の各点を線で結んでます。
// EYE diagram // nSYM: symbol length [samples] // wav: data to be plotted function plotEYE(nSYM, wav) N0 = length(wav); L0 = nSYM * 2; N = int(N0 / L0); if N > 1 then dat = matrix(wav(1:L0*N), [L0, N]) plot(dat); xtitle('EYE diagram', '[samples]','MAG'); end endfunction
自前関数のプロット結果が以下に。Matrixをプロットするとデフォルトで色を付けてくれるみたいです。信号の各点を線で結んでいるのでかなり五月蠅い見た目になってしまいました。まあ、これはこれで良いかと。なお、(0,0)の点から細く青い筋が出ているのは、これは信号を生成したときの「頭だし」で移動平均値がゆるゆると初期化されつつある部分だと思います。知らんけど。
一部分を拡大すると以下のようです。今回はランダムな雑音のみを与えましたが、何か系統的なものがあり、また、も少し細かいサンプルレートであるならばオシロ的な見た目になるかと(期待しとります。)
たったこんだけでもメンドイよ。