Этот пример показывает, как сгенерировать LTE-Advanced Pro Release 13 узкополосный IoT (NB-IoT) сигнал восходящего канала, состоящий из узкополосного физического восходящего канала (NPUSCH) и соответствующих опорных сигналов демодуляции для приложений тестирования и измерения, использующих LTE Toolbox™
3GPP представил новый беспроводной интерфейс, Narrowband IoT (NB-IoT), оптимизированный для низкоскоростных коммуникаций типа машины в LTE-Advanced Pro Release 13. NB-IoT обеспечивает улучшение затрат и степени эффективности, поскольку избегает необходимости в сложных служебных данных сигнализации, необходимых для систем на основе LTE.
LTE Toolbox может использоваться, чтобы сгенерировать стандартные совместимые NB-IoT комплексные формы волны основной полосы, представляющие 180kHz узкополосную несущую, подходящую для тестирования и измерения. LTE Toolbox поддерживает все режимы работы NB-IoT, описанные ниже - автономный, guardband и внутриполосный.
Автономная: NB-IoT несущая, развернутая вне спектра LTE, например, спектр, используемый для GSM или спутниковой связи
Guardband: NB-IoT перевозчик развернут в полосе безопасности между двумя LTE перевозчиками
Внутриполосный: NB-IoT-носитель, развернутый в ресурсных блоках LTE-носителя
Восходящий канал NB-IoT состоит из следующих каналов физического слоя и сигналов:
Узкополосный опорный сигнал демодуляции (DM-RS)
Узкополосный физический общий восходящий канал (NPUSCH)
Узкополосный физический канал произвольного доступа (NPRACH)
Этот пример демонстрирует сетку ресурсного элемента восходящего канала (RE) NB-IoT и генерацию сигналов, состоящую из сигналов NPUSCH и DM-RS. В приведенных ниже разделах представлены эти физические сигналы и каналы, которые образуют сетку вместе с ключевыми концепциями, включая повторение субкадров, логические и транспортные отображения каналов и соответствующие сетки для различных строений.
Пример выводит комплексную форму волны полосы модулирующих сигналов вместе с заполненной сеткой, содержащей сигналы NPUSCH и DM-RS. Форма волны может использоваться для области значений приложений от RF проверки до симуляции реализаций приемника.
В этом разделе приводится общее описание отображения NPUSCH в пазы восходящего канала NB-IoT.
NPUSCH может нести общий канал восходящей линии связи (UL-SCH) или управляющую информацию восходящей линии связи в соответствии с этими двумя форматами:
NPUSCH формат 1, используемый для переноса общего канала восходящей линии связи (UL-SCH)
NPUSCH формат 2, используемый для переноса управляющей информации восходящего канала
NPUSCH передается на одном или нескольких ресурсных модулях, и каждый из этих ресурсных модулей повторяется до 128 раз, чтобы улучшить надежность и покрытие передачи без ущерба для требований малой степени и низкой сложности, для удовлетворения сверхнизких вариантов использования Интернета вещей.
Наименьший модуль отображения для NPUSCH является ресурсным модулем. Определяется как 7 * NslotsUL
последовательные символы SC-FDMA во временном интервале и NscRU
последовательные поднесущие в частотный диапазон, где NslotsUL
и NscRU
определены в ТС 36.211 Таблица 10.1.2.3-1 [1]. NB-IoT UL-SCH может нести Общий канал управления (CCCH), Выделенный канал управления (DCCH) или Выделенный канал трафика (DTCH) и преобразуется в раздел 6,1,3,1 физического канала NPUSCH (TS 36,300 и раздел 5,3 .1a [6 NPUSCH может быть сопоставлен с одним или несколькими ресурсными модулями NRU как определено в TS 36.211 Раздел 10.1.3.6 [1], и каждый ресурсный модуль может быть передан
Nrep
времени.
Примеры на рисунке показывают шаблон повторения с NRep
= 4. Общая длительность передачи блока данных определяется NRU
* NULSlots
* MidenticalNPUSCH
в соответствии с ТС 36.211 Раздел 10.1.3.6 [1]. В первом случае, показанном ниже, каждый транспортный блок передается по NRU
= 2 и каждый из этих NRU
содержит два пазов UL, обозначенных NULSlots
. После отображения с Nslots
, эти пазы будут повторяться MidenticalNPUSCH
= 2 (принимая NscRU > 1) раза. Во втором случае мы предполагаем, что NscRU
равен 1, и, следовательно MidenticalNPUSCH
= 1. Это, в сочетании с Nslots
= 1 приводит к шаблону передачи, где каждый блок передается без внутренних повторений. Во всех случаях последовательность скремблирования сбрасывается в начале передачи или повторной передачи кодового слова (см. TS 36.211, раздел 10.1.3.1 [1]). Подробную спецификацию схемы повторения можно найти в TS 36.211 10.1.3 [1].
В дополнение к распределению пазов, описанному выше, в этом разделе дополнительно поясняется распределение RE в пазе. Сетка состоит из одной или нескольких систем координат, содержащих NPUSCH и соответствующий DM-RS.
DM-RS: DM-RS передается в каждом пазе NPUSCH с той же пропускной способностью, что и соответствующий NPUSCH. Опорные сигналы зависят от количества поднесущих NscRU
, узкополосный идентификатор камеры NNcellID
и формат NPUSCH NPUSCHFormat
. Положения RE зависят от формата NPUSCH и интервала между поднесущими. Для формата 1 NPUSCH с интервалом между поднесущими 3.75kHz, DM-RS передается на символе 4, и с интервалом между поднесущими 15kHz, DM-RS передается на символе 3. Для формата NPUSCH 2 с интервалом между поднесущими 3.75kHz, DM-RS передается на символах 0,1,2 и с интервалом между поднесущими 15kHz, DM-RS передается на символах 2,3 и 4 в пазе.
NPUSCH: NPUSCH поддерживает полосу с одним тональным сигналом в дополнение к полосе с несколькими (12 поднесущих). Передачи с одним тоном могут использовать 15kHz или 3.75kHz интервалы между поднесущими, в то время как передачи с несколькими тонами используют 15kHz интервалы между поднесущими. Это означает, что длительность паза для 15kHz режима составляет 0,5 мс, и для 3.75kHz пазу длительность равна 2 мс. Скремблирующая последовательность инициализируется в первом пазе передачи кодового слова. Если активированы повторения, то последовательность скремблирования повторно инициализируется после каждого MidenticalNPUSCH
передача кодового слова, как описано в TS 36.211 раздел 10.1.3.1 [1]. Кодовые слова BPSK/QPSK модулируются на одном слое и предварительно кодируются перед отображением на один или несколько ресурсных модули. Все ресурсные элементы, кроме используемых для опорных сигналов демодуляции, используются для передачи NPUSCH. Если сигнализация более высокого слоя (npusch-AllSymbols
как описано в TS 36.211 Раздел 10.1.3.6 [1]) указывает на наличие символа SRS, эти символы подсчитываются в отображении NPUSCH, но не используются для передачи NPUSCH (т.е. эти положения NPUSCH прокалываются SRS).
В этом разделе вы конфигурируете параметры, необходимые для генерации NPUSCH. UE использует комбинацию MCS (схема модуляции и кодирования) и назначения ресурса, сигнализируемых через DCI, чтобы определить размер транспортного блока из набора, определенного в таблице TS 36.213 16.5.1.2-2 [3], для использования в передаче NPUSCH. В этом примере это задается через параметр tbs
и длительностью сгенерированной формы волны управляют через totNumBlks
параметр.
tbs = 144; % The transport block size totNumBlks = 1; % Number of simulated transport blocks ue = struct(); % Initialize the UE structure ue.NBULSubcarrierSpacing = '15kHz'; % 3.75kHz, 15kHz ue.NNCellID = 0; % Narrowband cell identity chs = struct(); % NPUSCH carries data or control information chs.NPUSCHFormat = 'Data'; % Payload type (Data or Control) % The number of subcarriers used for NPUSCH 'NscRU' depends on the NPUSCH % format and subcarrier spacing 'NBULSubcarrierSpacing' as shown in TS % 36.211 Table 10.1.2.3-1. There are 1,3,6 or 12 contiguous subcarriers for % NPUSCH chs.NBULSubcarrierSet = 0; % Range is 0-11 (15kHz); 0-47 (3.75kHz) chs.NRUsc = length(chs.NBULSubcarrierSet); chs.CyclicShift = 0; % Cyclic shift required when NRUsc = 3 or 6 chs.RNTI = 0; % RNTI value chs.NLayers = 1; % Number of layers chs.NRU = 2; % Number of resource units chs.NRep = 4; % Number of repetitions of the NPUSCH chs.SlotIdx = 0; % Start slot index in a bundle % The symbol modulation depends on the NPUSCH format and NscRU as % given by TS 36.211 Table 10.1.3.2-1 chs.Modulation = 'QPSK'; rvDCI = 0; % RV offset signaled via DCI (See 36.213 16.5.1.2) % Specify the NPUSCH and DM-RS power scaling in dB for plot visualization chs.NPUSCHPower = 30; chs.NPUSCHDRSPower = 34;
Для сигналов DM-RS в формате NPUSCH 1, скачкообразное изменение группы последовательностей может быть включено или отключено параметром для ячеек более высокого слоя groupHoppingEnabled
. Скачкообразное изменение группы последовательностей для конкретного UE может быть отключено через параметр более высокого слоя groupHoppingDisabled
как описано в TS 36.211 Раздел 10.1.4.1.3 [1]. В этом примере мы используем SeqGroupHopping
параметр для включения или отключения скачкообразного изменения группы последовательности.
chs.SeqGroupHopping = 'on'; % Enable/Disable Sequence-Group Hopping for UE chs.SeqGroup = 0; % Delta_SS. Higher-layer parameter groupAssignmentNPUSCH % Get number of time slots in a resource unit NULSlots according to % TS 36.211 Table 10.1.2.3-1 if strcmpi(chs.NPUSCHFormat,'Data') if chs.NRUsc == 1 NULSlots = 16; elseif any(chs.NRUsc == [3 6 12]) NULSlots = 24/chs.NRUsc; else error('Invalid number of subcarriers. NRUsc must be one of 1,3,6,12'); end elseif strcmpi(chs.NPUSCHFormat,'Control') NULSlots = 4; else error('Invalid NPUSCH Format (%s). NPUSCHFormat must be ''Data'' or ''Control''',chs.NPUSCHFormat); end chs.NULSlots = NULSlots; NSlotsPerBundle = chs.NRU*chs.NULSlots*chs.NRep; % Number of slots in a codeword bundle TotNSlots = totNumBlks*NSlotsPerBundle; % Total number of simulated slots
В этом разделе вы создаете ресурсную сетку, заполненную NPUSCH и соответствующими опорными сигналами демодуляции. Затем эта сетка модулируется SC-FDMA, чтобы сгенерировать форму волны временного интервала.
% Initialize the random generator to default state rng('default'); % Get the slot grid and number of slots per frame emptySlotGrid = lteNBResourceGrid(ue); slotGridSize = size(emptySlotGrid); NSlotsPerFrame = 20/(slotGridSize(1)/12); state = []; % NPUSCH encoder and DM-RS state, auto re-initialization in the function trblk = []; % Initialize the transport block txgrid = []; % Full grid initialization % Display the number of slots being generated fprintf('\nGenerating %d slots corresponding to %d transport block(s)\n',TotNSlots,totNumBlks); for slotIdx = 0+(0:TotNSlots-1) % Calculate the frame number and slot number within the frame ue.NFrame = fix(slotIdx/NSlotsPerFrame); ue.NSlot = mod(slotIdx,NSlotsPerFrame); if isempty(trblk) if strcmpi(chs.NPUSCHFormat,'Data') % UL-SCH encoding is done for the two RV values used for % transmitting the codewords. The RV sequence used is determined % from the rvDCI value signaled in the DCI and alternates % between 0 and 2 as given in TS 36.213 Section 16.5.1.2 % Define the transport block which will be encoded to create the % codewords for different RV trblk = randi([0 1],tbs,1); % Determine the coded transport block size [~, info] = lteNPUSCHIndices(ue,chs); outblklen = info.G; % Create the codewords corresponding to the two RV values used % in the first and second block, this will be repeated till all % blocks are transmitted chs.RV = 2*mod(rvDCI+0,2); % RV for the first block cw = lteNULSCH(chs,outblklen,trblk); % CRC and Turbo coding chs.RV = 2*mod(rvDCI+1,2); % RV for the second block cw = [cw lteNULSCH(chs,outblklen,trblk)]; %#ok<AGROW> % CRC and Turbo coding is repeated else trblk = randi([0 1],1); % 1 bit ACK % For ACK, the same codeword is transmitted every block as % defined in TS 36.212 Section 6.3.3 cw = lteNULSCH(trblk); end blockIdx = 0; % First block to be transmitted end % Initialize grid slotGrid = emptySlotGrid; % NPUSCH encoding and mapping onto the slot grid txsym = lteNPUSCH(ue,chs,cw(:,mod(blockIdx,size(cw,2))+1),state); % Map NPUSCH symbols in the grid of a slot indicesNPUSCH = lteNPUSCHIndices(ue,chs); slotGrid(indicesNPUSCH) = txsym*db2mag(chs.NPUSCHPower); % Create DM-RS sequence and map to the slot grid [dmrs,state] = lteNPUSCHDRS(ue,chs,state); indicesDMRS = lteNPUSCHDRSIndices(ue,chs); slotGrid(indicesDMRS) = dmrs*db2mag(chs.NPUSCHDRSPower); % Concatenate this slot to the slot grid txgrid = [txgrid slotGrid]; %#ok<AGROW> % If a full block is transmitted, increment the clock counter so that % the correct codeword can be selected if state.EndOfBlk blockIdx = blockIdx + 1; end % trblk err count and re-initialization if state.EndOfTx % Re-initialize to enable the transmission of a new transport block trblk = []; end end % Perform SC-FDMA modulation to create time domain waveform ue.CyclicPrefixUL = 'Normal'; % Normal cyclic prefix length for NB-IoT [waveform,scfdmaInfo] = lteSCFDMAModulate(ue,chs,txgrid);
Generating 128 slots corresponding to 1 transport block(s)
Постройте график заполненной сетки и наблюдайте за NPUSCH и соответствующим DM-RS. Положения NPUSCH и DM-RS зависят от количества поднесущих chs.NRUsc
и поднесущие, используемые в соответствии с chs.NBULSubcarrierSet
. Обратите внимание, что график ресурсной сетки использует уровни степени PUSCH и DM-RS, чтобы назначить цвета ресурсным элементам.
% Create an image of overall resource grid figure im = image(abs(txgrid)); cmap = parula(64); colormap(im.Parent,cmap); axis xy; title(sprintf('NB-IoT Uplink RE Grid (NRep = %d, NRUsc = %d, NRU = %d)',chs.NRep,chs.NRUsc,chs.NRU)) xlabel('OFDM symbols') ylabel('Subcarriers') % Create the legend box to indicate the channel/signal types associated with the REs reNames = {'NPUSCH';'DM-RS'}; clevels = round(db2mag([chs.NPUSCHPower chs.NPUSCHDRSPower])); N = numel(reNames); L = line(ones(N),ones(N), 'LineWidth',8); % Generate lines % Set the colors according to cmap set(L,{'color'},mat2cell(cmap( min(1+clevels,length(cmap) ),:),ones(1,N),3)); legend(reNames{:});
3GPP ТС 36.211 «Физические каналы и модуляция»
3GPP TS 36.212 «Мультиплексирование и канальное кодирование»
3GPP TS 36.213 «Процедуры физического слоя»
3GPP TS 36.321 "Управление доступом к среде (MAC); Спецификация протокола "
3GPP TS 36.331 "Управление радиоресурсами (RRC); Спецификация протокола "
3GPP TS 36.300 "Общее описание; Этап 2 "
О. Либерг, М. Сундберг, Я.-П. Wang, J. Bergman and J. Sachs, Cellular Internet of Things: Technologies, Standards and Performance, Elsevier, 2018.