Поиск HDL- Камеры NR и ссылка MIB Recovery MATLAB

Этот пример показывает, как смоделировать 5G аппаратный алгоритм поиска ячеек NR и восстановления MIB в MATLAB ® как шаг к разработке реализации Simulink ® HDL. Используйте эту ссылку MATLAB, чтобы проверить модели Simulink в NR HDL Cell Search, NR HDL MIB Recovery и NR HDL MIB Recovery для FR2 примеров.

Введение

Пример NR HDL Cell Search и MIB Recovery MATLAB Reference преодолевает разрыв между математическим алгоритмом и его аппаратной реализацией путем предоставления модели MATLAB алгоритмов, которые реализованы в оборудовании. Ссылка MATLAB создается, чтобы оценить аппаратно-удобные алгоритмы и сгенерировать тестовые векторы для проверки оптимизированной реализации HDL с фиксированной точкой Simulink. Показан рабочий процесс разработки и развертывания алгоритма поиска по 5G камерам и восстановления MIB на оборудовании.

Каждый шаг в этом рабочем процессе демонстрируется одним или несколькими связанными примерами.

  1. Алгоритм Золотой Ссылки MATLAB: Пример Поиска Камеры NR и Восстановления MIB и SIB1 (5G Toolbox) показывает алгоритм Золотой ссылки с плавающей точкой.

  2. Оборудование ссылки MATLAB: NR HDL Cell Search и MIB Recovery MATLAB Reference (этот пример) моделируют аппаратно-удобные алгоритмы и генерируют тестовые формы сигналов. Этот код MATLAB работает с векторами и матрицами выборок данных с плавающей точкой и не поддерживает генерацию HDL-кода.

  3. Модель реализации Simulink с фиксированной точкой: Пример поиска Камеры HDL NR демонстрирует подсистему Simulink 5G камеры поиска, которая использует тот же алгоритм, что и ссылка MATLAB. Пример восстановления MIB NR HDL добавляет подсистему декодирования широковещательного канала и восстановления MIB. NR HDL MIB Recovery для FR2 примера показывает модели поиска камер и восстановления MIB, которые были расширены для поддержки FR2. Эти модели работают на данных с фиксированной точкой и оптимизированы для генерации HDL-кода.

  4. Simulink SoC Deployment Model: Примеры развертывания Примеров готовых узлов NR HDL на SoCs основаны на моделях реализации с фиксированной точкой и используют пакеты аппаратной поддержки для развертывания алгоритмов на оборудовании.

Общее описание того, как MATLAB и Simulink могут использоваться вместе для разработки развертываемых моделей, смотрите в Wireless Communications Design для FPGA и ASIC.

Камера поиска и восстановления MIB

Показан блок алгоритма поиска камеры и восстановления MIB. Алгоритм обнаруживает, демодулирует и декодирует блоки 5G сигнала синхронизации NR (SSB) и является аппаратной версией соответствующих шагов в примере поиска камеры NR и восстановления MIB и SIB1 (5G Toolbox). На верхнем уровне алгоритм состоит из контроллера поиска, детектора SSB и декодера SSB. Этот пример более подробно объясняет каждый из этих блоков и демонстрирует соответствующие справочные функции MATLAB, которые используются для исследования алгоритмов аппаратной реализации и для проверки потоковых моделей Simulink с фиксированной точкой. Этот пример фокусируется на 5G частотном диапазоне NR 1 (FR1), однако ссылочный код MATLAB поддерживает и FR1, и FR2. Пример использования ссылки MATLAB для FR2 см. в разделе Восстановление MIB NR HDL для FR2.

Поиск камеры

Поиск камеры состоит из восстановления несущей частоты, поиска Первичного сигнала синхронизации (PSS), демодуляции OFDM и поиска Вторичного сигнала синхронизации (SSS). Контроллер поиска и детектор SSB работают вместе, чтобы выполнить эти шаги обработки. Детектор SSB выполняет все высокоскоростные задачи обработки сигналов, что делает его хорошо подходящим для реализации FPGA или ASIC. Контроллер поиска координирует поиск и работает с низкой скоростью, что делает его хорошо подходящим для реализации ПО на встраиваемом процессоре.

