手習ひデジタル信号処理(104) Scilab、comm_tbx、NRZIからバイナリ復元

Joseph Halfmoon

Scilabのcomm_tbxにはバイナリシーケンスをNRZ信号化する関数はあれども他の符号化関数がないです。そこで前回、自前NRZI関数を作成。しかし生成した信号から元のバイナリシーケンスに戻す逆方向の関数も欲しいです。動作確認のためなんだけれども。ついでにNRZ信号をバイナリに戻す関数も作成。どちらもテスト用っす。

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

※Windows11上で、Scilab6.1.1およびScilab上のツールボックス Scilab Communication Toolbox 0.3.1(以下comm_tbx)を使用させていただいとります。

NRZ信号、NRZI信号をバイナリに戻す関数

comm_tbxのnrz関数や、前回自前作成のmakeNRZI関数で作成される「信号」は、バイナリシーケンスの各ビットをシンボル長だけ引き伸ばした(NRZIの場合は変換)数列でした。シンボル長さが微妙に変動したり、雑音が乗ったりしてない「ピュア」な信号です。今回作成の「逆関数」はこのような「ピュア」信号を元のバイナリに戻すもので信号処理の実用というより、動作確認用のものであります。

まずはNRZIをもとに戻す関数(ホントに正しいのか知らんけど。)

// extract binary sequence from NRZI pulses (by J.Halfmoon Oct. 26, 2023)
// ONLY FOR IDEAL PULSES, NOT FOR REAL.
// nrzi: input NRZI pulse
// osf: Over-Sampling Factor(nrzi, osf)
function b=extNRZI(nrzi, osf)
    nSym=int(length(nrzi)/osf);
    index = 1;
    curr = 0;
    old=0;
    for n=1:nSym
        if nrzi((n-1)*osf+1)==1 then
            curr = bitxor(old, 1);
        else
            curr = old
        end
        old = nrzi((n-1)*osf+1);
        b(index) = curr;
        index = index +1;
    end
endfunction

続いて NRZ をもとに戻す関数(こっちゃは簡単、多分OKね。)

// extract binary sequence from NRZ pulses (by J.Halfmoon Oct. 19, 2023)
// ONLY FOR IDEAL PULSES, NOT FOR REAL.
// nrzP: input NRZ pulse
// osf: Over-Sampling Factor(nrzi, osf)
function b=extNRZ(nrzP, osf)
    nSym=int(length(nrzP)/osf);
    index = 1;
    for n=1:nSym
        b(index) = nrzP((n-1)*osf+1);
        index = index +1;
    end
endfunction
上記関数の動作確認

以下のようにして、疑似乱数バイナリシーケンス x をNRZ、NRZI信号(信号名先頭y)とした後で、今回作成の関数で「元に」戻して(信号名先頭x)プロットしてみました。

n=30;
osf=5;
x=prbs(n);
yNRZ=nrz(x,osf);
yNRZI=makeNRZI(x, osf);
xNRZ=extNRZ(yNRZ, osf);
xNRZI=extNRZI(yNRZI, osf);
clf();
subplot(3,1,1); plot_binary(x); title('x');
subplot(3,1,2); plot_binary(xNRZ); title('xNRZ');
subplot(3,1,3); plot_binary(xNRZI); title('xNRZI');

結果はこんな感じ。NRZI2BINARY

もとには戻った。ホントにOKかどうかは知らんけど。テスト用のパターンが欲しいぞなもし。

手習ひデジタル信号処理(103) Scilab、comm_tbx、NRZはあるNRZIはない へ戻る

手習ひデジタル信号処理(105) Scilab、comm_tbx、赤外線リモコンの波形 へ進む