Этот пример показывает, как Toolbox™ LTE может использоваться для полной синхронизации, демодуляции и декодирования сигнала прямой линии связи в реальном времени узкополосного Интернета вещей (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.
Формирование формы сигнала во временной области опорного канала измерения (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 для оценки сдвига частоты и демодуляции принятых сигналов прямой линии связи OFDM NB-IoT.
% 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
Сигнал I/Q с пониженной дискретизацией 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 CRC. Функция lteNPBCHDecode устанавливает тайминг кадра по модулю 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-го поколения; техническая спецификация на сеть радиодоступа группы; Усовершенствованный универсальный наземный радиодоступа (E-UTRA). URL: https://www.3gpp.org.
3GPP ТС 36.101. «Радиопередача и прием пользовательского оборудования (UE)». проект партнерства 3-го поколения; техническая спецификация на сеть радиодоступа группы; Усовершенствованный универсальный наземный радиодоступа (E-UTRA). URL: https://www.3gpp.org.
О. Либерг, М. Сундберг, Я. -П. Ван, Дж. Бергман и Дж. Сакс. Сотовый интернет вещей: технологии, стандарты и производительность. Elsevier, 2018.