Алгоритм начинается с использования PSS для поиска SSB с интервалами поднесущих 15 кГц и 30 кГц в области значений грубых смещений частоты. Интервалы между поднесущими и поиск по смещению частоты областей значений являются конфигурируемыми. При обнаружении SSB приемник OFDM демодулирует ресурсную сетку SSB с самой сильной PSS и определяет ее идентификатор камеры с помощью SSS. Остаточное смещение мелкой частоты корректируется во время фазы демодуляции OFDM.

  • Детектор SSB: Ищет и OFDM-демодулирует SSB при заданном смещении частоты несущей и разнесении поднесущей и измеряет остаточное мелкое смещение частоты несущей.

  • Цифровой преобразователь частоты (DDC): Выполняет преобразование частоты, чтобы исправить смещения частоты в полученной форме волны, а затем децимирует сигнал от 61,44 Msps до 7,68 Msps.

  • Поиск PSS: Поиск символов PSS в форме волны.

  • Демодуляция OFDM: OFDM-демодулирует ресурсную сетку SSB.

  • Поиск SSS: Поиски SSS и определяют полный ID камеры.

  • Контроллер поиска: Координирует поиск камеры путем направления детектора SSB для поиска символов PSS при различных грубых смещениях частоты и интервалах поднесущих и для демодуляции SSB с самой сильной PSS.

В ссылке MATLAB nrhdlexamples.cellSearch функция реализует алгоритм поиска камер. Эта функция реализует Контроллер Поиска, показанный на схеме, и вызывает nrhdlexamples.ssbDetect функция, которая реализует детектор SSB. В примере NR HDL Камеры Search показана потоковая реализация Simulink HDL с фиксированной точкой детектора SSB. В 5G примере восстановления NR MIB с использованием аналоговых устройств AD9361/AD9364 (Communications Toolbox Support Package for Xilinx Zynq-Based Radio) детектор SSB реализован в программируемой логике, в то время как контроллер поиска реализован в программном обеспечении на интегрированной системе обработки.

Контроллер поиска

Контроллер поиска отвечает за координацию общего поиска. Алгоритм следует этим шагам.

  1. Для каждого интервала между поднесущими выполните шаг через каждое крупное смещение частоты и используйте детектор SSB для поиска SSB до тех пор, пока не будет обнаружено одно или несколько. Размер шага смещения грубой частоты составляет половину интервала между поднесущими. Когда SSB обнаруживаются на заданной частоте, регистрируйте невязку мелкой несущей самой сильной SSB, которая возвращается.

  2. Перейдите к следующему шагу грубой частоты и снова выполните поиск SSB. Если поиск обнаруживает SSB, выберите смещение грубой частоты, которое привело к наименьшему измерению смещения тонкой частоты. В противном случае выберите последнее смещение грубой частоты.

  3. Вычислите общее смещение частоты путем сложения грубого и мелкого смещений частоты.

  4. Используйте детектор SSB, чтобы исправить смещение частоты и выполнить еще один поиск SSB.

  5. Выберите SSB с самой сильной корреляцией PSS. Используйте детектор SSB в режиме демодуляции, чтобы найти и демодулировать SSB и определить его идентификатор камеры.

Детектор SSB

Эти схемы показывают структуру детектора SSB для FR1, и параметры и данные, переданные контроллеру поиска и обратно. Детектор SSB подразделяется на две функции: Детектор SSB DDC (nrhdlexamples.ssbDetectDDC) и Поиск и демод обнаружения SSB (nrhdlexamples.ssbDetectSearchDemod). DDC принимает выборки на 61,44 Msps и выполняет сдвиг частоты с последующим десятикратным уменьшением в 8 раз, используя полуполосные фильтры. Смещение частоты в Гц обеспечивается контроллером поиска и используется алгоритмом для компенсации как грубых, так и мелких смещений частоты.

SSB Detection Search and Demod принимает выборки на 7,68 Msps. Для интервалов поднесущих 30 кГц он использует выборки с этой скоростью. Для интервала поднесущей 15 кГц он децимирует вход в два раза, работая на 3,84 Msps. SSB Detection Search и Demod имеют два режима работы: поиск и демодуляция.

В режиме поиска функция ищет SSB с заданным интервалом между поднесущими, используя PSS, и возвращает список обнаруженных. Для каждого найденного SSB функция возвращает эти параметры:

  • NCellID2: Указывает, какая из трех возможных последовательностей PSS (0,1 или 2) была обнаружена.

  • выбор времени смещения: смещение выбора времени с начала формы волны к началу SSB.

  • смещение мелкой частоты: остаточное смещение мелкой частоты в Гц, измеренное с помощью циклических префиксов всех четырех символов OFDM в SSB.

  • корреляционная прочность: Измеренный уровень корреляции PSS.

  • энергия сигнала: Общая энергия в выборках, в которых был обнаружен PSS.

