Проверяйте на ошибки CRC в потоковой передаче выборок

Этот пример показывает, как использовать блок CRC Decoder, чтобы проверять закодированные данные, и как сравнить благоприятный для оборудования проект с результатами LTE Toolbox™. Рабочий процесс выполняет эти шаги:

  1. Сгенерируйте кадры случайных входных выборок в MATLAB.

  2. Сгенерируйте и добавьте контрольную сумму CRC с помощью функции LTE Toolbox lteCRCEncode.

  3. Преобразуйте структурированные входные данные и контрольную сумму к потоку выборок и импортируйте ее к Simulink®.

  4. Чтобы проверять выборки по контрольной сумме с помощью благоприятной для оборудования архитектуры, запустите модель Simulink. Модель содержит Декодер CRC блока LTE HDL Toolbox™.

  5. Экспортируйте поток выборок назад к рабочей области MATLAB®.

  6. Преобразуйте демонстрационный поток назад в обрамленные данные и сравните кадры со справочными данными.

Сгенерируйте кадры входных данных, затем сгенерируйте контрольную сумму 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

Смотрите также

Блоки

Функции

Похожие темы