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

В этом примере показано, как проверить предназначенный на оборудование Турбо проект Декодера LTE с помощью систем координат данных из MATLAB®.

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

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

Аппаратное предназначение в Simulink

Ключевые возможности модели для аппаратного предназначения в Simulink®:

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

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

  • Преобразование Основанного на выборке Выхода К Системам координат: Для верификации можно экспортировать результат аппаратно-совместимого проекта к рабочей области MATLAB®. Можно затем сравнить этот результат с выходом MATLAB поведенческий проект. В этом примере мы преобразуем выборки в системы координат в Simulink с помощью блока Samples To Frame.

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

Скрипт MATLAB содержит четыре части:

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

  2. Настройте модель Simulink для аппаратного проекта

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

  4. Проверьте Выход модели 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);

Настройте модель Simulink для аппаратного проекта

Модель импортирует основанные на системе координат данные от рабочего пространства MATLAB. В этом случае переменная inframes и blockSizeIn являются входными параметрами к модели.

Турбо подсистема Декодера LTE состоит из блока LTE Turbo Decoder. Этот блок собирается запуститься для формата кадра 6 144 систематических битов и 6 итераций декодирования.

Модель Simulink импортирует системы координат данных из MATLAB и преобразует их в поток выборок в модели Simulink.

Блок Frame To Samples преобразует обрамленные данные в поток выборок и управляющих сигналов. Этот блок также добавляет недопустимые выборки в демонстрационный поток, чтобы подражать аппаратным данным о потоковой передаче. Этот блок предоставляет вход подсистеме, предназначенной для генерации HDL-кода, но самостоятельно не поддерживает генерацию HDL-кода.

В этом примере блок Frame To Samples сконфигурирован, чтобы предоставить вход блоку LTE Turbo Decoder. Никакие недопустимые выборки не вставляются между допустимыми выборками.

Модель Simulink также импортирует параметр формата кадра из рабочей области и передает его blockSize порту блока LTE Turbo Decoder. Этот пример использует один размер блока и таким образом, этот порт остается в постоянном значении, заданном turboFrameSize параметром.

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

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

% Open the model
modelname = 'TurboDecoderFramedDataHDLExample';
open_system(modelname);
% Settings for Frame Input From Workspace block
inframesize = length(softBits);
% Setting for LTE Turbo Decoder block
numTurboIterations = 6;
% Settings for Frame To Samples block
idlecyclesbetweensamples = 0;
% approximate latency from LTE Turbo Decoder block per half-iteration
tdlatency = (ceil(turboFrameSize/32)+4)*32;
% approximate delay in frames for LTE Turbo Decoder output
algframedelay = (2*numTurboIterations + 2)*(ceil(tdlatency/turboFrameSize));
% Rate 1/3 code: Systematic + 2 Parity
insamplesize = 3;
idlecyclesbetweenframes = (inframesize/insamplesize)*algframedelay;
% Select the option to compose output from interleaved input samples
set_param([modelname '/Frame To Samples'],...
    'InterleaveSamples','on');
% Settings for Samples To Frame block
% Exact setting, includes idle cycles introduced
totalframesize = ((inframesize/insamplesize)*...
    (idlecyclesbetweensamples+1))+idlecyclesbetweenframes;
% Alternative setting, same size as LTE Turbo Decoder output frame
% totalframesize = outframesize;
outsamplesize = 1;

Код MATLAB также преобразует входные данные в фиксированную точку для использования в предназначенной на оборудование модели и вычисляет желаемое время симуляции.

% Simulation time
numFrames = 1; % number of frames to run
simTime = numFrames;
% Input frame data for model
% use same data as lteTurboDecode, converted to fixed point
inframes = fi(softBits, 1, 5, 2);

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

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

sim(modelname);

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

Выполнение модели приводит к системам координат данных, регистрируемых от блока Frame Output To Workspace в переменной outframes_logdata. Сравните данные с выходом моделирования на поведенческом уровне, чтобы найти количество битных несоответствий между поведенческим кодом и предназначенной на оборудование моделью.

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

% Process output of HDL model and compare to behavioral simulation output
% Gather all the logged data into one array
rxBits_hdl = outframes_logdata(:);
% 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. Используйте HDL Verifier™, чтобы сгенерировать Испытательный стенд (HDL Coder) SystemVerilog DPI или FPGA запуска в цикле.

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

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

Блоки

Функции

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

Больше о