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

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

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

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

Аппаратное нацеливание в Simulink

Ключевыми функциями модели аппаратного нацеливания в Simulink ® являются:

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

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

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

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

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

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

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

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

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

  5. Преобразование Выхода отсчетов в системы координат

  6. Проверьте выходы модели Simulink

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

Для поведенческой симуляции проекта используйте lteTurboDecode функция из LTE Toolbox. Вход в эту функцию, softBits, также является входом для целевого проекта. Поведенческий выход lteTurboDecode функция, rxBits может использоваться для сравнения с выходами целевого проекта. И 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 Turbo Decoder в модели Simulink. Недопустимые выборки не вставляются между допустимыми выборками.

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

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

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 Turbo Decoder состоит из блока LTE Turbo Decoder. Этот блок запускает 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

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

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

% 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-код и проверьте его поведение

Как только ваш проект работает в симуляции, вы можете использовать HDL- Coder™ для генерации HDL-кода для подсистемы LTE Turbo Decoder. Используйте HDL- Verifier™ для генерации DPI- Испытательного стенда SystemVerilog (HDL Coder) или запустите FPGA-в Цикл.

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

См. также

Блоки

Функции

Похожие примеры

Подробнее о