В этом примере показано, как использовать блок турбодекодера LTE для декодирования данных и как сравнивать аппаратную конструкцию с результатами Toolbox™ LTE.
Создание кадров случайных входных выборок в MATLAB ®. Закодируйте выборки и добавьте шум к данным.
Декодируйте данные с помощью функции LTE Toolbox, lteTurboDecode.
Преобразование входных данных с кадрами в поток образцов и импорт потока в Simulink ®.
Для декодирования выборок с использованием аппаратной архитектуры выполните модель Simulink, которая содержит блок LTE Turbo Decoder.
Экспорт потока декодированных битов в рабочую область MATLAB.
Преобразуйте поток выборок обратно в данные с кадрами и сравните кадры с декодированными кадрами с этапа 2.
Создание входных кадров данных. Турбокодирование данных, модуляция сообщения и добавление шума в результирующую совокупность. Демодулируйте шумовую совокупность и генерируйте мягкие битовые значения. Создание опорных декодированных данных с помощью lteTurboDecode. Для удобной для оборудования модели преобразуйте динамические биты в тип данных с фиксированной точкой.
rng(0); numframes = 2; txBits = cell(1,numframes); softBits = cell(1,numframes); rxBits = cell(1,numframes); inframes = cell(1,numframes); for ii = 1:numframes txBits{ii} = randi([0 1],6144,1); codedData = lteTurboEncode(txBits{ii}); txSymbols = lteSymbolModulate(codedData,'QPSK'); noise = 0.5*complex(randn(size(txSymbols)),randn(size(txSymbols))); rxSymbols = txSymbols + noise; softBits{ii} = lteSymbolDemodulate(rxSymbols,'QPSK','Soft'); rxBits{ii} = lteTurboDecode(softBits{ii}); inframes{ii} = fi(softBits{ii},1,5,2); end
Сериализация входных данных для модели Simulink. Оставьте достаточное время между кадрами для полного декодирования каждого кадра до начала следующего. Блок турбодекодера LTE занимает 2 * numTurboIterations * HalfIterationLatency + ( inframesize / samplesizeIn ) циклов для завершения декодирования кадра. Для получения более подробной информации о вычислении HusingIterationLatency см. справочную страницу блока Turbo Decoder.
Блок турбодекодера LTE ожидает, что входные выборки перемежаются с битами четности.
Аппаратный ввод: S_1 P1_1 P2_1 S2 P1_2 P2_2 ... Sn P1_n P2_n
Входные данные панели инструментов LTE: S_1 S_2 ... S_n P1_1 P1_2 ... P1_n P2_1 P2_2 ... P2_n
Переупорядочить выборки с помощью опции чередования whdlFramesToSamples функция.
inframesize = size(inframes{1},1); %includes 4 tail bit samples
encoderrate = 3; % rate 1/3 Turbo code
samplesizeIn = encoderrate; % 3 samples in at a time
idlecyclesbetweensamples = 0;
outframesize = size(txBits{1},1);
numTurboIterations = 6;
halfIterationLatency = (ceil(outframesize/32)+3)*32; % window size=32
algframedelay = 2*numTurboIterations*halfIterationLatency+(inframesize/samplesizeIn);
idlecyclesbetweenframes = algframedelay;
interleaveSamples = true;
[sampleIn,ctrlIn] = ...
whdlFramesToSamples(inframes, ...
idlecyclesbetweensamples, ...
idlecyclesbetweenframes, ...
samplesizeIn, ...
interleaveSamples);
Запустите модель Simulink. Время моделирования равно количеству входных выборок. Из-за добавленных циклов простоя между кадрами потоковые входные данные включают в себя достаточное количество циклов для модели, чтобы завершить декодирование обоих кадров.
sampletime = 1;
simTime = size(ctrlIn, 1);
modelname = 'ltehdlTurboDecoderModel';
open_system(modelname);
sim(modelname);

Экспорт модели Simulink sampleOut и ctrlOut обратно в рабочую область MATLAB. Отмена сериализации выходных выборок и сравнение с декодированным кадром.
outframes = whdlSamplesToFrames(sampleOut,ctrlOut); fprintf('\nLTE Turbo Decoder\n'); for ii = 1:numframes numBitsDiff = sum(outframes{ii} ~= rxBits{ii}); fprintf([' Frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'],ii,numBitsDiff); end
Maximum frame size computed to be 6144 samples. LTE Turbo Decoder Frame 1: Behavioral and HDL simulation differ by 0 bits Frame 2: Behavioral and HDL simulation differ by 0 bits
lteTurboDecode(Панель инструментов LTE)