Генерация сигналов восходящего канала NB-IoT

Этот пример показывает, как сгенерировать 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

В этом разделе приводится общее описание отображения 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].

Паз восходящего канала NB-IoT

В дополнение к распределению пазов, описанному выше, в этом разделе дополнительно поясняется распределение 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

В этом разделе вы конфигурируете параметры, необходимые для генерации 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

Генерация сигналов восходящего канала NB-IoT

В этом разделе вы создаете ресурсную сетку, заполненную 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{:});

Избранная библиография

  1. 3GPP ТС 36.211 «Физические каналы и модуляция»

  2. 3GPP TS 36.212 «Мультиплексирование и канальное кодирование»

  3. 3GPP TS 36.213 «Процедуры физического слоя»

  4. 3GPP TS 36.321 "Управление доступом к среде (MAC); Спецификация протокола "

  5. 3GPP TS 36.331 "Управление радиоресурсами (RRC); Спецификация протокола "

  6. 3GPP TS 36.300 "Общее описание; Этап 2 "

  7. О. Либерг, М. Сундберг, Я.-П. Wang, J. Bergman and J. Sachs, Cellular Internet of Things: Technologies, Standards and Performance, Elsevier, 2018.