Приемник нисходящего канала HDL NR ссылка MATLAB

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

Введение

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

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

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

  2. Шаг Алгоритма Руководства по аппаратным средствам MATLAB состоит из Приемника Нисходящего канала HDL NR Справочный пример MATLAB (этот пример), какое оборудование моделей дружественные алгоритмы и генерируют тестовые формы волны. Этот код MATLAB® работает с векторами и матрицами выборок данных с плавающей точкой и не поддерживает генерацию HDL-кода.

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

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

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

Нисходящий обзор приемника

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

Поиск ячейки

Поиск ячейки состоит из восстановления несущей частоты, поиска первичного сигнала синхронизации (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 для FR1, и параметры и данные передали и от Поискового Диспетчера. Детектор 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 приемники могут принять, что пакетная периодичность 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 выходные параметры.

Демодуляция SIB1

Схема показывает структуру алгоритма Демодулятора SIB1, который реализован nrhdlexamples.sib1Demodulate функция. Алгоритм принимает выборки на уровне 61,44 МГц и использует результаты предыдущих этапов обработки, чтобы определить местоположение и демодулировать сетку, содержащую CORESET0 и запланированную передачу SIB1. Результаты MIB используются, чтобы вычислить параметры CORESET0, который включает смещение частоты, количество блоков ресурса и контролирующий случай. Смещение частоты относительно местоположения обнаруженного SSB. Первая стадия обработки данных является DDC, который выполняет сдвиг частоты, чтобы сосредоточить сетку SIB1 и затем прореживает к 30,72 МГц - максимальная полоса пропускания для CORESET0 в FR1. Следующий этап должен ожидать контрольного случая CORESET0 - алгоритм содержит ссылку синхронизации, которая синхронизируется со ссылками синхронизации Детектора SSB, чтобы идентифицировать следующее происшествие контролирующего случая. Если контролирующий случай достигнут, полученные выборки являются OFDM, демодулируемым, чтобы произвести сетку, которую ресурс CORESET0 блокирует широкий и два паза в длительности.

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

Декодирование SIB1 выполняется на сетке SIB1, выведенной демодуляцией SIB1. Декодирование SIB1 требует, чтобы декодирование PDCCH, чтобы восстановить SI-RNTI закодировало сообщение DCI и декодирование PDSCH, чтобы восстановить сообщение SIB1. nrhdlexamples.pdcchDecoding использует сетку SIB1 и параметры, восстановленные с предыдущих этапов декодирования, чтобы определить местоположение и декодировать PDCCH для CORESET0. Эта функция возвращает сообщение DCI, которое сигнализирует о местоположении ресурсов PDSCH, выделенных SIB1, и возвращает флаг, указывающий, был ли DCI найден в первом или втором пазе сетки SIB1. Паз, несущий PDSCH и PDSCH для SIB1, выбран из сетки SIB1 и nrhdlexamples.coreset0PhaseAdjustment корректирует для смещения фазы, примененного на базисе символа OFDM передатчиком, как детализировано в разделе TS 38.211 5.4. nrhdlexamples.pdschDecoding использует откорректированную сетку паза фазы, сообщение DCI и другую информацию от предыдущих этапов декодирования, чтобы определить местоположение и декодировать ресурсы PDSCH, несущие сообщение SIB1. Этот funtion возвращает биты сообщения SIB1 и результат проверки SIB1 CRC. Значение CRC 0 указывает на успешное восстановление SIB1.

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

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

Используйте nrhdlexamples.generateFR1RxWaveform функция, чтобы сгенерировать 5G форма волны FR1, содержащая SSB, разрывается и соответствующие передачи SIB1. Измените simulationCase исследовать различные наборы параметров. Полный набор случаев симуляции показывают.

disp('Test waveform configurations:')
disp(nrhdlexamples.generateFR1RxWaveform('list'));

rng('default');

simulationCase = "SimCase 1";
[rxWaveform,ssbPattern,minChanBW,Lmax,txMIB,simCase] = nrhdlexamples.generateFR1RxWaveform(simulationCase);

disp("Selected Simulation case:" + newline);
disp(simCase);

FoCoarse = 0;

if ssbPattern == "Case A"
    scsSSB = 15;
else
    scsSSB = 30;
end
Test waveform configurations:
    Simulation Case    SSB Pattern    Subcarrier Spacing Common    PDCCH Config SIB1    SNR dB    Strongest SSB index    Lmax
    _______________    ___________    _________________________    _________________    ______    ___________________    ____

      "SimCase 1"       "Case C"                 30                       164             50               4              8  
      "SimCase 2"       "Case B"                 15                       100              5               7              8  
      "SimCase 3"       "Case A"                 30                         4             20               2              8  
      "SimCase 4"       "Case A"                 15                        84              7               0              4  

Selected Simulation case:

    Simulation Case    SSB Pattern    Subcarrier Spacing Common    PDCCH Config SIB1    SNR dB    Strongest SSB index    Lmax
    _______________    ___________    _________________________    _________________    ______    ___________________    ____

      "SimCase 1"       "Case C"                 30                       164             50               4              8  

Постройте spectogram формы волны.

График показывает spectogram SSBs, CORESET0s и областей PDSCH, несущих SIB1. Эти области сгенерированы с различными уровнями мощности. Амплитуда каждого элемента ресурса обозначается его цветом.

figure(1); clf;
rxSampleRate = 61.44e6;
nfft = rxSampleRate/(scsSSB*1e3);
spectrogram(rxWaveform(:,1),ones(nfft,1),0,nfft,'centered',rxSampleRate,'yaxis','MinThreshold',-110);
title('Spectrogram of the Received Waveform')

Обнаружьте SSBs

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

[pssList,diagnostics] = nrhdlexamples.ssbDetect(rxWaveform,FoCoarse,scsSSB);

% Check if any PSS have been detected
if isempty(pssList)
    disp('No PSS found during SSB detection.');
    return;
end

disp('Detected PSS list:')
disp(struct2table(pssList));
Detected PSS list:
    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0               4416          0.742         0.74608            58      
       0              17568        0.59033         0.59277            -4      
       0              35136         1.4877          1.4951            15      
       0              48288         1.1708          1.1808            34      
       0              65856         4.6852          4.7073           -62      
       0              79008         1.0462          1.0523             3      
       0              96576          1.872          1.8807            14      
       0         1.0973e+05        0.93222         0.93665            -9      

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

disp('Selected PSS:')
disp(struct2table(chosenPSS));

FoFine = chosenPSS.frequencyOffset;
FoEst = FoCoarse + FoFine;

[ssBlockInfo,ssbGrid,diagnostics] = nrhdlexamples.ssbDetect(rxWaveform,FoEst,scsSSB,chosenPSS);

% Check SSB successfully demodulated
if isempty(ssBlockInfo)
    disp('Failed to demodulate selected SSB.');
    return;
end
Selected PSS:
    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0           65856            4.6852         4.7073            -62      

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

disp('SSB info for demodulated SSB:')
disp(ssBlockInfo);
SSB info for demodulated SSB:
           NCellID2: 0
       timingOffset: 65856
     pssCorrelation: 4.6852
          pssEnergy: 4.7074
           NCellID1: 83
     sssCorrelation: 4.7521
          sssEnergy: 4.7523
            NCellID: 249
    frequencyOffset: 0

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

figure(3); clf;
imagesc(abs(ssbGrid));
colorbar;
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SSB 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;
rxWaveform = rxWaveform .* exp(1i*2*pi*Fo*t);

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

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

[ssBlockInfo,ssbGrid] = nrhdlexamples.cellSearch(rxWaveform,frequencyRange,subcarrierSpacings,struct(...
    'DisplayPlots',false,...
    'DisplayCommandWindowOutput',true));

% Check cell search successfully found and demodulated SSB.
if isempty(ssBlockInfo)
    disp('Cell search failed to find or demodulate SSB.');
    return;
end
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: 9938 Hz)
Correcting frequency offset and searching for PSS again.
Found the following PSS symbols:

    NCellID2    timingOffset    pssCorrelation    pssEnergy    frequencyOffset
    ________    ____________    ______________    _________    _______________

       0               4416        0.74199         0.74609           120      
       0              17568        0.59032         0.59278            58      
       0              35136         1.4877          1.4951            77      
       0              48288         1.1708          1.1809            96      
       0              65856         4.6852          4.7074             0      
       0              79008         1.0462          1.0523            65      
       0              96576         1.8721          1.8807            76      
       0         1.0973e+05        0.93221         0.93666            53      

