В этом примере показано, как смоделировать аппаратный алгоритм поиска ячейки 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 в программируемой логике и Поискового Контроллера в программном обеспечении в интегрированной системе обработки.
Поисковый Диспетчер ответственен за координирование полного поиска. Алгоритм выполняет эти шаги.
Для каждого интервала поднесущей продвиньтесь посредством каждого крупного смещения частоты и используйте Детектор Блока SS, чтобы искать SSBs, пока один или несколько не будет обнаружен. Крупный размер шага смещения частоты является половиной интервала поднесущей.
Переместитесь в следующий крупный шаг частоты и ищите SSBs снова. Если поиск обнаруживает SSBs, выберите крупное смещение частоты, которое привело к самому маленькому прекрасному измерению смещения частоты. В противном случае выберите последнее крупное смещение частоты.
Вычислите общую частоту, возмещенную путем добавления крупных и прекрасных смещений частоты вместе.
Используйте Детектор Блока SS, чтобы откорректировать смещение частоты и выполнить еще один поиск SSBs.
Выберите SSB с самой сильной корреляцией PSS. Используйте Детектор Блока SS в режиме демодуляции, чтобы найти и демодулировать SSB и определить его ячейку ID.
Эти схемы показывают структуру Детектора Блока 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');
Используйте 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.