Main Content

符号化を使用する AWGN チャネルの Eb/No の構成

この例では、チャネル符号化を採用している通信リンクについてノイズ密度に対するビット エネルギーの比 (Eb/No) を設定する方法を説明します。

リード・ソロモン符号のコードワード長とメッセージ長を指定します。変調次数を指定します。

N = 15;        % R-S codeword length in symbols
K = 9;         % R-S message length in symbols
M = 16;        % Modulation order
bps = log2(M); % Bits per symbol

(15,9) リード・ソロモン符号化器と 16-PSK 変調器を構築します。ビット入力を受け入れるようにオブジェクトを指定します。

rsEncoder = comm.RSEncoder( ...
    CodewordLength=N, ...
    MessageLength=K, ...
    BitInput=true);

対応するリード・ソロモン復号化器のオブジェクトと 16-PSK 復調器のオブジェクトを作成します。

rsDecoder = comm.RSDecoder( ...
    CodewordLength=N, ...
    MessageLength=K, ...
    BitInput=true);

コードワード長に対するメッセージ シンボルの比に基づいてリード・ソロモン符号化率を計算します。

codeRate = K/N;

符号化されていない Eb/No を dB 単位で指定します。符号化率とシンボルあたりのビット数を使用して、符号化されていない Eb/No を、対応する SNR に変換します。

UncodedEbNo = 6;
SNR = convertSNR(UncodedEbNo,"ebno","SNR", ...
    BitsPerSymbol=bps, ...
    CodingRate=codeRate);

シミュレーションの誤りとビットの総数を設定します。精度を確保するため、十分な数のビット誤りが検出されるまでシミュレーションを実行してください。合計ビット数を使用して、シミュレーションの実行が長くなりすぎないようにします。

totalErrors = 100;
totalBits = 1e6;

エラー レート計算機 System object™ を構築し、エラー レート ベクトルを初期化します。

errorRate = comm.ErrorRate;
errorVec = zeros(3,1);

シミュレーションを実行して BER を求めます。

while errorVec(2) < totalErrors && errorVec(3) < totalBits
    % Generate random bits
    dataIn = randi([0,1],360,1);
    % Add error correction capability by using the RS (15,9) encoder
    dataEnc = rsEncoder(dataIn);
    % Apply 16-PSK modulation
    txSig = pskmod(dataIn,M,InputType="bit");
    % Pass the modulated data through an AWGN channel
    rxSig = awgn(txSig,SNR);
    % Demodulate the received signal
    demodData = pskdemod(rxSig,M,OutputType="bit");
    % Decode the demodulated data with the RS (15,9) decoder
    dataOut = rsDecoder(demodData);
    % Collect error statistics
    errorVec = errorRate(dataIn,demodData);
end

結果として得られたビット エラー レートを表示します。

ber = errorVec(1)
ber = 0.0935

参考