В этом примере показано, как сгенерировать узкополосный Интернет вещей форма волны нисходящего канала (NB-IoT) для режимов работы внутриполосной и защитной полосы на несущей LTE при помощи LTE Toolbox™. Пример также показывает анализ качества восстановленного NB-IoT физический нисходящий канал совместно использованный канал (NPDSCH) посредством измерений величины вектора ошибок (EVM).
Поддерживать максимальную гибкость развертывания NB-IoT, 3GPP задает эти три режима работы NB-IoT:
Автономный: несущая NB-IoT развертывается вне спектра LTE, e.g., спектр, используемый для GSM или спутниковой связи
Защитная полоса: несущая NB-IoT, развернутая в защитной полосе между двумя несущими LTE
Внутриполосный: несущая NB-IoT, развернутая в блоках ресурса несущей LTE
Этот пример фокусируется на режимах внутриполосной и защитной полосы. Для получения дополнительной информации о генерации автономной формы волны нисходящего канала NB-IoT смотрите пример Генерации сигналов Нисходящего канала NB-IoT. Этот рисунок показывает эскиз режимов внутриполосной и защитной полосы для несущей LTE на 5 МГц.
Внутриполосный режим может быть далее сгруппирован в зависимости от физической идентичности ячейки (PCI), используемой, Внутриполосной-SamePCI и Внутриполосной-DifferentPCI. Если Внутриполосный-SamePCI, идентичность ячейки физического уровня и PCI являются тем же самым, и оборудование пользователя (UE) может сделать предположения о портах и образовать канал от сигналов LTE. Ведущий блок информации NB-IoT (MIB-NB) указывает на режим работы. Сеть может использовать радио-информацию об управлении ресурсами, чтобы выделить несущую непривязки UE, действующему в несущей привязки, видеть Раздел 6.7.3.2 из TS 36.331, и разделяет 7.1.2.5 и 7.2.1.1 в [5].
Таблица 16.8-1 TS 36.213 ограничивает позволенные индексы физического блока ресурса (PRB) для внутриполосного режима несущей привязки NB-IoT к этим значениям. Внутриполосный режим NB-IoT не поддерживается на несущей LTE на 1,4 МГц. Для режима защитной полосы NB-IoT позволенные индексы PRB зависят от размера защитной полосы несущей LTE. Режим Guardband NB-IoT не поддерживается на несущей LTE на 3 МГц и на 1,4 МГц. Эта таблица показывает позволенные индексы PRB и для режимов внутриполосной и для защитной полосы.
prbTable = nbAllowedPRB()
prbTable=6×3 table
LTE Bandwidth Allowed PRB indices for NB-IoT in-band mode Allowed PRB indices for NB-IoT guardband mode
___________________ _______________________________________________________ _____________________________________________
"1.4 MHz ( 6 RBs)" {1x0 double } {1x0 double }
" 3 MHz ( 15 RBs)" {[ 2 12]} {1x0 double }
" 5 MHz ( 25 RBs)" {[ 2 7 17 22]} {[ -1 25]}
" 10 MHz ( 50 RBs)" {[ 4 9 14 19 30 35 40 45]} {[ -2 -1 50 51]}
" 15 MHz ( 75 RBs)" {[ 2 7 12 17 22 27 32 42 47 52 57 62 67 72]} {[ -4 -3 -2 -1 75 76 77 78]}
" 20 MHz (100 RBs)" {[4 9 14 19 24 29 34 39 44 55 60 65 70 75 80 85 90 95]} {[-5 -4 -3 -2 -1 100 101 102 103 104]}
Пример показывает как:
Сгенерируйте форму волны для NB-IoT внутриполосный режим работы
Получите исходную форму волны NB-IoT из полученной объединенной формы волны, содержащей и NB-IoT и формы волны LTE
Измерьте NPDSCH EVM, чтобы проверить качество восстановленной формы волны NB-IoT
Эти рисунки показывают шаги, чтобы сгенерировать форму волны и шаги обработки в приемнике, чтобы вычислить NPDSCH EVM. Коррекция частоты в приемнике вводит смещение фазы к каждому символу OFDM. Поэтому пример применяет компенсацию фазы символа сетке ресурса NB-IoT прежде, чем объединить его с сеткой LTE.
Пример задает внутриполосный режим работы несущей привязки NB-IoT на несущей LTE на 5 МГц. Можно использовать nbPRB
параметр, чтобы изменить индекс LTE PRB для выделения NB-IoT. Чтобы изучить эффект интерференции LTE на NPDSCH EVM, запустите пример снова без интерференции LTE установкой lteDisabled
к true
.
operationMode = "Inband-SamePCI"; % NB-IoT operation mode ltecfg = struct (); % LTE configuration ltecfg.TotSubframes = 10; % Number of subframes ltecfg.NDLRB = 25; % Number of downlink resource blocks nbPRB = 7; % PRB in which the NB-IoT is deployed (0-based) lteDisabled = false; % Set to true to disable the LTE component nbPowerBoost = 6; % NB-IoT power boost in dB % Verify that the PRB chosen for the NB-IoT operation mode in the LTE carrier is allowed. verifyNBPRB (nbPRB, ltecfg.NDLRB, operationMode);
Сконфигурируйте генератор формы волны нисходящего канала NB-IoT. Пример использует NBIoTDownlinkWaveformGenerator
класс, чтобы сгенерировать сетку ресурса NB-IoT. Смотрите пример Генерации сигналов Нисходящего канала NB-IoT для получения дополнительной информации о NBIoTDownlinkWaveformGenerator
.
ngen = NBIoTDownlinkWaveformGenerator;
ngen.Config.CellRefP = 1;
ngen.Config.NNCellID = 0;
ngen.Config.NFrame = 0;
ngen.Config.TotSubframes = ltecfg.TotSubframes;
ngen.Config.OperationMode = operationMode;
ngen.Config.NPDSCH.StartSubframe = 2;
ngen.Config.NPDSCH.NRep = 1;
ngen.Config.Windowing = 3; % Set Windowing to 3, as shown in Table E.5.1-1a of TS 36.104
Отобразите сетку ресурса.
figure; displayResourceGrid(ngen);
Сгенерируйте форму волны нисходящего канала NB-IoT и сетку ресурса.
[nbWaveform,nbGrid,nbInfo] = generateWaveform(ngen); nbInfo
nbInfo = struct with fields:
SamplingRate: 1920000
Nfft: 128
Windowing: 3
CyclicPrefixLengths: [10 9 9 9 9 9 9 10 9 9 9 9 9 9]
SubframeChannelTypes: ["NPBCH" "NPDCCH" "NPDSCH" ... ]
Сконфигурируйте несущую LTE. Если вы выбрали внутриполосный режим работы, пример оставляет nbPRB
Индекс PRB, пустой в настройке LTE.
nbPRB = double(nbPRB); ltecfg.PDSCH.PRBSet = (0:ltecfg.NDLRB-1)'; % Full PRB allocation for LTE if contains(ngen.Config.OperationMode,'Inband') ltecfg.PDSCH.PRBSet(nbPRB+1) = []; % Leave nbPRB empty for in-band NB-IoT end
Сгенерируйте сетку ресурса LTE. Пример использует lteRMCDLTool
сгенерировать широкополосную сетку ресурса.
[~,lteGrid,lteInfo] = lteRMCDLTool(ltecfg,[1 0 0 1]);
Пример комбинирует LTE и сетки ресурса NB-IoT прежде, чем сгенерировать форму волны. hNBInbandGuardbandCombineGrid
функция применяет pre-OFDM компенсацию фазы символа сетке NB-IoT, чтобы иметь дело с искажением, которое приемник вводит при сдвиге принятой формы волны, чтобы принести NB-IoT в основной полосе.
Сгенерируйте объединенную сетку ресурса и возместите частоту NB-IoT.
% Create the parameter structure needed to generate the combined grid
combGridParams = struct();
combGridParams.OperationMode = ngen.Config.OperationMode;
combGridParams.NBPRB = nbPRB;
combGridParams.OFDMInfo = nbInfo;
combGridParams.LTEDisabled = lteDisabled;
[combGrid,offset] = hNBInbandGuardbandCombinedGrid(combGridParams,lteGrid,nbGrid*db2mag(nbPowerBoost));
Сгенерируйте форму волны.
OSR = lteInfo.SamplingRate/nbInfo.SamplingRate; % Oversampling ratio for NB-IoT wavecfg.Windowing = ngen.Config.Windowing*OSR; % Use the same windowing as the NB-IoT waveform txWaveform = lteOFDMModulate(wavecfg,combGrid);
Постройте спектр мощности переданной формы волны.
txPlot = hPlotSpectrum(txWaveform,lteInfo.SamplingRate,... 'Transmitted Waveform Power Spectrum',... {'Transmitted waveform'});
Этот раздел выполняет эти шаги:
Коррекция частоты. Переключите принятую форму волны в частоте, чтобы принести спектр NB-IoT к основной полосе (0 Гц).
Отфильтруйте компонент LTE и проредите. Downsample форма волны к частоте дискретизации NB-IoT и отфильтровывает частоты вне полосы NB-IoT.
Синхронизация времени. Удалите любую потенциальную задержку, добавленную фильтром.
Постройте спектрограмму принятой формы волны. Этот график показывает частоту, занятую компонентом NB-IoT в полученной широкополосной форме волны.
rxWaveform = txWaveform; figure; spectrogram(rxWaveform(:,1),ones(lteInfo.Nfft,1),0,lteInfo.Nfft,'centered',lteInfo.SamplingRate,'MinThreshold',-130);
Переключите принятую форму волны, чтобы принести компонент NB-IoT к основной полосе. График показывает спектр мощности принятой формы волны после коррекции частоты.
rxWaveformB = lteFrequencyCorrect(ltecfg,rxWaveform,offset); % Received waveform with NB-IoT in baseband combinedSpecPlotB = hPlotSpectrum(rxWaveformB,lteInfo.SamplingRate,... 'Received Waveform Power Spectrum with NB-IoT in Baseband',... {'Received waveform'});
Этот пример использует resample
функция, чтобы проредить широкополосную форму волны к номинальной частоте дискретизации NB-IoT 1,92 МГц. Кроме того, КИХ по умолчанию, сглаживающий фильтр lowpass, реализован в resample
функция отфильтровывает нежелательную форму волны LTE без потребности дополнительного фильтра lowpass.
rxwave = resample(rxWaveformB,1,OSR);
Постройте спектр мощности восстановленной формы волны NB-IoT против спектра мощности исходной формы волны NB-IoT, сгенерированной генератором формы волны NB-IoT NBIoTDownlinkWaveformGenerator
. Поскольку степень сгенерированной формы волны зависит от размера БПФ, разделите исходную форму волны на уровень сверхдискретизации так, чтобы обе формы волны имели сопоставимую силу.
filteredSpecPlot = ... hPlotSpectrum([nbWaveform/OSR*db2mag(nbPowerBoost),rxwave],nbInfo.SamplingRate,... 'Original and Recovered NB-IoT Waveform Power Spectrum',... {'Original NB-IoT waveform','Recovered NB-IoT waveform'});
Постройте спектрограмму восстановленной формы волны NB-IoT. Этот график показывает основополосную узкополосную форму волны после извлечения его от полученной широкополосной формы волны.
figure; spectrogram(rxwave(:,1),ones(nbInfo.Nfft,1),0,nbInfo.Nfft,'centered',nbInfo.SamplingRate,'MinThreshold',-130);
Извлеките параметры конфигурации NB-IoT для синхронизации времени и измерений EVM.
enb = ngen.Config; enb.NSubframe = lteInfo.NSubframe;
Примените синхронизацию времени к получившейся форме волны.
timeOffset = lteNBDLFrameOffset(enb,rxwave); % Time delay in samples
rxwave = rxwave(1+timeOffset:end,:);
Параметрируйте средство оценки канала в конце приемника с помощью структуры cec
.
cec = struct; % Channel estimation config structure cec.PilotAverage = 'UserDefined'; % Type of pilot symbol 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'; % Reference signal for channel estimation
hNPDSCHEVM
функция обеспечивает на подкадр и средние измерения EVM. Пример также отображает графики с EVM по сравнению со временем и поднесущими.
[evmmeas,plots] = hNPDSCHEVM(enb,cec,rxwave,nbInfo);
EVM subframe 2: 0.210% EVM subframe 3: 0.176% EVM subframe 6: 0.207% EVM subframe 7: 0.192%
Averaged EVM frame 0: 0.197% Averaged overall EVM: 0.197%
3GPP TS 36.101. “Развитый Универсальный наземный радио-доступ (к E-UTRA); передача радио оборудования пользователя (UE) и прием”. Проект партнерства третьего поколения; сеть радиодоступа Technical Specification Group.
3GPP TS 36.104. "Развитый Универсальный наземный радио-доступ (к E-UTRA); передача радио базовой станции (BS) и прием". Проект партнерства третьего поколения; сеть радиодоступа Technical Specification Group.
3GPP TS 36.213. "Развитый Универсальный наземный радио-доступ (к E-UTRA); процедуры физического уровня". Проект партнерства третьего поколения; сеть радиодоступа Technical Specification Group.
3GPP TS 36.331. "Развитый Универсальный Наземный Радио-доступ (к E-UTRA); Радио-управление ресурсами (RRC); спецификация Протокола". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
О. Либерг, М. Зундберг, Y.-P. Ван, Дж. Бергман, Дж. Сакс и Г. Викстром, сотовый Интернет вещей: от массовых развертываний до критических приложений 5G, Elsevier, 2020.
function prbTable = nbAllowedPRB() % Generate a table showing the PRB indices allowed for NB-IoT in-band % and guardband operation mode for each LTE bandwidth. NDLRBList = [6 15 25 50 75 100]; bwMHz = [1.4 3 5 10 15 20]; % Bandwidth in MHz bw = (pad(string(bwMHz),'left') + repmat(" MHz (",size(bwMHz)) + pad(string(NDLRBList),'left') + repmat(" RBs)",size(bwMHz)))'; % In-band mode % The allowed PRB indices for in-band mode of NB-IoT anchor % carrier are derived from Table 16.8-1 of TS 36.213. prbIndexOdd = [-35:5:-5 5:5:35]; % DC (i.e., PRB 0) is excluded prbIndexEven = [-46:5:-6 5:5:45]; % DC (i.e., PRB 0) is excluded PRBInband = cell(length(NDLRBList),1); for ibw = 1:length(NDLRBList) if mod(NDLRBList(ibw),2) % Odd prbTemp = prbIndexOdd + floor(NDLRBList(ibw)/2); else % Even prbTemp = prbIndexEven + floor(NDLRBList(ibw)/2); end prbTemp(prbTemp<0 | prbTemp>=NDLRBList(ibw)) = []; PRBInband{ibw} = prbTemp; end PRBVariableNameInband = "Allowed PRB indices for NB-IoT in-band mode"; % Guardband mode % The allowed PRB indices for NB-IoT guardband mode are derived % here for all channel bandwidths. totalGuardHz = bwMHz*1e6 - NDLRBList*12*15e3; % Total guardband in Hz NRBGuard = floor((totalGuardHz/2) / (12*15e3)); % Number of RBs allowed on each side of the guardband for all BWs PRBGuard = cellfun(@(x,y)([-x:-1, y+(0:(x-1))]),num2cell(NRBGuard(:)),num2cell(NDLRBList(:)),'UniformOutput',false); % Allowed PRB indices for guardband (0-based) PRBVariableNameGuard = "Allowed PRB indices for NB-IoT guardband mode"; prbTable = table(bw,PRBInband,PRBGuard); prbTable.Properties.VariableNames = ["LTE Bandwidth" PRBVariableNameInband PRBVariableNameGuard]; end function verifyNBPRB(nbPRB,NDLRB,operationMode) % Check whether the PRB chosen for the NB-IoT operation mode in the LTE % carrier is allowed. prbTable = nbAllowedPRB(); r = contains(prbTable{:,1},string(NDLRB)+" RBs"); % prbTable row associated to the given bandwidth c = 1+contains(operationMode,'Inband')*1+contains(operationMode,'Guard')*2; % prbTable column associated to the given operation mode errorFlag = ismember(nbPRB,prbTable{r,c}{1}); % If true, the selected nbPRB is allowed tmp = extract(prbTable{r,1},digitsPattern); msg = "The chosen PRB index ("+string(nbPRB)+") is invalid for "+operationMode+" operation mode on a "+string(tmp(1))+... " MHz LTE carrier. See 'prbTable' for the allowed PRB indices for all combinations of LTE bandwidth and operation mode."; assert(errorFlag,msg); % Throws an error if the chosen nbPRB is invalid for the given combination of NDLRB and operation mode end