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

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

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

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

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

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

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

  • Подсистема, Целенаправленная для генерации HDL-кода: Разработайте благоприятную для оборудования демонстрационную модель потоковой передачи путем выбора блоков от библиотек LTE HDL Toolbox. Часть проекта, предназначенного для генерации 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 также импортирует Турбо параметр формата кадра Декодера из рабочей области и передала его на блок Turbo Decoder через blockSize порт. В этом примере мы используем всего один Турбо размер блока Декодера, и этот порт остается в постоянном значении, заданном turboFrameSize параметром.

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

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

% Open the model
modelname = 'TurboDecoderFramedDataHDLExample';
open_system(modelname);
% Settings for Frame Input From Workspace block
inframesize = length(softBits);
% Setting for Turbo Decoder block
numTurboIterations = 6;
% Settings for Frame To Samples block
idlecyclesbetweensamples = 0;
% 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));
% 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 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™, чтобы сгенерировать Систему испытательный стенд DPI Verilog или FPGA выполнения в Цикле.

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

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

Блоки

Функции

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

Больше о