exponenta event banner

NR HDL Поиск ячеек и восстановление MIB MATLAB Ссылка

Этот пример показывает как модели a 5G НОМЕР поиска клетки и алгоритма аппаратных средств восстановления МИБ в MATLAB® как шаг к развитию внедрения Simulink® HDL. Используйте эту ссылку MATLAB для проверки моделей Simulink в NR HDL Cell Search, NR HDL MIB Recovery и NR HDL MIB Recovery для FR2 примеров.

Введение

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

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

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

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

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

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

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

Обзор поиска ячеек и восстановления MIB

Показана блок-схема алгоритма поиска соты и восстановления MIB. Алгоритм обнаруживает, демодулирует, и расшифровывает 5G НОМЕР блоков сигнала синхронизации (SSBs) и является благоприятной для аппаратных средств версией соответствующих шагов в НОМЕРЕ Поиска Клетки и МИБ и Восстановления SIB1 (5G Комплект инструментов) пример. На верхнем уровне алгоритм состоит из контроллера поиска, детектора SSB и декодера SSB. Этот пример более подробно объясняет каждый из этих блоков и демонстрирует соответствующие эталонные функции MATLAB, которые используются для изучения алгоритмов аппаратной реализации и проверки потоковых моделей Simulink с фиксированной точкой. Этот пример внимание на 5G НОМЕР FREQUENCY RANGE 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 до 7,68 мс.

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

  • OFDM демодуляция: OFDM демодулирует сетку ресурсов SSB.

  • Поиск SSS: поиск SSS и определение общего идентификатора ячейки.

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

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

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

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

  1. Для каждого интервала поднесущих выполните шаг через каждый грубый сдвиг частоты и используйте детектор SSB для поиска 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 мс и выполняет сдвиг частоты с последующим прореживанием в 8 раз с использованием фильтров половинного диапазона. Сдвиг частоты, в Гц, обеспечивается контроллером поиска и используется алгоритмом для компенсации как грубых, так и мелких сдвигов частоты.

SSB Detection Search and Demod принимает выборки на 7,68 мс. Для интервала между поднесущими 30 кГц он использует выборки с этой скоростью. Для интервала между поднесущими 15 кГц он прореживает входной сигнал в два раза, работая на 3,84 мс. 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 мс и оборачиваются каждые 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: поиск индекса, используемого для формирования опорного символа демодуляции (DMRS).

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

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

  • Symbol Demod: выполняет демодуляцию QPSK для получения мягких битов PBCH.

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

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

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

  • Polar Decode + 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      

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);

В режиме демодуляции функция возвращает три выхода вместо двух. ssBlockInfo структура содержит дополнительные подробности SSB, такие как уровень корреляции SSS и общий идентификатор соты. 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');

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 кГц, идентификатор ячейки 249, и измеренный сдвиг частоты близок к ожидаемому значению 10 кГц.

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

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

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

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

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

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

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

Связанные темы