В этом примере показано, как проверить предназначенные на оборудование Турбо данные о потоковой передаче использования проекта Декодера из MATLAB®.
Чтобы запустить этот пример, используйте скрипт VerifyLTEHDLTurboDecoderStreamingData.m.
LTE Toolbox™ и функции 5G Toolbox™ операции модели на обрамленном, целочисленных данных с плавающей точкой и обеспечивают превосходные поведенческие ссылки. Аппаратные проекты должны использовать булевскую переменную потоковой передачи или данные фиксированной точки. Этот пример преобразует системы координат в выборки в MATLAB и импортирует демонстрационный поток к Simulink® для аппаратного проекта алгоритма. Те же данные применяются и к аппаратному алгоритму в Simulink и к поведенческому алгоритму в MATLAB. Выходной демонстрационный поток от симуляции Simulink экспортируется в MATLAB и затем преобразовал назад в обрамленные данные для сравнения.
Ключевые возможности модели для аппаратного предназначения в Simulink®:
Потоковая передача Демонстрационного Интерфейса: LTE Toolbox и функции 5G Toolbox обрабатывают кадры, в то время как блоки в Wireless HDL Toolbox используют демонстрационный интерфейс потоковой передачи. Последовательная обработка эффективна для аппаратных проектов. Для получения дополнительной информации смотрите Демонстрационный Интерфейс Потоковой передачи. Можно преобразовать системы координат в выборки в Simulink с помощью блока Frame To Samples или в MATLAB с помощью whdlFramesToSamples
функция. В этом примере мы преобразуем системы координат в выборки в MATLAB с помощью whdlFramesToSamples
функция.
Подсистема, Целенаправленная для генерации HDL-кода: Спроектируйте благоприятную для оборудования демонстрационную модель потоковой передачи путем выбора блоков из Блоков. Часть проекта, предназначенного для генерации HDL-кода, должна быть в отдельной подсистеме.
Преобразование Основанного на выборке Выхода к Системам координат: Для верификации можно экспортировать результат аппаратно-совместимого проекта к рабочей области MATLAB®. Можно затем сравнить этот результат с выходом MATLAB поведенческий проект. В этом примере мы преобразуем выборки в системы координат в MATLAB с помощью whdlSamplesToFrames
функция.
Можно использовать скрипт MATLAB VerifyLTEHDLTurboDecoderStreamingData.m, чтобы запустить MATLAB поведенческий код, настроить, импортировать данные и запустить модель Simulink™, экспортировать данные и сравнить поведенческий выход и Simulink выход.
Скрипт MATLAB содержит шесть частей:
Моделирование на поведенческом уровне турбо декодера
Преобразование входных кадров к выборкам
Настройте модель Simulink для аппаратного проекта
Запустите модель Simulink
Преобразование Выходных выборок к системам координат
Проверьте Выход модели 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);
Затем преобразуйте обрамленные данные в поток выборок и управляющих сигналов с помощью whdlFramesToSamples
функция. Эта функция также добавляет недопустимые выборки в демонстрационный поток, чтобы подражать аппаратным данным о потоковой передаче. Выход этой функции является входом к модели Simulink.
В этом примере, whdlFramesToSamples
функция сконфигурирована, чтобы предоставить входные параметры блоку 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] = ... whdlFramesToSamples(inframes, ... idlecyclesbetweensamples, ... idlecyclesbetweenframes, ... insamplesize, ... interleaveSamples);
Модель импортирует основанные на выборке данные и управление и формат кадра от рабочего пространства MATLAB.
modelname = 'TurboDecoderStreamingDataHDLExample';
Турбо подсистема Декодера LTE состоит из блока 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);
Можно запустить модель путем нажатия на кнопку воспроизведения или вызова 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{:};
Сравните выход симуляции 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 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
whdlFramesToSamples
| whdlSamplesToFrames
| lteTurboDecode
(LTE Toolbox)