Передайте 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')