Поиск ячейки HDL NR ссылка MATLAB

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

Введение

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

  • Процедуры Синхронизации NR (5G Toolbox): MATLAB золотая ссылка алгоритма с плавающей точкой с помощью функций 5G Toolbox.

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

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

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

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

Обзор алгоритма поиска ячейки

Алгоритм поиска ячейки обнаруживает и демодулирует 5G блоки сигнала синхронизации NR (SSBs) и является благоприятной для оборудования версией поиска PSS, демодуляции OFDM и шагов поиска SSS, показанных в Процедурах Синхронизации NR (5G Toolbox) пример. Этот рисунок показывает алгоритм. Получатель разделен на Детектор Блока SS и Поисковый Контроллер. Детектор Блока SS выполняет все высокоскоростные задачи обработки сигналов, делание его хорошо подошло для реализации ASIC или FPGA. Поисковый Контроллер координирует поиск и действует под низкий процент, делание его хорошо подошло для реализации программного обеспечения встраиваемому процессору.

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

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

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

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

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

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

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

В ссылке MATLAB, nrhdlexamples.cellSearch функционируйте реализует алгоритм поиска ячейки. Эта функция реализует Поисковый Контроллер, показанный в схеме, и вызывает nrhdlexamples.ssBlockDetect функция, которая реализует Детектор Блока SS. Этот пример описывает эти две функции, которые вместе используются, чтобы исследовать алгоритмы для аппаратной реализации и проверить модель Simulink фиксированной точки потоковой передачи.

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

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

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

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

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

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

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

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

Детектор блока SS

Эти схемы показывают структуру Детектора Блока SS и параметры, и данные передали и от Поискового Диспетчера. Детектор Блока SS подразделен на две функции: DDC Блока SS (nrhdlexamples.ssBlockDDC) и блочный сердечник SS (nrhdlexamples.ssBlockCore). DDC принимает выборки в 61.44 членах Шотландского парламента и выполняет сдвиг частоты, сопровождаемый децимацией фактором 8 полуленточных фильтров использования. Смещение частоты обеспечивается поисковым контроллером и используется алгоритмом, чтобы компенсировать и крупные и прекрасные смещения частоты.

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

В режиме поиска функция ищет 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.

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

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

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

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

Этот раздел показывает, как использовать функции ссылки 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));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS burst, block pattern Case B');

Обнаружьте блоки SS

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

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

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

       0               6608         0.19853        0.19965             8      
       0              15376         0.39532        0.39729            98      
       0              32944         0.12552        0.12629            92      
       0              41712          1.9812         1.9901            71      
       0              68048         0.24951        0.25074           169      
       0              76816         0.63362        0.63808           -11      
       0              94384        0.078639        0.07933           -11      
       0         1.0315e+05         0.24873        0.24988            55      

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

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

Используйте nrhdlexamples.ssBlockDetect функция, чтобы 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.ssBlockDetect(rxWaveform,FoEst,scs,chosenPSS);

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

disp(ssBlockInfo);
           NCellID2: 0
       timingOffset: 41712
     pssCorrelation: 1.9811
          pssEnergy: 1.9901
           NCellID1: 83
     sssCorrelation: 2.0032
          sssEnergy: 2.0040
            NCellID: 249
    frequencyOffset: 0

Отобразите получившуюся сетку ресурса.

figure(3); clf;
imagesc(abs(ssGrid));
axis xy;
xlabel('OFDM symbol #');
ylabel('subcarrier index');
title('Rx resource grid symbols 1,2 & 3');

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

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

Ищите ячейки

Этот раздел показывает, как использовать nrhdlexamples.cellSearch функционируйте, чтобы искать и демодулировать SSBs, когда смещение частоты и интервал поднесущей не будут известны. Аналогичный описанному ранее, nrhdlexamples.cellSearch функция основывается на nrhdlexamples.ssBlockDetect функция путем добавления поискового контроллера, который ищет 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: 10072 kHz)
Correcting frequency offset and searching for PSS again.
Found the following PSS symbols:

    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0               6608         0.19852        0.19964           -64      
       0              15376          0.3953        0.39728            26      
       0              32944         0.12552        0.12629            20      
       0              41712          1.9811         1.9901            -1      
       0              68048          0.2495        0.25074            97      
       0              76816         0.63361        0.63807           -83      
       0              94384        0.078631       0.079328           -83      
       0         1.0315e+05         0.24872        0.24987           -17      

Strongest PSS:
           NCellID2: 0
       timingOffset: 41712
     pssCorrelation: 1.9811
          pssEnergy: 1.9901
    frequencyOffset: -1

Attempting to reacquire strongest PSS and demodulate the corresponding SS block.
             NCellID2: 0
         timingOffset: 41712
       pssCorrelation: 1.9811
            pssEnergy: 1.9901
             NCellID1: 83
       sssCorrelation: 2.0032
            sssEnergy: 2.0040
              NCellID: 249
      frequencyOffset: 10072
    subcarrierSpacing: 30

Summary:
  Subcarrier spacing: 30 kHz
    Frequency offset: 10072 Hz
       Timing offset: 41712
             NCellID: 249

Верификация

Как показано в сводных данных, получатель возвратил правильный интервал поднесущей 30 кГц, ячейку ID 249, и измеренное смещение частоты близко к ожидаемому значению 5 кГц. Используйте nrhdlexamples.decodeBCH функционируйте, чтобы проверять качество сетки ресурса (ssGrid). nrhdlexamples.decodeBCH функция основана на BCH декодирование этапов Процедур Синхронизации NR (5G Toolbox) пример. ssGrid содержит только символы 1, 2, и 3 из SSB. Дополнительный символ OFDM должен предварительно ожидаться к сетке ресурса.

rxGrid = [zeros(240,1) ssGrid];
rxBCH = nrhdlexamples.decodeBCH(rxGrid,ssBlockInfo.NCellID,8);

disp(['RMS PBCH EVM: ' num2str(rxBCH.evm_rms,'%0.3f') '%' newline]);

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

disp('Decoded (Rx) MIB');
disp(rxBCH.mib);

disp('Expected (Tx) MIB');
disp(txMIB);
RMS PBCH EVM: 42.168%

BCH CRC: 0

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

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

Этот результат показывает, что BCH успешно декодируется от сетки ресурса и переданного и полученного соответствия содержимого MIB.

Похожие темы

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