exponenta event banner

Проверка турбодекодера с потоковыми данными из MATLAB

В этом примере показано, как проверить аппаратную конструкцию турбодекодера с использованием потоковых данных из MATLAB ®.

Чтобы запустить этот пример, используйте сценарий VerifyLTEHDLTurboImentingStreamingData.m.

Функции LTE Toolbox™ и 5G Toolbox™ моделируют операции с кадрированными, плавающими и целыми данными и обеспечивают превосходные ссылки на поведение. Аппаратные решения должны использовать потоковые логические данные или данные с фиксированной точкой. В этом примере выполняется преобразование кадров в образцы в MATLAB и импорт потока образцов в Simulink ® для проектирования аппаратных алгоритмов. Одни и те же данные применяются как к аппаратному алгоритму в Simulink, так и к поведенческому алгоритму в MATLAB. Выходной поток выборки из моделирования Simulink экспортируется в MATLAB и затем преобразуется обратно в данные с кадрами для сравнения.

Аппаратное таргетирование в Simulink

Основные характеристики модели аппаратного таргетинга в Simulink ®:

  • Потоковый интерфейс образцов: функции LTE Toolbox и 5G Toolbox обрабатывают кадры, в то время как блоки в Wireless HDL Toolbox используют потоковый интерфейс образцов. Последовательная обработка эффективна для аппаратных решений. Дополнительные сведения см. в разделе Потоковый пример интерфейса. Можно преобразовать кадры в образцы в Simulink с помощью блока «Кадр в образцы» или в MATLAB с помощью whdlFramesToSamples функция. В этом примере мы преобразуем кадры в выборки в MATLAB с помощью whdlFramesToSamples функция.

  • Подсистема, предназначенная для генерации кода HDL: Разработка удобной для аппаратного обеспечения модели потоковой передачи путем выбора блоков из списка блоков. Часть проекта, предназначенная для генерации кода HDL, должна быть в отдельной подсистеме.

  • Преобразование выходных данных на основе образцов в кадры: Для проверки можно экспортировать результат аппаратно совместимой конструкции в рабочую область MATLAB ®. Затем можно сравнить этот результат с выводом поведенческой конструкции MATLAB. В этом примере мы преобразуем выборки в кадры в MATLAB с помощью whdlSamplesToFrames функция.

Можно использовать сценарий VerifyLTEHDLTurboImentingStreamingData.m MATLAB для запуска поведенческого кода MATLAB, настройки, импорта данных и выполнения модели Simulink™, экспорта данных и сравнения поведенческих и симулинковых выходных данных.

Сценарий MATLAB содержит шесть частей:

  1. Поведенческое моделирование турбодекодера

  2. Преобразование входных кадров в образцы

  3. Настройка модели Simulink для проектирования оборудования

  4. Запустить модель Simulink

  5. Преобразование выходных выборок в кадры

  6. Проверка выходных данных модели Simulink

Поведенческое моделирование турбодекодера

Для поведенческого моделирования конструкции используйте lteTurboDecode из LTE Toolbox. Вход в эту функцию, softBits, также является входом для целевого дизайна HDL. Поведенческие результаты lteTurboDecode функция, rxBits может использоваться для сравнения с выходом целевого дизайна HDL. Как softBits, так и rxBits являются кадрами данных с плавающей запятой.

% Turbo decoding of soft bits obtained from a noisy constellation
turboFrameSize = 6144;
txBits = randi([0 1],turboFrameSize,1);
codedData = lteTurboEncode(txBits);
txSymbols = lteSymbolModulate(codedData,'QPSK');
noise = 0.5*complex(randn(size(txSymbols)),randn(size(txSymbols)));
rxSymbols = txSymbols + noise;
scatter(real(rxSymbols),imag(rxSymbols),'co'); hold on;
scatter(real(txSymbols),imag(txSymbols),'rx')
legend('Rx constellation','Tx constellation')
softBits = lteSymbolDemodulate(rxSymbols,'QPSK','Soft');
rxBits = lteTurboDecode(softBits);

Преобразование входных кадров в образцы

Сначала преобразуйте входной кадр в кадр с фиксированной точкой.

inframes = fi(softBits, 1, 5, 2);

Затем преобразуйте кадрированные данные в поток выборок и управляющих сигналов, используя whdlFramesToSamples функция. Эта функция также добавляет недопустимые выборки в поток выборок для имитации потоковых аппаратных данных. Выходные данные этой функции являются входными данными для модели Simulink.

В этом примере whdlFramesToSamples функция сконфигурирована для обеспечения входов в блок турбодекодера LTE в модели Simulink. Недопустимые выборки не вставляются между допустимыми выборками.

