Этот пример показывает, как использовать блок CRC Encoder, чтобы закодировать данные, и как сравнить благоприятный для оборудования проект с результатами LTE Toolbox™. Рабочий процесс выполняет эти шаги:
Сгенерируйте кадры случайных входных выборок в MATLAB.
Сгенерируйте и добавьте контрольную сумму CRC с помощью функции LTE Toolbox lteCRCEncode
.
Преобразуйте структурированные входные данные в поток выборок и импортируйте поток в Simulink®.
Чтобы закодировать выборки с помощью благоприятной для оборудования архитектуры, запустите модель Simulink, которая содержит Энкодер CRC блока LTE HDL Toolbox™.
Экспортируйте поток битов, который теперь имеет добавленную контрольную сумму CRC к рабочей области MATLAB®.
Преобразуйте демонстрационный поток назад в обрамленные данные и сравните кадры со ссылочными кадрами и контрольной суммой.
Сгенерируйте кадры входных данных. Сгенерируйте ссылочные выходные данные с помощью 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} = lteCRCEncode(txframes{ii},CRCType,CRCMask); end
Сериализируйте входные данные для модели Simulink. Оставьте достаточно времени между кадрами для каждого кадра, который будет полностью закодирован, прежде чем следующий запустится. Для кодирования CRC 24 контрольная сумма добавляет 24 бита четности в конце кадра. Благоприятный для оборудования алгоритм также добавляет CRCLength + 3 цикла задержки.
idleCyclesBetweenSamples = 0;
idleCyclesBetweenFrames = 24+27;
outputSize = 1;
[sampleIn,ctrlIn] = ltehdlFramesToSamples(...
txframes,idleCyclesBetweenSamples,idleCyclesBetweenFrames,outputSize);
Запустите модель Simulink.
sampletime = 1;
simTime = length(ctrlIn);
modelname = 'ltehdlCRCEncoderModel';
open(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 Encoder\n'); for ii = 1:numframes numBitsDiff = sum(double(txcodeword{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 280 samples. LTE CRC Encoder Frame 1: Behavioral and HDL simulation differ by 0 bits Frame 2: Behavioral and HDL simulation differ by 0 bits