手習ひデジタル信号処理(76) Scilab、comm_tbx、EYEプロットを使ってみる

Joseph Halfmoon

前回ScilabのCommunication toolbox(comm_tbx)をインストールしました。今回から試用してみようと思います。信号「観察」のお道具を先にみていくことに。今回はplot_eye(アイプロット)です。「お目目ぱっちり」で良かったねといわれるアレです。例題をなぞりながら使い方を確認っと。

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

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

まずはアイプロットする信号を作らないと

お道具の使い方をなぞるにも、何か材料がないとなりませぬ。人工的でもテキトーでも何かアイプロットする信号が欲しいデス。Helpなどみればその方法を真似することができまする。こんな感じ。

osf=128;
nSym=500;
x0=prbs(nSym);
x=nrz(x0, osf);

osfは、comm_tbxの紹介資料では、Oversampling factorと注釈ふられていますが、ぶっちゃけ 1シンボルあたりのサンプル点数です。要は1シンボルを128個の数列で表すつもり、ということ。

続いて nSymはシンボル数です。ここでは0か1かを表すバイナリ信号なので、500シンボルつーことは、500ビット分のデータを扱うつもりです。

さて、prbsは前回も出てきましたが、0/1の疑似乱数系列を発生させる関数です。これで x0 には500ビット長の0/1のベクタが格納されております。

さて最後に出てくる nrz は Non Return to Zero の意味ですが、ぶっちゃけ与えられたビット列を1シンボル osf 点に膨らかせた上に、信号らしくオフセット0、振幅1のベクトルにしてくれるものです。osf=128でnSym=500なので、xは64000要素のベクタとなります。雰囲気味わうために先頭の1024サンプル、8シンボル分を時間プロットしてみます。操作はこんな感じ。

plot2d3(x(1:1024))

プロット結果が以下に。真っ黒に見えているのは各点が一本の縦線になっているためです。でも白黒ついてキッパリした信号だな。ここまでは。(なお、各プロットの前にclf()なりなんなりでプロットウインドウを消してくさされや。そうしないとプロット重なります。)NRZ_vector

しかし、上記をみると、0を中心に-1から1まで「離散的」にカタカタ動く信号なので、ちょっと現実離れした人工的すぎる信号です。

「よくやる手」みたいですが、ma(移動平均)をとると良いようです。移動平均の区間の幅はosfにとっているので、前後のビットの値が移動平均されることはあっても3ビットにまたがることはあり得ません。

x1=ma(x, osf);

移動平均後の波形をプロットしたものが以下に。MA_vector

まだまだ人工的ですが、物理的にもあり得そうな雰囲気の信号になってきました。

雑音を加える

アイプロットは信号品質を見るのに使われるプロットであるだけに、上のような「完璧な」信号を観察しても何も面白いことがありません。そこでAWGNを加えてそれらしく加工してみます。

AWGN (Additive White Gaussian Noise) 加算性白色ガウス雑音

であります。

x2=awgn(x1, 0.1);

上記では、信号x1 にN(0,σ)の標準正規分布でσ=0.1というAWGNを加えてます。

plot2d3(x2(1:1024));

雑音を加えた後の信号の先頭部分の様子が以下に。
AWGN01_vector

大分、それらしくなった?

ただσ=0.1だと、結構大丈夫そうな信号だったので、ダメダメな信号も欲しいです。エイヤーでσ=0.2にしてもう一つ信号を作ってみました。

x3=awgn(x1, 0.2);
plot2d3(x3(1:1024));

N(0,σ)の標準正規分布でσ=0.2とした場合の雑音を加えたベクタの様子が以下に。上の信号よりは大分ダメダメになったんじゃないかい?まだまだ大丈夫か?AWGN02_vector

アイプロット

さて本題のアイプロットです。σ=0.1の信号x2をアイプロットしてます。ここにきて osf が役立ちます。osfの値はシンボルの長さ(サンプル点数)であるからです。

plot_eye(x2, osf);

プロット結果が以下に。まあ「お目目」開いている感じ。

AWGN01_eyePlot

お目目の開き方よりも気になったのが以下です。eyePlotWarning

多分、plot_eyeの中で使っている何か関数が廃止対象なんじゃないかしら。comm_tbxはフルScilab記述みたいです。これは内部に踏み込むべきか。でも使っているScilabバージョン 6.1.1 なんだけれども。まあ動いている間は気にしないことにします。

ついでにσ=0.2の雑音を加えた信号x3もプロット。

plot_eye(x3, osf);

こっちゃは大分潰れてきてますが、まだまだイケる?AWGN02_eyePlot

今回、アイ・プロット、アイ・ダイアグラム、アイ・パターンの見方の易しい?解説を探してみましたが、個人的には以下が良かったです。

Panasonic INDUSTRY 制御機器知恵袋 殿

アイパターンの読み方基礎講座

上記は「コネクタ関連情報」のページ配下にあるのですが、「コネクタ関連情報」の中に、高速伝送における伝送特性やSerDesについての解説ページもありいい感じです。もちろんコネクタ関係の解説も満載?よいしょ。

手習ひデジタル信号処理(75) Scilab、comm_tbxをインストールしてみる へ戻る

手習ひデジタル信号処理(77) Scilab、コンスタレーション・プロットを使ってみる へ進む