В режиме демодуляции функция пытается найти конкретный SSB с помощью своего смещения и NCellID2 синхронизации. Если функция находит указанный PSS, приемник OFDM демодулирует ресурсную сетку SSB и пытается обнаружить его SSS. В режиме демодуляции функция возвращает эти результаты.

  • Обновлены параметры только для указанного SSB, если PSS найден.

  • Демодулированная ресурсная сетка SSB, если PSS найден.

  • Идентификатор камеры, если SSS найден.

Демодулятор OFDM использует БПФ с 256 точками, чтобы демодулировать ресурсную сетку SSB, которая содержит 240 активных поднесущих.

Смещения времени

Алгоритм поиска камеры использует смещения времени, чтобы идентифицировать положения в принятой форме волны и промежуточных сигналах. Смещение синхронизации является количеством выборок от начала формы волны до заданного положения, такого как начало SSB. Смещения времени даются в выборках на 61,44 Msps и оборачиваются вокруг каждые 20 мс, или 1228800 выборки. В 5G NR UE могут принимать, что периодичность пакета SS составляет 20 мс или менее для камеры поисковых целей, следовательно, причина этого выбора временной ссылки периодичности.

Рисунок показывает две 5G формы волны с различными периодичностями всплеска SS (5 мс и 20 мс) и опорным моментом синхронизации приемника. Ссылка MATLAB может обнаруживать SSB в любом положении в пределах принятой формы волны. Однако, если форма волны больше 20 мс, неоднозначность в возвращенных временных смещениях существует, потому что опорная точка синхронизации оборачивается вокруг каждые 20 мс. Кроме того, приемник может демодулировать только SSB, которые начинаются в пределах первых 20 мс формы волны.

Декодирование SSB

Схема показывает структуру SSB-декодера, которая реализована nrhdlexamples.ssbDecode функция. Алгоритм забирает ресурсную сетку SSB из фазы демодуляции OFDM детектора SSB, обрабатывает ее через PBCH и BCH декодирование и выводит параметры MIB и время выполнения PBCH.

Декодирование PBCH принимает демодулированные символы OFDM ресурсной сетки и обрабатывает с помощью следующих шагов:

  • DMRS Search: Ищет индекс, используемый для генерации символа ссылки демодуляции (DMRS).

  • Оценка канала: Вычисляет оценку канала, используя DMRS.

  • Эквализация канала: Выравнивает полученные данные с помощью оценки канала.

  • Демод символа: Выполняет демодуляцию QPSK, чтобы получить мягкие биты PBCH.

  • Descramble: Дескрамблирует мягкие биты.

Декодирование BCH затем обрабатывает дескремблированные мягкие биты для восстановления данных MIB с помощью следующих шагов:

  • Восстановление скорости: Объединяет повторные мягкие биты, затем выполняет масштабирование и квантование.

  • Полярное декодирование + CRC: Выполняет полярное декодирование, чтобы получить биты сообщения и декодирование CRC, чтобы проверить на ошибки.

  • Анализ сообщения MIB: Интерпретирует декодированные биты сообщения, чтобы получить выходы MIB.

Сгенерируйте тестовую форму волны

В этом разделе показано, как использовать справочные функции MATLAB для поиска SSB в форме волны.

Используйте nrhdlexamples.generateFR1SSBurstWaveform функция для генерации сигнала пакетной передачи SS. Эта функция основана на примере блоков сигнала синхронизации и пакетов (5G Toolbox). Пакет имеет эти параметры.

  • Шаблон SSB является случаем B.

  • Интервал между поднесущими составляет 30 кГц.

  • NCellID - 249.

  • Активные SSB в пакете равны 8.

rng('default');
[rxWaveform,txGrid,txMIB] = nrhdlexamples.generateFR1SSBurstWaveform();

Постройте график ресурсной сетки пакетной формы сигнала. Амплитуда каждого ресурсного элемента обозначена его цветом. На график показаны восемь SSB. SSB генерируются с различными уровнями степени, чтобы смоделировать то, что UE обычно получает.

figure(1); clf;
imagesc(abs(txGrid));
colorbar;
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS Burst - Block Pattern Case B');

Обнаружение SSB

