このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
硬判定および軟判定ビタビ復号化の BER の推定
硬判定および軟判定ビタビ復号化器の AWGN におけるビット エラー レート (BER) 性能を推定します。この性能を、符号化されていない 64-QAM リンクの性能と比較します。
シミュレーション パラメーターを設定します。
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 個検出されるか ビットが転送されるまで継続します。
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')
予想どおり、軟判定復号化の結果が最も優れています。