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

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

rsEncoder = comm.RSEncoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskModulator = comm.PSKModulator('ModulationOrder',M,'BitInput',true);

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

rsDecoder = comm.RSDecoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskDemodulator = comm.PSKDemodulator('ModulationOrder',M,'BitOutput',true);

符号語長に対するメッセージ シンボルの比に基づいてリード・ソロモン符号化率を計算します。PSK 変調器のシンボルあたりのビット数を求めます。

codeRate = K/N;
bitsPerSymbol = log2(M);

符号化されていない Eb/No を dB 単位で指定します。符号化率を使用して、符号化されていない Eb/No を、対応する符号化された Eb/No に変換します。

UncodedEbNo = 6;
CodedEbNo = UncodedEbNo + 10*log10(codeRate);

シンボルあたりのビット数を考慮しながら AWGN チャネルを構築します。符号化された Eb/No を channelEbNo プロパティに設定します。

channel = comm.AWGNChannel('BitsPerSymbol',bitsPerSymbol);
channel.EbNo = CodedEbNo;

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

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);
    % Use the RS (15,9) encoder to add error correction capability
    dataEnc = rsEncoder(dataIn);
    % Apply 16-PSK modulation
    txSig = pskModulator(dataIn);
    % Pass the modulated data through the AWGN channel
    rxSig = channel(txSig);
    % Demodulate the received signal
    demodData = pskDemodulator(rxSig);
    % 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