Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

硬判定および軟判定ビタビ復号化の BER の推定

硬判定および軟判定ビタビ復号化器の AWGN におけるビット誤り率 (BER) 性能を推定します。この性能を、符号化されていない 64-QAM リンクの性能と比較します。

シミュレーション パラメーターを設定します。

clear; close all
rng default
M = 64;                 % Modulation order
k = log2(M);            % Bits per symbol
EbNoVec = (4:10)';      % Eb/No values (dB)
numSymPerFrame = 1000;  % Number of QAM symbols per frame

BER の結果のベクトルを初期化します。

berEstSoft = zeros(size(EbNoVec)); 
berEstHard = zeros(size(EbNoVec));

符号化率 1/2、拘束長 7 の畳み込み符号に対するトレリス構造体およびトレースバック長を設定します。

trellis = poly2trellis(7,[171 133]);
tbl = 32;
rate = 1/2;

主処理ループは以下のステップを実行します。

  • バイナリ データを生成する

  • データの畳み込み符号化

  • データ シンボルに QAM 変調を適用します。送信信号の単位平均パワーを指定する

  • AWGN チャネルを通して、変調された信号を渡す

  • 硬判定手法と近似 LLR 手法を使用して受信信号を復調します。受信信号の単位平均パワーを指定する

  • 硬判定手法と非量子化手法を使用して信号をビタビ復号化する

  • ビット誤り数を計算する

while ループは、誤りが 100 個検出されるか 107 ビットが転送されるまで継続します。

for n = 1:length(EbNoVec)
    % Convert Eb/No to SNR
    snrdB = EbNoVec(n) + 10*log10(k*rate);
    % Noise variance calculation for unity average signal power.
    noiseVar = 10.^(-snrdB/10);
    % Reset the error and bit counters
    [numErrsSoft,numErrsHard,numBits] = deal(0);
    
    while numErrsSoft < 100 && numBits < 1e7
        % Generate binary data and convert to symbols
        dataIn = randi([0 1],numSymPerFrame*k,1);
        
        % Convolutionally encode the data
        dataEnc = convenc(dataIn,trellis);
        
        % QAM modulate
        txSig = qammod(dataEnc,M,'InputType','bit','UnitAveragePower',true);
        
        % Pass through AWGN channel
        rxSig = awgn(txSig,snrdB,'measured');
        
        % Demodulate the noisy signal using hard decision (bit) and
        % soft decision (approximate LLR) approaches.
        rxDataHard = qamdemod(rxSig,M,'OutputType','bit','UnitAveragePower',true);
        rxDataSoft = qamdemod(rxSig,M,'OutputType','approxllr', ...
            'UnitAveragePower',true,'NoiseVariance',noiseVar);
        
        % Viterbi decode the demodulated data
        dataHard = vitdec(rxDataHard,trellis,tbl,'cont','hard');
        dataSoft = vitdec(rxDataSoft,trellis,tbl,'cont','unquant');
        
        % Calculate the number of bit errors in the frame. Adjust for the
        % decoding delay, which is equal to the traceback depth.
        numErrsInFrameHard = biterr(dataIn(1:end-tbl),dataHard(tbl+1:end));
        numErrsInFrameSoft = biterr(dataIn(1:end-tbl),dataSoft(tbl+1:end));
        
        % Increment the error and bit counters
        numErrsHard = numErrsHard + numErrsInFrameHard;
        numErrsSoft = numErrsSoft + numErrsInFrameSoft;
        numBits = numBits + numSymPerFrame*k;

    end
    
    % Estimate the BER for both methods
    berEstSoft(n) = numErrsSoft/numBits;
    berEstHard(n) = numErrsHard/numBits;
end

硬判定と軟判定の推定 BER データをプロットします。符号化されていない 64-QAM チャネルの理論上の性能をプロットします。

semilogy(EbNoVec,[berEstSoft berEstHard],'-*')
hold on
semilogy(EbNoVec,berawgn(EbNoVec,'qam',M))
legend('Soft','Hard','Uncoded','location','best')
grid
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Soft, Hard, Uncoded.

予想どおり、軟判定復号化の結果が最も優れています。