Этот пример показывает, как проверить предназначенные на оборудование Турбо данные о потоковой передаче использования проекта Декодера из MATLAB®.
Чтобы запустить этот пример, используйте скрипт VerifyLTEHDLTurboDecoderStreamingData.m.
Функции LTE Toolbox™ образцовые операции на обрамленных, и целочисленных данных с плавающей точкой и обеспечивают превосходные поведенческие ссылки. Аппаратные проекты должны использовать булевскую переменную потоковой передачи или данные фиксированной точки. Этот пример преобразовывает кадры в выборки в MATLAB и импортирует демонстрационный поток к Simulink® для аппаратного проекта алгоритма. Те же данные применяются и к аппаратному алгоритму в Simulink и к поведенческому алгоритму в MATLAB. Выходной демонстрационный поток от симуляции Simulink экспортируется в MATLAB и затем преобразовал назад в обрамленные данные для сравнения.
Ключевые возможности модели для аппаратного предназначения в 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 содержит шесть частей:
Моделирование на поведенческом уровне турбо декодера
Преобразование входных кадров к выборкам
Настройте модель 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);
Затем, преобразуйте обрамленные данные в поток выборок и управляющих сигналов с помощью функции ltehdlFramesToSamples
. Эта функция также добавляет недопустимые выборки в демонстрационный поток, чтобы подражать аппаратным данным о потоковой передаче. Вывод этой функции является входом к модели Simulink.
В этом примере функция ltehdlFramesToSamples
сконфигурирована, чтобы предоставить входные параметры блоку LTE Turbo Decoder в модели Simulink. Никакие недопустимые выборки не вставляются между допустимыми выборками.
Блок LTE Turbo Decoder берет в кадре данных, одна выборка за один раз, пробегает конкретное количество итераций и может затем принять другой входной кадр. В порядке позволить времени вычислений блока запускать эти 6 итераций, мы добавляем в недопустимых выборках между кадрами. В этом примере мы определяем номер недопустимых выборок между кадрами к 7 итерациям (или 14 полуитераций, каждая из которых соответствует кадру задержки). Вычислить точные циклы должно было обработать кадр, посмотреть на документацию.
Поведенческий Турбо Энкодер отсылает все систематические биты сначала, сопровождаемый первым набором битов четности и наконец, вторым набором битов четности. Турбо Декодер 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);
Модель импортирует основанные на выборке данные и управление и Турбо формат кадра Декодера от рабочего пространства 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);
Можно запустить модель путем нажатия на кнопку воспроизведения или вызова 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{:};
Сравните вывод симуляции 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™, чтобы сгенерировать Систему испытательный стенд DPI Verilog или FPGA выполнения в Цикле.
makehdl([modelname '/LTE Turbo Decoder']) % Generate HDL code makehdltb([modelname '/LTE Turbo Decoder']) % Generate HDL Test bench