Этот пример показывает, как использовать блок CRC Decoder, чтобы проверять закодированные данные, и как сравнить благоприятный для оборудования проект с результатами LTE Toolbox™. Рабочий процесс выполняет эти шаги:
Сгенерируйте кадры случайных входных выборок в MATLAB.
Сгенерируйте и добавьте контрольную сумму CRC с помощью функции LTE Toolbox lteCRCEncode
.
Преобразуйте структурированные входные данные и контрольную сумму к потоку выборок и импортируйте ее к Simulink®.
Чтобы проверять выборки по контрольной сумме с помощью благоприятной для оборудования архитектуры, запустите модель Simulink. Модель содержит Декодер CRC блока LTE HDL Toolbox™.
Экспортируйте поток выборок назад к рабочей области MATLAB®.
Преобразуйте демонстрационный поток назад в обрамленные данные и сравните кадры со справочными данными.
Сгенерируйте кадры входных данных, затем сгенерируйте контрольную сумму CRC с помощью lteCRCEncode
.
frameLength = 256; numframes = 2; rng(0); txframes = cell(1,numframes); txcodeword = cell(1,numframes); rxSoftframes = cell(1,numframes); for ii = 1:numframes txframes{ii} = randi([0 1],frameLength,1)>0.5; CRCType = '24B'; CRCMask = 50; txcodeword{ii} = boolean(lteCRCEncode(txframes{ii},CRCType,CRCMask)); end
Сериализируйте входные данные для модели Simulink. Блок CRC Decoder не требует, чтобы любой пробел между кадрами, но благоприятный для оборудования алгоритм добавил задержку (3 * CRCLength / SampleSize) + 5 циклов. Этот пример использует скалярные входные выборки, таким образом, задержка (3 * CRCLength) + 5.
idleCyclesBetweenSamples = 0;
idleCyclesBetweenFrames = 77;
samplesizeIn = 1;
[sampleIn,ctrlIn] = ltehdlFramesToSamples(...
txcodeword,idleCyclesBetweenSamples,idleCyclesBetweenFrames,samplesizeIn);
Запустите модель Simulink.
sampletime = 1;
simTime = length(ctrlIn);
modelName = 'ltehdlCRCDecoderModel';
open_system(modelName);
sim(modelName);
Модель Simulink экспортирует sampleOut_ts
и ctrlOut_ts
назад к рабочему пространству MATLAB. Десериализуйте выходные выборки и сравните обрамленные данные с входными кадрами.
sampleOut = sampleOut_ts.Data; sampleOut = sampleOut(:); ctrlOut = [squeeze(ctrlOut_ts.start.Data) ... squeeze(ctrlOut_ts.end.Data) ... squeeze(ctrlOut_ts.valid.Data)]; txhdlframes = ltehdlSamplesToFrames(sampleOut,ctrlOut); fprintf('\nLTE CRC Decoder\n'); for ii = 1:numframes numBitsDiff = sum(double(txframes{ii})-double(txhdlframes{ii})); fprintf([' Frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'], ii, numBitsDiff); end
Maximum frame size computed to be 256 samples. LTE CRC Decoder Frame 1: Behavioral and HDL simulation differ by 0 bits Frame 2: Behavioral and HDL simulation differ by 0 bits