Используйте nrhdlexamples.ssbDetect функция для поиска SSB в форме волны путем поиска символов PSS. Этот пример вызывает функцию с грубой оценкой смещения частоты несущей, равной нулю, и интервалом между поднесущими, равным 30. Функция корректирует смещение грубой частоты и измеряет остаточное смещение мелкой частоты каждого SSB. Входные и выходные значения смещения частоты указаны в Гц. Функция возвращает список обнаруженных символов PSS как массив структур. Отображение содержимого массива структур путем преобразования его в таблицу.

FoCoarse = 0;
scs = 30;
[pssList,diagnostics] = nrhdlexamples.ssbDetect(rxWaveform,FoCoarse,scs);

disp(struct2table(pssList));
    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0               6608        0.69435         0.70703             7      
       0              15376         1.3933          1.4119           -51      
       0              32944        0.43994         0.44712          -207      
       0              41712         7.1226          7.2182          -154      
       0              68048        0.84535         0.88463           204      
       0              76816         2.1805           2.245           140      
       0              94384         0.2794         0.28375           488      
       0         1.0315e+05         0.8552         0.89668           132      

The nrhdlexamples.ssbDetect функция также возвращает структуру, содержащую диагностические сигналы. Используйте этот выход для построения графика результатов корреляции PSS. Каждый пик в показанном выходе коррелятора соответствует записи в списке PSS.

figure(2); clf;
nrhdlexamples.plotUtils.PSSCorrelation(diagnostics,'PSS Correlation');

Используйте nrhdlexamples.ssbDetect функция для OFDM-демодуляции одного из SSB и попытки обнаружения SSS. Для этой операции вызовите функцию с необязательным 4-м аргументом, который задает смещение по времени и NCellID2 требуемого SSB. Этот пример выбирает PSS с наивысшей метрикой корреляции, однако можно выбрать любой из обнаруженных SSB. Исправьте смещение частоты путем прохождения в сумме оценок грубого и мелкого смещения частоты.

[~,maxCorrIdx] = max(vertcat(pssList.pssCorrelation));
chosenPSS = pssList(maxCorrIdx);
FoFine = chosenPSS.frequencyOffset;
FoEst = FoCoarse + FoFine;

[ssBlockInfo,ssGrid,diagnostics] = nrhdlexamples.ssbDetect(rxWaveform,FoEst,scs,chosenPSS);

В режиме демодуляции функция возвращает три выхода вместо двух. The ssBlockInfo структура содержит дополнительные детали SSB, такие как сила корреляции SSS и общий идентификатор камеры. The ssGrid выводится матрица, содержащая демодулированные символы OFDM. Отображение информации SSB для подтверждения правильности декодирования идентификатора камеры.

disp(ssBlockInfo);
           NCellID2: 0
       timingOffset: 41712
     pssCorrelation: 7.1219
          pssEnergy: 7.2185
           NCellID1: 83
     sssCorrelation: 7.1383
          sssEnergy: 7.1743
            NCellID: 249
    frequencyOffset: 0

Отображение получившейся ресурсной сетки.

figure(3); clf;
imagesc(abs(ssGrid));
colorbar;
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('Rx Resource Grid');

The diagnostics выходы включают результаты корреляции SSS для всех 336 возможных последовательностей. Постройте график результатов корреляции SSS.

figure(4); clf;
nrhdlexamples.plotUtils.SSSCorrelation(diagnostics,'SSS Correlation')

Поиск камер

В этом разделе показано, как использовать nrhdlexamples.cellSearch функция для поиска и демодуляции SSB, когда смещение частоты и интервалы между поднесущими неизвестны. Как описано ранее, nrhdlexamples.cellSearch функция строится на nrhdlexamples.ssbDetect функция путем добавления контроллера поиска, который ищет SSB с различными интервалами поднесущих и смещениями частоты.

Примените смещение частоты, чтобы протестировать функциональность восстановления грубой и тонкой частот.

Fo           = 10000;
t            = (0:length(rxWaveform)-1).'/61.44e6;
rxWaveformFo = rxWaveform .* exp(1i*2*pi*Fo*t);

Определите конечные точки частотной области значений и пространство поиска интервала между поднесущими и вызовите nrhdlexamples.cellSearch функция. Функция отображает информацию о прогрессе поиска во время выполнения. Конечные точки частотной области значений должны быть кратны половине максимального интервала между поднесущими.

frequencyRange = [-30 30];
subcarrierSpacings = [15 30];

