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

В этом примере показано, как проверить аппаратно-целевой проект LTE Turbo Decoder с помощью систем координат данных из MATLAB ®.

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

Функции LTE Toolbox™ и 5G Toobox™ моделируют операции на кадрах, с целочисленными данными с плавающей точкой и обеспечивают отличные поведенческие ссылки. Аппаратные проекты должны использовать потоковые логические данные или данные с фиксированной точкой. Этот пример импортирует данные с рамкой в 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.

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

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

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

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

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

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

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

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

Подсистема LTE Turbo Decoder состоит из блока LTE Turbo Decoder. Этот блок запускается для формата кадра 6144 систематических бит и 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 Turbo Decoder.

Функция турбо- энкодера отправляет сначала все систематические биты, затем первый набор битов четности и, наконец, второй набор битов четности. Однако турбодекодер 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

Можно запустить модель, нажав кнопку Play или вызвав команду 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 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

См. также

Блоки

Функции

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

Подробнее о