Strongest PSS:
           NCellID2: 0
       timingOffset: 65856
     pssCorrelation: 4.6852
          pssEnergy: 4.7074
    frequencyOffset: 0

Attempting to reacquire strongest PSS and demodulate the corresponding SS block.
             NCellID2: 0
         timingOffset: 65856
       pssCorrelation: 4.6852
            pssEnergy: 4.7074
             NCellID1: 83
       sssCorrelation: 4.7521
            sssEnergy: 4.7523
              NCellID: 249
      frequencyOffset: 9938
    subcarrierSpacing: 30

Cell search summary:
  Subcarrier spacing: 30 kHz
    Frequency offset: 9938 Hz
       Timing offset: 65856
             NCellID: 249

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

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

Используйте nrhdlexamples.ssbDecode функционируйте, чтобы декодировать сетку ресурса SSB и восстановить MIB. nrhdlexamples.ssbDecode функция основана на BCH декодирование этапов Поиска Ячейки NR и MIB и Восстановления SIB1 (5G Toolbox) пример.

[mibInfo,decodeDiags] = nrhdlexamples.ssbDecode(ssbGrid,ssBlockInfo.NCellID,Lmax);

% Check MIB successfully decoded from SSB.
if mibInfo.err
    disp('Failed to decode MIB from SSB.');
    return;
