exponenta event banner

Полярное кодирование и декодирование потоковых выборок

В этом примере показано, как моделировать блоки 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 для заданных значений 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. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток выходных выборок с полярным кодированием и управляющих сигналов, указывающих границы кадра. Модель экспортирует переменные 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. Используйте объекты канала, модулятора и демодулятора System для добавления шума в сигнал.

Снова создайте векторы значений K и E и преобразуйте кадры данных в потоковые выборки с управляющими сигналами. Пример модели импортирует переменные рабочей области decSampleIn, decCtrlIn, decKfi, decEfi, sampleTime, и simTime.

В этом примере количество недопустимых циклов между кадрами эмпирически выбирается для учета задержки блока NR-полярного декодера для заданных значений 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, сконфигурированный для использования списка длиной восемь. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток декодированных выходных выборок и управляющих сигналов, которые указывают границы кадра. Модель экспортирует переменные sampleOut, ctrlOut, и errOut в рабочую область MATLAB. Выберите допустимые значения errOut сигнал с помощью ctrlOut.valid сигнал.

open_system('NRPolarDecodeHDL');
decOut = sim('NRPolarDecodeHDL');

Проверка результатов декодера

Преобразование отсчетов потока, возвращаемых моделью Simulink, в кадры для сравнения с результатами 5G Toolbox™ nrPolarDecode функция.

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. 

См. также

| | (5G Панель инструментов) | (5G Панель инструментов)