Этот пример показывает, как смоделировать 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 на оборудовании.
Каждый шаг в этом рабочем процессе демонстрируется одним или несколькими связанными примерами.
Алгоритм Золотой Ссылки MATLAB: Пример Поиска Камеры NR и Восстановления MIB и SIB1 (5G Toolbox) показывает алгоритм Золотой ссылки с плавающей точкой.
Оборудование ссылки MATLAB: NR HDL Cell Search и MIB Recovery MATLAB Reference (этот пример) моделируют аппаратно-удобные алгоритмы и генерируют тестовые формы сигналов. Этот код MATLAB работает с векторами и матрицами выборок данных с плавающей точкой и не поддерживает генерацию HDL-кода.
Модель реализации Simulink с фиксированной точкой: Пример поиска Камеры HDL NR демонстрирует подсистему Simulink 5G камеры поиска, которая использует тот же алгоритм, что и ссылка MATLAB. Пример восстановления MIB NR HDL добавляет подсистему декодирования широковещательного канала и восстановления MIB. NR HDL MIB Recovery для FR2 примера показывает модели поиска камер и восстановления MIB, которые были расширены для поддержки FR2. Эти модели работают на данных с фиксированной точкой и оптимизированы для генерации HDL-кода.
Simulink SoC Deployment Model: Примеры развертывания Примеров готовых узлов NR HDL на SoCs основаны на моделях реализации с фиксированной точкой и используют пакеты аппаратной поддержки для развертывания алгоритмов на оборудовании.
Общее описание того, как MATLAB и Simulink могут использоваться вместе для разработки развертываемых моделей, смотрите в Wireless Communications Design для FPGA и ASIC.
Показан блок алгоритма поиска камеры и восстановления 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 реализован в программируемой логике, в то время как контроллер поиска реализован в программном обеспечении на интегрированной системе обработки.
Контроллер поиска отвечает за координацию общего поиска. Алгоритм следует этим шагам.
Для каждого интервала между поднесущими выполните шаг через каждое крупное смещение частоты и используйте детектор SSB для поиска SSB до тех пор, пока не будет обнаружено одно или несколько. Размер шага смещения грубой частоты составляет половину интервала между поднесущими. Когда SSB обнаруживаются на заданной частоте, регистрируйте невязку мелкой несущей самой сильной SSB, которая возвращается.
Перейдите к следующему шагу грубой частоты и снова выполните поиск SSB. Если поиск обнаруживает SSB, выберите смещение грубой частоты, которое привело к наименьшему измерению смещения тонкой частоты. В противном случае выберите последнее смещение грубой частоты.
Вычислите общее смещение частоты путем сложения грубого и мелкого смещений частоты.
Используйте детектор SSB, чтобы исправить смещение частоты и выполнить еще один поиск SSB.
Выберите SSB с самой сильной корреляцией PSS. Используйте детектор 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-декодера, которая реализована 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');
Используйте 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 кГц.
Используйте 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