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

В этом примере показано, как смоделировать поиск ячейки NR 5G и аппаратный алгоритм восстановления MIB в MATLAB как шаг к разработке реализации HDL Simulink. Используйте эту ссылку MATLAB, чтобы проверить модели Simulink в Поиске Ячейки HDL NR и примерах Восстановления MIB HDL NR.

Введение

Поиск Ячейки HDL NR и Восстановление MIB, которое Справочный пример MATLAB устраняет разрыв между математическим алгоритмом и его аппаратной реализацией путем обеспечения модели MATLAB алгоритмов, которые реализованы в оборудовании. Ссылка MATLAB создается, чтобы оценить благоприятные для оборудования алгоритмы и сгенерировать тестовые векторы для проверки реализации HDL Simulink. Эти связанные примеры показывают рабочий процесс для разработки и развертывания поиска ячейки 5G и алгоритма восстановления MIB к оборудованию.

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

  • Поиск Ячейки HDL NR и Восстановление MIB Ссылка MATLAB (этот пример): руководство по аппаратным средствам MATLAB, которое моделирует благоприятные для оборудования алгоритмы и генерирует тестовые формы волны. Этот код MATLAB работает с векторами и матрицами выборок данных с плавающей точкой и не поддерживает генерацию HDL-кода.

  • Поиск Ячейки HDL NR: модель Simulink ячейки 5G ищет подсистему, которая использует тот же алгоритм в качестве ссылки MATLAB. Эта модель работает со скалярными данными фиксированной точки и оптимизирована для генерации HDL-кода.

  • Восстановление MIB HDL NR: Добавляет восстановление MIB к модели поиска ячейки с помощью того же алгоритма в качестве ссылки MATLAB. Эта модель работает со скалярными данными фиксированной точки и оптимизирована для генерации HDL-кода.

  • 5G Восстановление MIB NR Используя Аналоговые устройства AD9361/AD9364 (Пакет Поддержки Communications Toolbox для Xilinx Находящееся в Zynq Радио): модель Simulink, которая сконфигурирована для развертывания на SoC.

Для общего описания того, как MATLAB и Simulink могут использоваться вместе, чтобы разработать развертываемые модели, см. Проект Радиосвязей для FPGAs и ASICs.

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

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

Поиск ячейки

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

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

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

  • Цифровой вниз конвертер (DDC): Выполняет перевод частоты, чтобы откорректировать смещения частоты в полученной форме волны и затем десятикратно уменьшает сигнал от 61.44 членов Шотландского парламента 7.68 членам Шотландского парламента.

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

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

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

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

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

Поисковый контроллер

Поисковый Диспетчер ответственен за координирование полного поиска. Алгоритм выполняет эти шаги.

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

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

  3. Вычислите общую частоту, возмещенную путем добавления крупных и прекрасных смещений частоты вместе.

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

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

Детектор SSB

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

SSB Detection Search и Demod принимает выборки в 7.68 членах Шотландского парламента. Для интервала поднесущей на 30 кГц это использует выборки на этом уровне. Для интервала поднесущей на 15 кГц это десятикратно уменьшает вход на коэффициент два, действующий в 3.84 членах Шотландского парламента. SSB Detection Search и Demod имеет два режима работы: поиск и демодуляция.

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

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

  • синхронизация смещения: смещение синхронизации от запуска формы волны к запуску SSB.

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

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

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

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

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

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

  • Ячейка ID, если SSS найден.

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

Синхронизация смещений

Использование алгоритма поиска ячейки, синхронизирующее смещения, чтобы идентифицировать положения в полученной форме волны и промежуточных сигналах. Смещение синхронизации является количеством выборок от запуска формы волны к данной позиции, таких как запуск SSB. Синхронизирующие смещения даны в выборках в 61.44 членах Шотландского парламента и переносят каждые 20 мс, или 1 228 800 выборок. В 5G NR UEs может принять, что пакетная периодичность SS составляет 20 мс или меньше в целях поиска ячейки, следовательно причина этого выбора синхронизации ссылочной периодичности.

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

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

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

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

  • Поиск DMRS: Поиски индекса использовали для символа ссылки демодуляции (DMRS) генерацию

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

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

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

  • Дескремблирование: Дескремблирует мягкие биты

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

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

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

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

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

Этот раздел показывает, как использовать функции ссылки MATLAB, чтобы искать SSBs в форме волны.

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

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

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

  • NCellID 249

  • Активный SSBs в пакете равняется 8

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

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

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

Обнаружьте SSBs

Используйте nrhdlexamples.ssbDetect функционируйте, чтобы найти SSBs в форме волны путем поиска символов 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-демодулировать один из SSBs и делать попытку обнаружения SSS. Для этой операции вызовите функцию с дополнительным 4-м аргументом, который задает смещение синхронизации и NCellID2 желаемого SSB. Этот пример выбирает PSS с самой высокой метрикой корреляции, однако можно выбрать любой из обнаруженных SSBs. Откорректируйте частоту, возмещенную путем передачи в сумме крупных и прекрасных оценок смещения частоты.

[~,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 и полная ячейка ID. ssGrid выход является матрицей, содержащей демодулируемые символы OFDM. Отобразите информацию SSB, чтобы подтвердить, что ячейка ID правильно декодируется.

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 функционируйте, чтобы искать и демодулировать SSBs, когда смещение частоты и интервал поднесущей не будут известны. Аналогичный описанному ранее, nrhdlexamples.cellSearch функция основывается на nrhdlexamples.ssbDetect функция путем добавления поискового контроллера, который ищет SSBs при различных интервалах поднесущей и смещениях частоты.

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

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. nrhdlexamples.ssbDecode функция основана на BCH декодирование этапов Поиска Ячейки NR и MIB и Восстановления SIB1 (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');

Постройте созвездие 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: [1x1 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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте