В этом примере показано, как симулировать Полярный NR, Кодируют и Декодируют блоки и сравнивают оптимизированные оборудованием результаты с результатами функций 5G Toolbox™.
Необходимо задать направление ссылки, потому что схема кодирования отличается для нисходящих и восходящих сообщений. Нисходящие сообщения закодированы с перемежением и используют продолжительность CRC 24 битов. Восходящие сообщения не используют перемежение и используют продолжительность CRC 6 (18 <K <25) или 11 битов (31 <K <1023).
Этот пример использует восходящий режим с коэффициентами теплопроводности, больше, чем 31, таким образом, каждое сообщение должно иметь 11 битов CRC.
Выберите серию входных значений для K и E. Эти значения должны быть допустимыми парами, поддержанными 5G стандарт NR. Сгенерируйте случайные системы координат входных данных и добавьте кодовую комбинацию CRC.
Преобразуйте системы координат сообщения в потоки булевых выборок и управляющих сигналов, которые указывают на контуры системы координат. Сгенерируйте входные векторы K и значений E в зависимости от времени. Модель в качестве примера импортирует переменные encSampleIn
рабочей области,
encCtrlIn
, encKfi
, encEfi
Размер шага
, и simTime
.
В данном примере количество недопустимых циклов между системами координат опытным путем выбрано, чтобы вместить задержку NR Полярный блок 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 polynomial is '6' for uplink when 18<K<25, '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 Полярный блок Encoder. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток полярно закодированных выходных выборок и управляющих сигналов, которые указывают на контуры системы координат. NR Полярный блок Encoder в модели имеет набор параметров направления Ссылки к Uplink
, и принимает K и значения E от входных портов. Модель экспортирует переменные sampleOut
и ctrlOut
к рабочему пространству MATLAB.
open_system('NRPolarEncodeHDL'); encOut = sim('NRPolarEncodeHDL');
Преобразуйте данные о потоковой передаче назад в системы координат для сравнения с результатами nrPolarEncode
5G Toolbox™ функция.
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
Используйте закодированные данные, чтобы сгенерировать входные отношения логарифмической правдоподобности (LLRs) для NR Полярный блок Decoder. Используйте канал, модулятор и Системные объекты демодулятора, чтобы добавить шум в сигнал.
Снова, создайте векторы из K и значений E, и преобразуйте системы координат данных к потоковой передаче выборок с управляющими сигналами. Модель в качестве примера импортирует переменные decSampleIn
рабочей области,
decCtrlIn
, decKfi
, decEfi
Размер шага
, и simTime
.
В данном примере количество недопустимых циклов между системами координат опытным путем выбрано, чтобы вместить задержку NR Полярный блок 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 Полярный блок Decoder, сконфигурированный, чтобы использовать длину списка восемь. Блок в модели также имеет набор параметров направления Ссылки к Uplink
, и принимает K и значения E от входных портов. Выполнение модели импортирует переменные входного сигнала из рабочей области и возвращает поток декодируемых выходных выборок и управляющих сигналов, которые указывают на контуры системы координат. Модель экспортирует переменные sampleOut
, ctrlOut
, и errOut
к рабочему пространству MATLAB. Выберите допустимые значения errOut
сигнал при помощи ctrlOut.valid
сигнал.
open_system('NRPolarDecodeHDL'); decOut = sim('NRPolarDecodeHDL');
Преобразуйте выборки потоковой передачи, возвращенные в модель Simulink в системы координат для сравнения с результатами nrPolarDecode
5G Toolbox™ функция.
nrPolarDecode
функция возвращает декодируемое сообщение, включая 24 перерасчетных бита CRC. NR Полярный блок Decoder возвращает декодируемое сообщение без битов CRC и возвращает состояние CRC отдельно на допускать ошибку порте.
Блок и функциональные выходные биты могут отличаться для систем координат, которые сообщают об ошибке декодирования. Блок может возвратить ошибку декодирования в случаях, когда функция успешно декодирует сообщение. Полная эффективность декодирования блока очень близко к той из функции.
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,numCRCBits); % last three arguments needed for uplink only [decRef,errRef] = nrCRCDecode(decRef,'11'); % CRC polynomial is '6' for uplink when 18<K<25, '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 Encoder | NR Polar Decoder | nrPolarEncode
(5G Toolbox) | nrPolarDecode
(5G Toolbox)