Оцените производительность LDPC в AWGN

Передайте LDPC-закодированный, модулируемый QPSK поток битов через канал AWGN. Затем демодулируйте, декодируйте, и ошибки количества.

Создайте пару энкодера и декодера LDPC.

ldpcEnc = comm.LDPCEncoder;
ldpcDec = comm.LDPCDecoder;

Создайте модулятор QPSK, демодулятор QPSK и детектор Коэффициента ошибок.

qpskMod = comm.QPSKModulator('BitInput',true);
qpskDemod = comm.QPSKDemodulator('BitOutput',true,...
    'DecisionMethod','Approximate log-likelihood ratio', ...
    'VarianceSource','Input port');
errorCnt = comm.ErrorRate;

Создайте вектор значений ОСШ, чтобы оценить. Инициализируйте вектор частоты ошибок по битам.

snrVec = [0 0.2 0.4 0.6 0.65 0.7 0.75 0.8];
ber = zeros(length(snrVec),1);

Закодируйте, модулируйте и передайте 32400-битные кадры двоичных данных через канал AWGN. Затем демодулируйте, декодируйте и оцените частоту ошибок по битам.

for k = 1:length(snrVec)
    noiseVar = 1/10^(snrVec(k)/10);
    errorStats = zeros(1,3);
    while errorStats(2) <= 200 && errorStats(3) < 5e6
        data = logical(randi([0 1],32400,1));   % Generate binary data
        encData = ldpcEnc(data);                % Apply LDPC encoding
        modSig = qpskMod(encData);              % Modulate
        rxSig = awgn(modSig,snrVec(k));         % Pass through AWGN channel
        demodSig = qpskDemod(rxSig,noiseVar);   % Demodulate
        rxData = ldpcDec(demodSig);             % Decode LDPC
        errorStats = errorCnt(data,rxData);     % Compute error stats
    end
    
    % Save the BER for the current Eb/No and reset the error rate counter
    ber(k) = errorStats(1);
    reset(errorCnt)
end

Постройте частоту ошибок по битам.

semilogy(snrVec,ber,'-o')
grid
xlabel('SNR (dB)')
ylabel('Bit Error Rate')