Этот пример показывает, как симулировать блоки NR Polar Encode и Decode и сравнить аппаратно оптимизированные результаты с результатами от 5G функций Toolbox™.
Выберите серию значений входа для K и E. Эти значения должны быть допустимыми парами, поддерживаемыми 5G стандартом NR. Сгенерируйте случайные системы координат входных данных и добавьте кодовое слово CRC. Этот пример использует режим восходящей линии связи, поэтому каждое сообщение имеет 11 биты CRC. Нисходящие сообщения имеют 24 бита CRC, и нисходящие сообщения DCI требуют предварительной обработки 1 в систему координат.
Преобразуйте системы координат сообщения в потоки булевых выборок и управляющих сигналов, которые указывают контуры системы координат. Сгенерируйте входные векторы значений K и E с течением времени. Пример модели импортирует переменные рабочей области encSampleIn
, encCtrlIn
, encKfi
, encEfi
, sampleTime
, и simTime
.
В этом примере количество недопустимых циклов между системами координат эмпирически выбирается, чтобы соответствовать задержке блока NR Polar Encoder для заданных значений K и E. Когда значения K и E больше, чем в этом примере, количество недопустимых циклов между системами координат должно быть больше. Используйте выходной сигнал nextFrame блока, чтобы определить, когда блок готов принять начало следующего входного кадра.
K = [132; 132; 132; 54]; E = [256; 256; 256; 124]; numFrames = 4; numCRCBits = 11; idleCyclesBetweenSamples = 0; idleCyclesBetweenFrames = 500; samplesPerCycle = 1; btwSamples = false(idleCyclesBetweenSamples,1); btwFrames = false(idleCyclesBetweenFrames,1); encKfi = []; encEfi = []; dataIn = {numFrames}; for ii = 1:numFrames msg = randi([0 1],K(ii)-numCRCBits,1); msg = nrCRCEncode(msg,'11'); % CRC poly is '11' for uplink and '24C' for downlink encKfi = [encKfi;repmat([fi(K(ii),0,10,0);btwSamples],length(msg),1);btwFrames]; encEfi = [encEfi;repmat([fi(E(ii),0,14,0);btwSamples],length(msg),1);btwFrames]; dataIn{1,ii} = logical(msg); end [encSampleIn,encCtrlIn] = whdlFramesToSamples(... dataIn,idleCyclesBetweenSamples,idleCyclesBetweenFrames,samplesPerCycle); sampleTime = 1; simTime = length(encCtrlIn) + K(numFrames)*2; %#ok<NASGU>
Подсистема Алгоритма HDL содержит блок NR Polar Encoder. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток полярно-кодированных выходных выборок и управляющих сигналов, которые указывают контуры системы координат. Модель экспортирует переменные sampleOut
и ctrlOut
в рабочее пространство MATLAB.
open_system('NRPolarEncodeHDL'); encOut = sim('NRPolarEncodeHDL');
Преобразуйте потоковые данные назад в системы координат для сравнения с результатами 5G Toolbox™ nrPolarEncode
функция.
encHDL = whdlSamplesToFrames(encOut.sampleOut,encOut.ctrlOut); for ii=1:numFrames encRef = nrPolarEncode(double(dataIn{ii}),E(ii),10,false); % last two arguments needed for uplink only error = sum(abs(encRef - encHDL{ii})); fprintf(['Encoded Frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'],ii,error); end
Maximum frame size computed to be 256 samples. Encoded Frame 1: Behavioral and HDL simulation differ by 0 bits Encoded Frame 2: Behavioral and HDL simulation differ by 0 bits Encoded Frame 3: Behavioral and HDL simulation differ by 0 bits Encoded Frame 4: Behavioral and HDL simulation differ by 0 bits
Используйте закодированные данные для генерации входных логарифмических коэффициентов логарифмической правдоподобности (LLR) для блока NR Polar Decoder. Используйте Системных объектов канала, модулятора и демодулятора, чтобы добавить шум к сигналу.
Снова создайте векторы значений K и E и преобразуйте системы координат данных в потоковые выборки с управляющими сигналами. Пример модели импортирует переменные рабочей области decSampleIn
, decCtrlIn
, decKfi
, decEfi
, sampleTime
, и simTime
.
В этом примере количество недопустимых циклов между системами координат эмпирически выбирается, чтобы соответствовать задержке блока NR Polar Decoder для заданных значений K и E. Когда значения K и E больше, чем в этом примере, количество недопустимых циклов между системами координат должно быть больше. Используйте выходной сигнал nextFrame блока, чтобы определить, когда блок готов принять начало следующего входного кадра.
nVar = 0.7; chan = comm.AWGNChannel('NoiseMethod','Variance','Variance',nVar); bpskMod = comm.BPSKModulator; bpskDemod = comm.BPSKDemodulator('DecisionMethod', ... 'Approximate log-likelihood ratio','Variance',nVar); % more idle cycles greater list lengths. max 5251 for list 4. % 1st pkt LL=8 just over 5000, not sure what is max? % should i make this a more simulink-y example to show how to use the fifo % with the nextframe signal? idleCyclesBetweenFrames = 6000; btwFrames = false(idleCyclesBetweenFrames,1); decKfi = []; decEfi = []; rxLLR = {numFrames}; rxLLRfi = {numFrames}; for ii=1:numFrames mod = bpskMod(double(encHDL{ii})); rSig = chan(mod); rxLLR{1,ii} = bpskDemod(rSig); rxLLRfi{1,ii} = fi(rxLLR{1,ii},1,6,0); decKfi = [decKfi;repmat([fi(K(ii),0,10,0);btwSamples],length(rSig),1);btwFrames]; decEfi = [decEfi;repmat([fi(E(ii),0,14,0);btwSamples],length(rSig),1);btwFrames]; end [decSampleIn,decCtrlIn] = whdlFramesToSamples(... rxLLRfi,idleCyclesBetweenSamples,idleCyclesBetweenFrames,samplesPerCycle); simTime = length(decCtrlIn) + K(numFrames)*2;
Подсистема алгоритма HDL содержит блок NR Polar Decoder, настроенный на использование списка длиной восемь. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток декодированных выходных выборок и сигналов управления, которые указывают контуры системы координат. Модель экспортирует переменные sampleOut
, ctrlOut
, и errOut
в рабочее пространство MATLAB. Выберите допустимые значения errOut
сигнал при помощи ctrlOut.valid
сигнал.
open_system('NRPolarDecodeHDL'); decOut = sim('NRPolarDecodeHDL');
Преобразуйте потоковые выборки, возвращенные из модели Simulink, в системы координат для сравнения с результатами 5G Toolbox™ nrPolarDecode
функция.
The nrPolarDecode
функция возвращает декодированное сообщение, включая 24 пересчитанных бит CRC. Блок NR Polar Decoder возвращает декодированное сообщение без бит CRC и возвращает состояние CRC отдельно на порту err.
Выходные биты блоков и функций могут отличаться для систем координат, которые сообщают об ошибке декодирования. Блок может вернуть ошибку декодирования в случаях, когда функция успешно декодирует сообщение. Общая производительность декодирования блока очень близка к эффективности функции.
decHDL = whdlSamplesToFrames(decOut.sampleOut,decOut.ctrlOut); errHDL = decOut.errOut(decOut.ctrlOut(:,2)); L = 8; for ii = 1:numFrames decRef = nrPolarDecode(rxLLR{1,ii},K(ii),E(ii),L,10,false,11); % last three arguments needed for uplink only [decRef,errRef] = nrCRCDecode(decRef,'11'); % CRC poly is '11' for uplink, '24C' for downlink error = sum(abs(decRef - decHDL{1,ii})); fprintf(['Decoded Frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'],ii,error); msg = dataIn{1,ii}(1:(length(dataIn{ii})-numCRCBits)); loopErr = sum(abs(msg - decHDL{1,ii})); fprintf(['The decoded output message from the HDL simulation',... ' differs from the input message by %d bits \n'],loopErr); errRef = any(errRef); if ~errHDL(ii) && ~errRef fprintf('HDL and behavioral simulations successfully decoded the message. \n'); elseif errHDL(ii) && ~errRef fprintf(['Behavioral simulation successfully decoded the message,',... ' but HDL sim reported a decode error\n']); elseif ~errHDL(ii) && errRef fprintf(['HDL simulation successfully decoded the message,',... ' but behavioral simulation reported a decode error\n']); else fprintf('HDL and behavioral simulations both reported a decode error. \n'); end end
Maximum frame size computed to be 121 samples. Decoded Frame 1: Behavioral and HDL simulation differ by 0 bits The decoded output message from the HDL simulation differs from the input message by 0 bits HDL and behavioral simulations successfully decoded the message. Decoded Frame 2: Behavioral and HDL simulation differ by 0 bits The decoded output message from the HDL simulation differs from the input message by 0 bits HDL and behavioral simulations successfully decoded the message. Decoded Frame 3: Behavioral and HDL simulation differ by 0 bits The decoded output message from the HDL simulation differs from the input message by 0 bits HDL and behavioral simulations successfully decoded the message. Decoded Frame 4: Behavioral and HDL simulation differ by 0 bits The decoded output message from the HDL simulation differs from the input message by 0 bits HDL and behavioral simulations successfully decoded the message.
NR Polar Decoder | NR Polar Encoder | nrPolarDecode
(5G Toolbox) | nrPolarEncode
(5G Toolbox)