[ssBlockInfo,ssGrid] = nrhdlexamples.cellSearch(rxWaveformFo,frequencyRange,subcarrierSpacings,struct(...
    'DisplayPlots',false,...
    'DisplayCommandWindowOutput',true));
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: -30 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: -22.5 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: -15 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: -7.5 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: 0 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: 7.5 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: 15 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: 22.5 kHz)
Searching for PSS (subcarrierSpacing: 15 kHz, frequencyOffset: 30 kHz)
Searching for PSS (subcarrierSpacing: 30 kHz, frequencyOffset: -30 kHz)
Searching for PSS (subcarrierSpacing: 30 kHz, frequencyOffset: -15 kHz)
Searching for PSS (subcarrierSpacing: 30 kHz, frequencyOffset: 0 kHz) ... PSS detected.
Searching for PSS (subcarrierSpacing: 30 kHz, frequencyOffset: 15 kHz) ... PSS detected.
Found PSS with (subcarrierSpacing: 30 kHz, frequencyOffsetEstimate: 9846 Hz)
Correcting frequency offset and searching for PSS again.
Found the following PSS symbols:

    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0               6608        0.69422         0.70705           161      
       0              15376         1.3933           1.412           103      
       0              32944        0.43981         0.44714           -53      
       0              41712         7.1219          7.2185             0      
       0              68048        0.84567         0.88466           358      
       0              76816         2.1812          2.2451           294      
       0              94384         0.2793         0.28376           642      
       0         1.0315e+05        0.85524         0.89673           286      

Strongest PSS:
           NCellID2: 0
       timingOffset: 41712
     pssCorrelation: 7.1219
          pssEnergy: 7.2185
    frequencyOffset: 0

Attempting to reacquire strongest PSS and demodulate the corresponding SS block.
             NCellID2: 0
         timingOffset: 41712
       pssCorrelation: 7.1219
            pssEnergy: 7.2185
             NCellID1: 83
       sssCorrelation: 7.1383
            sssEnergy: 7.1743
              NCellID: 249
      frequencyOffset: 9846
    subcarrierSpacing: 30

Cell search summary:
  Subcarrier spacing: 30 kHz
    Frequency offset: 9846 Hz
       Timing offset: 41712
             NCellID: 249

Как показано в сводных данных, приемник вернул правильный интервал между поднесущими 30 кГц, ID камеры 249, и измеренное смещение частоты близко к ожидаемому значению 10 кГц.

Декодируйте SSB

Используйте nrhdlexamples.ssbDecode функция для декодирования ресурсной сетки и восстановления MIB. The nrhdlexamples.ssbDecode функция основана на этапах декодирования BCH примера NR Камеры Search и MIB и SIB1 Recovery (5G Toolbox).

[mibInfo,decodeDiags] = nrhdlexamples.ssbDecode(ssGrid,ssBlockInfo.NCellID,8);

Постройте график peaks корреляции для поиска DMRS. Поиск DMRS выполняется для определения ibar_ssb и индекса SSB.

figure(5); clf;
plot(0:7,decodeDiags.dmrsCorr);
title('DMRS Search Correlation');
xlabel('ibar ssb');
ylabel('Correlation strength');

Постройте график созвездия PBCH QPSK после эквализации фазы.

figure(6); clf;
plot(decodeDiags.qpskSymb,'o');
title('PBCH Symbol Constellation');
xlabel('In-phase');
ylabel('Quadrature');

Отображение декодированной информации и сравнение переданных и принятых структур MIB. Эти результаты показывают, что информация была успешно декодирована.

disp(['BCH CRC: ' num2str(mibInfo.err) newline]);

disp('Decoded information');
disp(mibInfo);

disp('Decoded MIB');
disp(mibInfo.mib);

disp('Expected MIB');
disp(txMIB);
BCH CRC: 0

Decoded information
    pbchPayload: 218103952
       ssbIndex: 3
            hrf: 0
            err: 0
            mib: [1×1 struct]

Decoded MIB
                     NFrame: 105
    SubcarrierSpacingCommon: 30
                      k_SSB: 0
          DMRSTypeAPosition: 2
            PDCCHConfigSIB1: 0
                 CellBarred: 0
       IntraFreqReselection: 0

Expected MIB
                     NFrame: 105
    SubcarrierSpacingCommon: 30
                      k_SSB: 0
          DMRSTypeAPosition: 2
            PDCCHConfigSIB1: 0
                 CellBarred: 0
       IntraFreqReselection: 0

Похожие темы