Этот пример показывает, как использовать блок Convolutional Encoder, чтобы закодировать данные, и как сравнить благоприятный для оборудования проект с результатами LTE Toolbox™. Рабочий процесс выполняет эти шаги:
Сгенерируйте кадры случайных входных выборок в MATLAB®.
Закодируйте данные с помощью функции LTE Toolbox lteConvolutionalEncode
.
Преобразуйте структурированные входные данные в поток выборок и импортируйте поток в Simulink®.
Чтобы закодировать выборки с помощью благоприятной для оборудования архитектуры, запустите модель Simulink, которая содержит блок LTE HDL Toolbox™ Сверточный Энкодер.
Экспортируйте поток закодированных битов к рабочему пространству MATLAB.
Преобразуйте демонстрационный поток назад в обрамленные данные и сравните кадры со справочными данными.
Сгенерируйте кадры входных данных. Сгенерируйте закодированные данные ссылки с помощью lteConvolutionalEncode
.
rng(0); frameLength = 256; numframes = 2; txframes = cell(1,numframes); txcodeword = cell(1,numframes); rxSoftframes = cell(1,numframes); for k = 1:numframes txframes{k} = randi([0 1],frameLength,1)>0.5; txcodeword{k} = lteConvolutionalEncode(txframes{k}); end
Сериализируйте входные данные для модели Simulink. Оставьте достаточно времени между кадрами так, чтобы каждый кадр был полностью закодирован, прежде чем следующий запускается. Блок берет frameLength
+ 5 циклов, чтобы закодировать кадр.
idleCyclesBetweenSamples = 0;
idleCyclesBetweenFrames = frameLength+5;
[sampleIn,ctrlIn] = ltehdlFramesToSamples(...
txframes,idleCyclesBetweenSamples,idleCyclesBetweenFrames);
Запустите модель Simulink. Из-за добавленных неактивных циклов между кадрами входные данные потоковой передачи включают достаточно циклов для модели, чтобы завершить кодирование обоих кадров.
sampletime = 1;
samplesizeIn = 1;
simTime = size(ctrlIn,1);
modelname = 'ltehdlConvolutionalEncoderModel';
open_system(modelname);
sim(modelname);
Модель Simulink экспортирует sampleOut_ts
и ctrlOut_ts
назад к рабочему пространству MATLAB. Десериализуйте выходные выборки и сравните их с закодированным кадром.
Выходные выборки блока Convolutional Encoder являются чередованными результатами этих трех полиномов.
Благоприятный для оборудования вывод: G0_1 G1_1 G2_1 G0_2 G1_2 G2_2 ... Gn G1_n G2_n
LTE Toolbox вывод: G0_1 G0_2 ... G0_n G1_1 G1_2 ... G1_n G2_1 G2_2 ... G2_n
Функция ltehdlSamplesToFrames
предоставляет возможность переупорядочивать выборки. Сравните переупорядоченные выходные кадры со ссылкой закодировали кадры.
sampleOut = sampleOut_ts.Data'; sampleOut = sampleOut(:); ctrlOut = [squeeze(ctrlOut_ts.start.Data) ... squeeze(ctrlOut_ts.end.Data) ... squeeze(ctrlOut_ts.valid.Data)]; interleaveSamples = true; txhdlframes = ltehdlSamplesToFrames(sampleOut,ctrlOut,[],interleaveSamples); fprintf('\nLTE Convolutional Encoder\n'); for k = 1:numframes numBitsDiff = sum(double(txcodeword{k})-double(txhdlframes{k})); fprintf([' Frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'],k,numBitsDiff); end
Maximum frame size computed to be 768 samples. LTE Convolutional Encoder Frame 1: Behavioral and HDL simulation differ by 0 bits Frame 2: Behavioral and HDL simulation differ by 0 bits