前回はEYEプロットの例題をなぞりながら、Scilab “comm_tbx”のplot_eyeの使い方を練習。今回はコンスタレーション・プロット、plot_const、信号空間ダイヤグラムです。デジタル変調信号(IQの複素信号)をIQ平面上にプロットするもの。ちゃんと分離できれば良し、出来んとヤバいよというやつ。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※動作確認に使用させていただいているのは、Scilab 6.1.1(Windows版)です。
plot_const()
plot_const()関数は、異なる2形式の引数をとることができます。第1の形式では、各種デジタル変調方式の諸元を格納したWaveformオブジェクトという構造体を引数に渡します。すると理論的な(ノイズの載っていない)コンスタレーション・プロットを提示してくれます。一方、第2の形式では実際のデジタル変調信号系列(I、Q分離可能な複素信号)を与えれば、それを使ってプロットしてくれます。今回は先に実データっぽいノイズの載ったデータのコンスタレーション・プロット例を観察し、後から理論的なプロットを描いてみます。
8値PSK
PSK(Phase Shift Keying)、位相偏移変調は、その名のとおり位相を変化させて信号を表すもの。8値なので、8種類の位相を使いわけることになる筈。
例題を見ながら、プロット確認用のサンプル信号を作成してみます。まずは「モジュレータ」オブジェクトの生成から。
-
- fs、サンプリング周波数 1MHz
- fi、IF周波数 0Hz、つまりは Zero IF、ダイレクトコンバージョン
- fsym、シンボル周波数 100kHz
- ‘8psk’、8値PSK変調
ということで mod を生成。
fs = 1e6; fi = 0; fsym = 100e3; mod = mod_init('8psk', fs, fi, fsym);
以下に見えるとおり、modオブジェクトの中身はモジュレータの諸元がつまった構造体です。知らんけど。
実際のテストデータ(0/1の列)は、例によって疑似乱数発生のprbsにお願いします。1e6の長さ(1M点)とな。大盤ぶるまい?実際にこの0/1テストパターンを先ほど作ったmodオブジェクトを使って変調波形とするのがmod_processです。
testpat = prbs(1e6); [mod, x] = mod_process(mod, testpat); plot2d3(x(1:1024));
とりあえず変調かけた結果の x の先頭部分を時間プロットしてみたものが以下に。
ただし x は複素信号なので、上記は実数部分のみだと思います。生のxの先頭部分をダンプすると以下に。実部をとればI、虚部をとればQってことかい。
上記のxに対して前回も出てきた awgn使ってノイズを載せていきます。σ=0.1(ちょっとノイズ盛りすぎな感じがしないでもない)のホワイト・ガウス・ノイズとな。それをコンスタレーション・プロット。
xn = awgn(x, 0.1); clf(); plot_const(xn, 'i');
結果が以下に。八曜星?東洋的な。多少のエラーは発生しそうだけれど、実用的にはギリいけそう?でももう少しノイズを載せるとヤバそうな感じがしないでもないです。
なお、前回も出現した以下のような警告がでます。実験しているのは 6.1.1 なので既に廃止されている筈のバージョンなのでありますが。とりあえず動いているので見て見ぬふりをいたします。
「理論値」のコンスタレーション・プロット
上のようにノイズの載った複素信号でなく、WaveFormオブジェクトという変調方式の諸元を保持する構造体をplot_constに与えると、理論的にはココというプロットをしてくれます。8値PSKの場合が以下に。
wf8psk = wf_init('8psk'); clf(); plot_const(wf8psk, 'i');
上記のようにすれば、各種変調方式のコンスタレーション・プロットができることが分かったので、ついで、ということで16値、QAM(直交位相振幅)変調をやってみました。
clf(); plot_const(wf_init('qam', 16), 'i');
コンスタレーション(星座)は見えた。ホントか?