Блок турбодекодера LTE принимает кадр данных, по одной выборке за раз, проходит через заданное количество итераций и затем может принять другой входной кадр. Чтобы разрешить время обработки блоков для выполнения 6 итераций, мы включаем недопустимые выборки между кадрами. В этом примере мы устанавливаем число недопустимых отсчетов между кадрами в 7 итераций (или 14 полуитераций, каждая из которых соответствует кадру задержки). Чтобы вычислить точные циклы, необходимые для обработки кадра, просмотрите турбодекодер LTE.

Функция турбокодера возвращает сначала систематические биты, за которыми следует первый набор битов четности и, наконец, второй набор битов четности. Однако турбодекодер LTE требует, чтобы каждый набор систематических и 2 битов четности передавался вместе. Чтобы соответствующим образом преобразовать входные данные в блок турбодекодера, мы выбираем опцию для составления выходных выборок из перемеженных входных выборок.

inframesize = 18444; % size of softBits
% No invalid cycles between samples
idlecyclesbetweensamples = 0;
% Additional delay in frames for Turbo Decoder output
numTurboIterations = 6;
% approximate latency from Turbo Decoder block per half-iteration
tdlatency = (ceil(turboFrameSize/32)+4)*32;
% approximate delay in frames for Turbo Decoder output
algframedelay = (2*numTurboIterations + 2)*(ceil(tdlatency/turboFrameSize));
idlecyclesbetweenframes = (inframesize/insamplesize)*algframedelay;
% Output is composed of interleaved input samples
% input: S_1 S_2 ... S_n P1_1 P1_2 ... P1_n P2_1 P2_2 ... P2_n
% output: S_1 P1_1 P2_1 S2 P1_2 P2_2 ... Sn P1_n P2_n
interleaveSamples = true;
[sampleIn, ctrlIn] = ...
    whdlFramesToSamples(inframes, ...
                          idlecyclesbetweensamples, ...
                          idlecyclesbetweenframes, ...
                          insamplesize, ...
                          interleaveSamples);

Настройка модели Simulink для проектирования оборудования

Модель импортирует данные и элемент управления на основе образцов, а также размер кадра из рабочего пространства MATLAB.

modelname = 'TurboDecoderStreamingDataHDLExample';

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

Код MATLAB определяет настройки для размера ввода, времени выборки для модели Simulink и вычисляет требуемое время моделирования.

% Settings for Signal From Workspace block
samplesizeIn = 3; % encode rate is 1/3
sampletime = 1;
simTime = size(ctrl,1);

Запустить модель Simulink

Модель можно запустить, нажав кнопку Воспроизведение (Play) или вызвав команду sim в командной строке MATLAB.

sim(modelname);

Преобразование выходных выборок в кадры

Выполнение модели приводит к потоковым выборкам и управляющим сигналам, записанным из модели в переменной sampleOut_ts и ctrlOut_ts. Выборка и контрольные данные преобразуются в кадры с помощью whdlSamplesToFrames функция.

% Reformat the logged data to form the sample and control output
sampleOut = squeeze(sampleOut_ts.Data);
ctrlOut = [squeeze(ctrlOut_ts.start.Data) ...
           squeeze(ctrlOut_ts.end.Data) ...
           squeeze(ctrlOut_ts.valid.Data)];
% Form frames from output sample and control data
outframes = whdlSamplesToFrames(sampleOut, ctrlOut);
% Gather all the bits - expecting only one frame
rxBits_hdl = outframes{:};

Проверка выходных данных модели Simulink

Сравните выходные данные моделирования ЛПВП с выходными данными моделирования поведения, чтобы найти количество битовых несоответствий между поведенческим кодом и аппаратно-целевой моделью.

Это моделирование не приводит к битовым ошибкам. Увеличение количества шума, добавляемого к выборкам, или уменьшение числа итераций может привести к ошибкам в битах.

% Check number of bit mismatches
numBitsDiff = sum(rxBits_hdl ~= rxBits);
fprintf(['\nLTE Turbo Decoder: Behavioral and ' ...
   'HDL simulation differ by %d bits\n\n'], numBitsDiff);

Создание кода HDL и проверка его поведения

После выполнения моделирования можно использовать Coder™ HDL для создания кода HDL для подсистемы турбодекодера LTE. Используйте Verifier™ HDL, чтобы создать тестовый стенд SystemVerilog DPI (кодер HDL) или запустить FPGA-in-the-Loop.

makehdl([modelname '/LTE Turbo Decoder'])   % Generate HDL code
makehdltb([modelname '/LTE Turbo Decoder']) % Generate HDL Test bench

См. также

Блоки

Функции

Связанные примеры

Подробнее