end

Постройте 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');
xlim(max(abs(real(decodeDiags.qpskSymb))).*[-1.1 1.1]);
ylim(max(abs(imag(decodeDiags.qpskSymb))).*[-1.1 1.1]);
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: 17637376
       ssbIndex: 4
            hrf: 0
            err: 0
            mib: [1×1 struct]

Decoded MIB
                     NFrame: 0
    SubcarrierSpacingCommon: 30
                      k_SSB: 0
          DMRSTypeAPosition: 3
            PDCCHConfigSIB1: 164
                 CellBarred: 0
       IntraFreqReselection: 0

Expected MIB
                     NFrame: 0
    SubcarrierSpacingCommon: 30
                      k_SSB: 0
          DMRSTypeAPosition: 3
            PDCCHConfigSIB1: 164
                 CellBarred: 0
       IntraFreqReselection: 0

Демодулируйте сетку SIB1

nrhdlexamples.sib1Demodulate функция определяет местоположение CORESET0, с помощью информации, декодируемой от предыдущих этапов, и OFDM демодулирует сетку SIB1. Сетка SIB1 содержит CORESET0 и ресурсы PDSCH, выделенные сообщению SIB1.

ssbFrequencyOffset = ssBlockInfo.frequencyOffset;

ssbResults = struct(...
        'SubcarrierSpacing', scsSSB, ...
        'TimingOffset', ssBlockInfo.timingOffset, ...
        'FrequencyOffset', ssbFrequencyOffset);

bandCfg = struct( ...
        'ssbPattern', ssbPattern, ...
        'Lmax', Lmax, ...
        'MinChanBW', minChanBW ...
        );

sib1Grid = nrhdlexamples.sib1Demodulate(rxWaveform,ssbResults,mibInfo,bandCfg);

Постройте демодулируемую сетку OFDM SIB1.

figure_SIB1grid = figure(7); clf;
imagesc(abs(sib1Grid));
colorbar;
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SIB1 Grid');

Декодируйте сетку SIB1

Сетка SIB1 состоит из 2 пазов. Только один из этих пазов несет CORESET0 и PDSCH с SIB1. nrhdlexamples.pdcchDecoding поисковые запросы в каждом из пазов для сообщений DCI закодированы с SI-RNTI. После того, как декодируемый, закодированное сообщение DCI SI-RNTI предоставляет информацию о местоположении сообщения SIB1 в PDSCH. nrhdlexamples.pdschDecoding использует DCI и информацию от предыдущих этапов, чтобы определить местоположение и декодировать сообщение SIB1 в PDSCH. Если успешно декодируется sib1CRC будет 0, и биты сообщения SIB1 выход.

% Decode PDCCH and recover DCI message
[dci,dciCRC,NSlot,secondSlotFlag,coresetNRB] = nrhdlexamples.pdcchDecoding(sib1Grid,ssBlockInfo.NCellID,mibInfo.ssbIndex,scsSSB,mibInfo.mib,minChanBW);

% Check DCI successfully decoded from PDCCH.
if dciCRC
    disp('Failed to decode DCI from PDCCH.');
    return;
end

% Update SIB1 grid plot to highlight PDCCH and PDSCH areas
nrhdlexamples.plotUtils.labelSIB1Plot(figure_SIB1grid.Number,size(sib1Grid),ssBlockInfo.NCellID,mibInfo.ssbIndex,scsSSB,mibInfo.mib,minChanBW,secondSlotFlag,dci);

% Select slot containing SIB1 message
slotGrid = sib1Grid(:,(1:14)+(14*secondSlotFlag));

% Adjust for phase offset applied by transmitter
correctedSlotGrid = nrhdlexamples.coreset0PhaseAdjustment(slotGrid,mibInfo.mib,scsSSB,minChanBW,0);

% Decode PDSCH and recover SIB1 message bits
[sib1bits,sib1CRC] = nrhdlexamples.pdschDecoding(correctedSlotGrid,ssBlockInfo.NCellID,mibInfo.mib,coresetNRB,dci,NSlot);

if sib1CRC == 0
    disp('SIB1 successfully decoded');
else
    disp('SIB1 decoding failed');
end
PDCCH RMS EVM: 0.606%
SIB1 successfully decoded

Похожие темы

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