Этот пример показывает, как LTE Toolbox™ может использоваться, чтобы полностью синхронизировать, демодулировать и декодировать live узкополосный интернет вещей (NB-IoT) нисходящий сигнал. Прежде чем пользовательское оборудование (UE) сможет связаться с сетью, оно должно выполнить процедуры поиска и выбора камер и получить исходную системную информацию. Это включает в себя получение паза и системы координат синхронизации, выяснение камеры тождеств и декодирование главного информационного блока (MIB). Этот пример демонстрирует этот процесс и декодирует MIB. Для декодирования MIB требуется комплексный приемник, способный демодулировать и декодировать нисходящие каналы и сигналы.
Поскольку NB-IoT является расширением инфраструктуры LTE, сигнал NB-IoT имеет некоторое сходство с сигналом LTE. Сходства между этими двумя включают:
Интервал между поднесущими (15kHz)
Структура системы координат (10 подкадров с 2 пазами каждый)
Длительность системы координат (10 мс)
Физические каналы
Однако количество поднесущих в NB-IoT фиксируется на 12 (один ресурсный блок), в отличие от LTE, где количество поднесущих варьируется в зависимости от полосы пропускания. Кроме того, сопоставление физического канала в ресурсной сетке NB-IoT отличается от отображения LTE. Для получения дополнительной информации смотрите Генерацию сигналов нисходящего канала NB-IoT.
В порядок связи с сетью UE должно получить некоторую базовую системную информацию. Это осуществляется MIB и SIB. MIB содержит самую необходимую системную информацию:
Номер системной системы координат (SFN)
Информация о планировании SIB1-NB
Информация о режиме работы для LTE-NB
Запрет доступа
MIB переносится по широковещательному каналу (BCH), отображенному в узкополосный физический широковещательный канал (NPBCH) [1]. Это передается с фиксированной схемой кодирования и модуляции и может быть декодировано после начальной процедуры поиска камеры. MIB соответствует одному транспортному блоку BCH. Временной интервал передачи BCH (TTI) или время, необходимое для передачи одного транспортного блока, составляет 640 мс или 64 системы координат [3]. BCH передается в 64 частях, каждая часть преобразуется в первый субкадр (субкадр 0) системой координат, и возможно, что каждая передача является независимо декодируемой, в зависимости от условий сигнала. Чтобы гарантировать, что субкадр 0 принят, захват должен быть по меньшей мере 11 субкадров в длину, чтобы учесть возможность того, что захват запускается во время субкадра 0. Для плохих условий сигнала могут потребоваться все 64 части TTI, в этом случае захват должен быть по меньшей мере 641 субкадров. Для получения дополнительной информации о генерации символов NPBCH смотрите NB-IoT Nownlink Генерация Сигналов.
Сгенерируйте форму волны во временной области опорного канала измерения (RMC) для требований к эффективности узкополосного физического нисходящего канала (NPDSCH) в соответствии с TS 36.101 Приложение A.3.12 [2]. Форма волны генерируется с помощью метода generateWaveform в классе NBIoTDownlinkWaveformGenerator. Чтобы вызвать метод, объект ngen
создается, и метод вызывается при помощи generateWaveform(ngen)
.
% Initialize NBIoTDownlinkWaveformGenerator object % % Use the 'rc' values of 'R.NB.5' and 'R.NB.6' for MIB decoding. Note that % RMCs 'R.NB.5-1', 'R.NB.6-1' and 'R.NB.7' correspond to Non-Anchor type % carriers which do not contain the required NPSS, NSSS and NPBCH. rc = 'R.NB.5'; ngen = NBIoTDownlinkWaveformGenerator(rc); ngen.Config.NNCellID = 120; ngen.Config.NBRefP = 1; ngen.Config.NFrame = 640; ngen.Config.TotSubframes = 50; ngen.Config.NPBCH.DataSource = 'MIB'; % Generate time domain NB-IoT waveform [eNodeBOutput,grid,ofdmInfo] = generateWaveform(ngen); sr = ofdmInfo.SamplingRate; % Introduce a delay to simulate the unknown timing alignment associated % with an arbitrary signal capture. This is compensated at the receiver % while synchronizing the received signal. delay = 50; waveform = circshift(eNodeBOutput, delay); % Initialize plots if (~exist('channelFigure','var') || ~isvalid(channelFigure)) channelFigure = figure('Visible','off'); end [spectrumAnalyzer,synchCorrPlot,pdcchConstDiagram] = ... hSIB1RecoveryExamplePlots(channelFigure,sr); % Display received signal spectrum fprintf('\nPlotting received signal spectrum...\n'); spectrumAnalyzer(awgn(waveform, 100.0));
Plotting received signal spectrum...
Вызовите функцию hNBCellSearch, чтобы получить тождества камеры и смещение времени offset
к первой головке системы координат. Формируется график корреляции между принятым сигналом и узкополосным первичным сигналом синхронизации (NPSS )/узкополосным вторичным сигналом синхронизации (NSSS) для обнаруженной единичной камеры. NPSS обнаруживается с помощью корреляции во временной области, и NSSS обнаруживается с помощью корреляции в частотном диапазоне. Перед обнаружением NSSS выполняют оценку/коррекцию смещения частоты с помощью циклической префиксной корреляции. Обнаружение NPSS во временной области устойчиво к малым смещениям частоты, но большие смещения могут ухудшить корреляцию NPSS.
% Cell search fprintf('\nPerforming cell search...\n'); alg.SSSDetection = 'PostFFT'; alg.MaxCellCount = 1; [NNCellID, offset, peak] = hNBCellSearch(waveform, alg); nbenb = struct; nbenb.NNCellID = NNCellID; [~,corr] = lteNBDLFrameOffset(setfield(nbenb,'OperationMode','Standalone'),waveform); %#ok<SFLD> % As NB-IoT has similar waveform structure as LTE waveform, use functions % pertaining to LTE to work with NB-IoT. For this purpose, create a % cell-wide settings structure enb. enb = nbenb; % Plot NPSS/NSSS correlation and threshold synchCorrPlot.YLimits = [0 max(corr(:))*1.1]; synchCorrPlot(corr); % Perform timing synchronization fprintf('Timing offset to frame start: %d samples\n',offset); timesynced = waveform(1+offset:end,:); % Show cell-wide settings fprintf('Cell-wide settings after cell search:\n'); disp(nbenb);
Performing cell search... Timing offset to frame start: 50 samples Cell-wide settings after cell search: NNCellID: 120
Перед демодуляцией OFDM должно быть удалено любое значительное смещение частоты. Смещение частоты в форме сигнала I/Q оценивается и корректируется с помощью lteFrequencyOffset
и lteFrequencyCorrect
. Смещение частоты оценивается посредством корреляции циклического префикса и, следовательно, может оценивать смещения до +/- половины интервала между поднесущими, т.е. +/- 7.5kHz. Генерация сигналов нисходящего канала NB-IoT подобна генерации сигналов восходящего канала LTE, поскольку обе формы волны имеют половину сдвига поднесущей. Следовательно, используйте функции восходящей линии связи LTE, чтобы оценить смещение частоты и демодулировать принятые формы волны NB-IoT OFDM нисходящей линии связи.
% Frequency offset estimation fprintf('\nPerforming frequency offset estimation...\n'); enb.NULRB = 6; % For frequency offset computation enb.DuplexMode = 'FDD'; foffset = lteFrequencyOffset(enb,timesynced,0); fprintf('Frequency offset: %0.3fHz\n',foffset); % Compensating for frequency offset freqsynced = lteFrequencyCorrect(enb,timesynced,foffset);
Performing frequency offset estimation... Frequency offset: -0.031Hz
Сигнал с понижающей дискретизацией OFDM демодулируется, чтобы создать ресурсную сетку rxgrid
. Это используется для выполнения оценки канала. hest
- оценка канала, nest
является оценкой шума (для MMSE эквализации), и cec
- это блок строения оценки канала.
Для оценки канала в примере приняты четыре специфических для камеры опорных сигнала и два узкополосных опорных сигналов. Это означает, что доступны оценки канала для каждой антенны приемника из всех возможных портов опорного сигнала конкретной ячейки. Истинное количество портов опорного сигнала для конкретной ячейки еще не известно. Оценка канала выполняется только в первом подкадре, т.е. с использованием первого L
Символы OFDM в rxgrid
.
Консервативное окно 13 на 9 усреднения пилот-сигнала используется, как по частоте, так и по времени, чтобы уменьшить влияние шума на оценки пилот-сигнала во время оценки канала.
% Channel estimator configuration cec.PilotAverage = 'UserDefined'; % Type of pilot averaging cec.FreqWindow = 13; % Frequency window size cec.TimeWindow = 9; % Time window size cec.InterpType = 'Cubic'; % 2D interpolation type cec.InterpWindow = 'Centered'; % Interpolation window type cec.InterpWinSize = 1; % Interpolation window size cec.Reference = 'NRS'; % NB-IoT downlink channel estimation % Assume 4 cell specific and 2 narrowband reference signals for initial % decoding attempt. This ensures channel estimates are available for all % reference signals enb.CellRefP = 4; enb.NBRefP = 2; enb.NTxAnts = 2; nbenb.NBRefP = 2; fprintf('Performing OFDM demodulation...\n\n'); griddims = lteResourceGridSize(enb); % Resource grid dimensions L = griddims(2); % Number of OFDM symbols in a subframe enb.NBULSubcarrierSpacing = '15kHz'; % Required for NB-IoT downlink OFDM demodulation rxgrid = lteSCFDMADemodulate(enb,freqsynced); % For OFDM demodulation in NB-IoT if (isempty(rxgrid)) fprintf('After timing synchronization, signal is shorter than one subframe so no further demodulation will be performed.\n'); return; end % Perform channel estimation enb.NSubframe = 0; % Initialize NSubframe for channel estimation [hest, nest] = lteDLChannelEstimate(enb, cec, rxgrid(:,1:L,:));
Performing OFDM demodulation...
Теперь MIB декодируется вместе с количеством узкополосных портов опорного сигнала, переданных как маска на КРС BCH. Функция lteNPBCHDecode
устанавливает систему координат timing по модулю 64 и возвращает это в nfmod64
параметр. Он также возвращает биты MIB в векторе mib
и истинное количество узкополосных портов опорного сигнала, которые назначаются в nbenb.NBRefP
на выходе этого вызова функции. Если количество узкополосных портов опорного сигнала декодировано следующим nbenb.NBRefP=0
, это указывает на отказ декодирования BCH.
% Decode the MIB % Extract resource elements (REs) corresponding to the NPBCH from the first % subframe across all receive antennas and channel estimates separator = repmat('-',1,50); fprintf('%s\n',separator); fprintf('Performing MIB decoding...\n'); fprintf('%s\n\n',separator); npbchIndices = lteNPBCHIndices(nbenb); [npbchRx, npbchHest] = lteExtractResources(npbchIndices, ... rxgrid(1:12,1:L,:), hest(:,1:L,:,:)); % Decode NPBCH dstate = []; [bchBits, dstate,npbchSymbols,nfmod64,mib,nbenb.NBRefP] = lteNPBCHDecode( ... nbenb, npbchRx, npbchHest, nest, dstate); % Parse MIB bits nbenb = hNBMIB(mib,nbenb); if (nbenb.NBRefP == 0) fprintf('MIB decoding failed (nbenb.NBRefP=0).\n\n'); return; end % Incorporate the nfmod64 value from the function lteNPBCHDecode, as % the NFrame value established from the MIB is the SFN modulo 64 (it is % stored in the MIB as floor(SFN/64)). if nbenb.NBRefP % If NPBCH decoding is passed then set the NFrame value nbenb.NFrame = nbenb.NFrame+nfmod64; end if strcmpi(nbenb.OperationMode, 'Inband-SamePCI') nbenb.NCellID = NNCellID; end % Display cell-wide settings after MIB decoding fprintf('Cell-wide settings after MIB decoding:\n'); disp(nbenb);
-------------------------------------------------- Performing MIB decoding... -------------------------------------------------- Cell-wide settings after MIB decoding: NNCellID: 120 NBRefP: 1 NFrame: 640 HyperSFN: 0 ABEnabled: 0 OperationMode: 'Inband-DifferentPCI' AdditionalTransmissionSIB1: 0
В этом примере используются следующие вспомогательные файлы:
3GPP ТС 36.211. «Физические каналы и модуляция». 3-ья Генерация проект партнерства; Группа технических спецификаций Radio Доступа Network; Evolved Universal Terrestrial Radio Access (E-UTRA). URL-адрес: https://www.3gpp.org.
3GPP TS 36.101. «Радиопередача и прием пользовательского оборудования (UE)». Проект Партнерства 3-ьей генерации; Группа технических спецификаций Radio Доступа Network; Evolved Universal Terrestrial Radio Access (E-UTRA). URL-адрес: https://www.3gpp.org.
О. Либерг, М. Сундберг, Я.-П. Ван, Дж. Бергман и Дж. Сакс. Сотовый Интернет вещей: технологии, стандарты и эффективность. Elsevier, 2018.