Проверьте турбо декодер с потоковой передачей данных MATLAB

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

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

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

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

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

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

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

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

Можно использовать скрипт MATLAB VerifyLTEHDLTurboDecoderStreamingData.m, чтобы запустить MATLAB поведенческий код, настроить, импортировать данные и запустить модель Simulink™, экспортировать данные и сравнить поведенческий выход и 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);

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

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

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

Поведенческий Турбо Энкодер отсылает все систематические биты сначала, сопровождаемый первым набором битов четности и наконец, вторым набором битов четности. Турбо Декодер 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] = ...
    ltehdlFramesToSamples(inframes, ...
                          idlecyclesbetweensamples, ...
                          idlecyclesbetweenframes, ...
                          insamplesize, ...
                          interleaveSamples);

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

Модель импортирует основанные на выборке данные и управление и Турбо формат кадра Декодера от рабочего пространства MATLAB.

modelname = 'TurboDecoderStreamingDataHDLExample';

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

Код MATLAB задает настройки для входного размера, шаг расчета для модели Simulink, и вычисляет желаемое время симуляции.

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

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

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

sim(modelname);

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

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

% 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 = ltehdlSamplesToFrames(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. Используйте HDL Verifier™, чтобы сгенерировать Испытательный стенд (HDL Coder) SystemVerilog DPI или FPGA запуска в цикле.

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

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

Блоки

Функции

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

Больше о