Cannot reproduce 5G NR Polar Code performance using 5G Toolbox

9 visualizaciones (últimos 30 días)
Hello everyone,
I am trying to reproduce the performance of 5G NR Polar code on AWGN channel which can be found at https://fr.mathworks.com/help/5g/examples/3GPP-5GNR-Polar-Coding.html
To be specific, I am trying to reproduce the DL, CRC-24, L=8 Block Error Rate curve for K/E=54/124 (the black square curve).
My code is here, which is just a copy-paste of the example found in the same link and I have changed the desired EbNo to -1.8dB (thus SNR=-2.4 dB) and have increased the numFrames simulated.
According to the figure, I expect the Block Error Rate at about 4e-2 and 6e-2. But, suprisingly, the performance is much much worse ...
Block Error Rate: 0.868, Bit Error Rate: 0.34563, at SNR = -2.4 dB
Did I miss something? Is this simply the bug of 5G Toolbox?
Thanks.
s = rng(611); % Seed the RNG for repeatability
% Code parameters
K = 54; % Message length in bits, including CRC, K > 30
E = 124; % Rate matched output length, E <= 8192
% EbNo = 0.8; % EbNo in dB
EbNo = -1.8; % EbNo in dB
L = 8; % List length, a power of two, [1 2 4 8]
numFrames = 1000; % Number of frames to simulate
linkDir = 'DL'; % Link direction: downlink ('DL') OR uplink ('UL')
if strcmp(linkDir,'DL')
% Downlink scenario (K >= 36, including CRC bits)
crcLen = 24; % Number of CRC bits for DL, Section 5.1, [6]
poly = '24C'; % CRC polynomial
nPC = 0; % Number of parity check bits, Section 5.3.1.2, [6]
nMax = 9; % Maximum value of n, for 2^n, Section 7.3.3, [6]
iIL = true; % Interleave input, Section 5.3.1.1, [6]
iBIL = false; % Interleave coded bits, Section 5.4.1.3, [6]
else
% Uplink scenario (K > 30, including CRC bits)
crcLen = 11;
poly = '11';
nPC = 0;
nMax = 10;
iIL = false;
iBIL = true;
end
R = K/E; % Effective code rate
bps = 2; % bits per symbol, 1 for BPSK, 2 for QPSK
EsNo = EbNo + 10*log10(bps);
snrdB = EsNo + 10*log10(R); % in dB
noiseVar = 1./(10.^(snrdB/10));
% Modulator, Channel, Demodulator
qpskMod = comm.QPSKModulator('BitInput',true);
chan = comm.AWGNChannel('NoiseMethod','Variance','Variance',noiseVar);
qpskDemod = comm.QPSKDemodulator('BitOutput',true,'DecisionMethod', ...
'Approximate log-likelihood ratio','Variance',noiseVar);
% Error meter
ber = comm.ErrorRate;
numferr = 0;
for i = 1:numFrames
% Generate a random message
msg = randi([0 1],K-crcLen,1);
% Attach CRC
msgcrc = nrCRCEncode(msg,poly);
% Polar encode
encOut = nrPolarEncode(msgcrc,E,nMax,iIL);
N = length(encOut);
% Rate match
modIn = nrRateMatchPolar(encOut,K,E,iBIL);
% Modulate
modOut = qpskMod(modIn);
% Add White Gaussian noise
rSig = chan(modOut);
% Soft demodulate
rxLLR = qpskDemod(rSig);
% Rate recover
decIn = nrRateRecoverPolar(rxLLR,K,N,iBIL);
% Polar decode
decBits = nrPolarDecode(decIn,K,E,L,nMax,iIL,crcLen);
% Compare msg and decoded bits
errStats = ber(double(decBits(1:K-crcLen)), msg);
numferr = numferr + any(decBits(1:K-crcLen)~=msg);
end
disp(['Block Error Rate: ' num2str(numferr/numFrames) ...
', Bit Error Rate: ' num2str(errStats(1)) ...
', at SNR = ' num2str(snrdB) ' dB'])
rng(s); % Restore RNG

Respuesta aceptada

Amit Kansal
Amit Kansal el 28 de En. de 2019
One of the issues we realized was that even though the text and code in the example used QPSK, we had actually used BPSK for the pre-saved results, which you are trying to reproduce. This implied that the x-axis (SNR) was not correct. I have not checked your code, but please see if this change (i.e. use BPSK in the code above) will get more closer results.
Even with the switch in the modulation order, the relative curves (comparing different rates) remain the same.
Please let me know if this applies, else i can debug further,
Amit
  3 comentarios
Amit Kansal
Amit Kansal el 5 de Feb. de 2019
Very good. Yes, the results (BLER curves) have been updated for the next release of the toolbox (scheduled for early March) to account for the modulation (QPSK) used in teh example.
Cath Maillon
Cath Maillon el 10 de Feb. de 2019
Hello,
Is there any place that I can find these "pre-saved results"?
Thanks

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by