LTE DL-SCH и PDSCH Цепи обработки

В LTE совместно используемый канал нисходящей линии связи (DL-SCH) является транспортным каналом, используемым для передачи пользовательских данных, специализированной управляющей и специфической для пользователя информации более высокого слоя и информации о нисходящей системе. Физический совместно используемый канал нисходящей линии связи (PDSCH) является физическим каналом, который содержит кодированные данные DL-SCH. Этот пример показывает различные этапы, участвующие в обработке совместно используемого канала нисходящей линии связи (DL-SCH) и физического совместно используемого канала нисходящей линии связи (PDSCH), и обеспечивает доступ к данным этих промежуточных каскадов.

Введение

LTE Toolbox™ обеспечивает функции для моделирования физического слоя с различными уровнями гранулярности в диапазоне от функций уровня системы, которые могут генерировать полную форму волны восходящей и нисходящей линий связи, до функций уровня PHY канала, которые выполняют функции обработки транспортного/физического канала и отдельные функции стадии обработки канала, выполняющие кодирование CRC, турбокодирование и т.д. Эти функции с простым интерфейсом и легкостью параметризации помогают в быстром прототипировании стандартных совместимых моделей и поэтому полезны в самых разных приложениях. Преимущества рабочего процесса тестирования и верификации, используя отдельные этапы обработки канала, проиллюстрированные в этом примере, заключаются в следующем:

  • Используйте в качестве золотой ссылки для альтернативных реализаций

  • Простота создания статических или динамических тестовых векторов для получателя или оборудования модульного тестирования

  • Осмыслите обработку DL-SCH/PDSCH

Различные уровни гранулярности позволяют пользователям создавать модели с таким количеством доступа к промежуточным данным, сколько требуется, и генерировать большое количество форм волны или тестовых векторов для автоматической проверки. Для обработки и декодирования DL-SCH и PDSCH, тулбокс обеспечивает lteDLSCH, ltePDSCH, ltePDSCHDecode и lteDLSCHDecode. Это функции уровня канала, способные обрабатывать все каскады соответствующего транспортного или физического канала, как описано в TS 36.212 Раздел 5.3.2 [1] и TS 36.211 Раздел 6.4 [2]. Этот пример показывает, как использовать функции, выполняющие отдельные шаги обработки канала для кодирования DL-SCH и PDSCH и декодирования для случаев использования, когда требуется доступ к промежуточным значениям/этапам обработки. Различные этапы цепи обработки и функции, которые LTE Toolbox обеспечивает для DL-SCH и PDSCH, показаны на схемах ниже.

Setup

Функции, используемые в примере, требуют комбинации параметров всей ячейки и параметров конкретного канала. Это входные параметры функций как поля структур или как отдельные параметры.

% Cell-wide Settings
% The cell-wide parameters are grouped into a single structure enb. A
% number of the functions used in this example require a subset of the
% parameters specified below. In this example we use the configuration
% according to the RMC R.14 FDD specified in TS 36.101 Annex A.3.4 which
% uses 50 RB, 4 port, 'SpatialMux' transmission scheme, '16QAM' symbol
% modulation, 2 codewords and a code rate of 1/2.
enb.NDLRB = 50;                 % Number of resource blocks
enb.CellRefP = 4;               % Cell-specific reference signal ports
enb.NCellID = 0;                % Cell ID
enb.CyclicPrefix = 'Normal';    % Normal cyclic prefix
enb.CFI = 2;                    % Length of control region
enb.DuplexMode = 'FDD';         % FDD duplex mode
enb.TDDConfig = 1;              % Uplink/Downlink configuration (TDD only)
enb.SSC = 4;                    % Special subframe configuration (TDD only)
enb.NSubframe = 0;              % Subframe number

% Transport/Physical channel settings for ease of use the DL-SCH and PDSCH
% channel specific settings are specified in a parameter structure pdsch.
% For the R.14 FDD RMC, there are two codewords, so the modulation scheme
% is specified as a cell array containing the modulation schemes of both
% codewords. If configuring for one codeword, the modulation scheme can be
% a character vector or a cell array with character vectors.
% It is also important to configure the TrBlkSizes parameter to have the
% correct number of elements as the intended number of codewords. The
% number of soft bits for the rate matching stage is decided by the UE
% category as specified in TS 36.306 Table 4.1-1. In this example, the
% transport block size is looked up from tables in TS 36.101 Annex A.3.4.
% This can also be done by using the lteRMCDL function for R.14 RMC.

% DL-SCH Settings
TrBlkSizes = [11448; 11448];    % 2 elements for 2 codeword transmission
pdsch.RV = [0 0];               % RV for the 2 codewords
pdsch.NSoftbits = 1237248;      % No of soft channel bits for UE category 2
% PDSCH Settings
pdsch.TxScheme = 'SpatialMux';  % Transmission scheme used
pdsch.Modulation = {'16QAM','16QAM'}; % Symbol modulation for 2 codewords
pdsch.NLayers = 2;              % Two spatial transmission layers
pdsch.NTxAnts = 2;              % Number of transmit antennas
pdsch.RNTI = 1;                 % The RNTI value
pdsch.PRBSet = (0:enb.NDLRB-1)';% The PRBs for full allocation
pdsch.PMISet = 0;               % Precoding matrix index
pdsch.W = 1;                    % No UE-specific beamforming
% Only required for 'Port5', 'Port7-8', 'Port8' and 'Port7-14' schemes
if any(strcmpi(pdsch.TxScheme,{'Port5','Port7-8','Port8', 'Port7-14'}))
    pdsch.W = transpose(lteCSICodebook(pdsch.NLayers,pdsch.NTxAnts,[0 0]));
end

Обработка нисходящего общего канала (DL-SCH)

В этом разделе описывается кодирование транспортного канала DL-SCH. Один транспортный блок входит в цепочку обработки каждого запланированного субкадра (для пространственных схем мультиплексирования может быть два транспортных блока). Транспортные блоки кодируются и согласовываются по скорости с пропускной способностью канала PDSCH. Емкость PDSCH зависит от выделений PRB, схемы модуляции и схемы передачи, и это значение предоставляется как выход от ltePDSCHIndices функция. Процесс кодирования транспортного канала включает следующие этапы, как показано рисунок.

  • Вложение CRC транспортного блока: Выявление ошибок для транспортных блоков обеспечивается 24-разрядным CRC в соответствии с TS 36.212 Раздел 5.3.2.1 [1].

  • Сегментация кодового блока и присоединение кодового блока CRC: Как показано на рисунке 1 выше, сегментация кодового блока разделяет входной вектор данных на массив ячеек сегментов кодового блока (с битами-наполнителем и type-24B CRC, добавленным соответственно) согласно правилам TS 36.212, раздел 5.3.2.2 [1]. Функция lteDLSCHInfo предоставляет информацию о сегментации кодового блока для заданного размера блока.

  • Кодирование канала: Блоки кода индивидуально турбокодированы в соответствии с TS 36.212 Раздел 5.3.2.3 [1]. Турбокодер (lteTurboEncode) может обрабатывать массив ячеек, содержащий все сегменты кодовых блоков параллельно, и возвращает массив ячеек, содержащий отдельные сегменты турбокодированных блоков.

  • Согласование скорости и конкатенация кодовых блоков: Турбо-кодированные блоки затем индивидуально согласовываются в соответствии с TS 36.212 Раздел 5.3.2.4 [1], и полученные блоки согласованной скорости конкатенируются в соответствии с TS 36.212 Раздел 5.3.2.5 [1], чтобы создать одно кодовое слово для передачи на PDSCH.

% Random number initialization for creating random transport block(s)
rng('default');

% Convert the modulation scheme char array or cell array to string array
% for uniform processing
 pdsch.Modulation = string(pdsch.Modulation);

% Get the number of codewords from the number of transport blocks
nCodewords = numel(TrBlkSizes);

% Generate the transport block(s)
trBlk = cell(1,nCodewords); % Initialize the codeword(s)
for n=1:nCodewords
    trBlk{n} = randi([0 1],TrBlkSizes(n),1);
end
% Get the physical channel bit capacity required for rate matching from
% ltePDSCHIndices info output
[~,pdschInfo] = ltePDSCHIndices(enb,pdsch,pdsch.PRBSet);

% Define a structure array with parameters for lteRateMatchTurbo
chs = pdsch;
chs(nCodewords) = pdsch; % For 2 codewords, the array has two elements
% Initialize the codeword(s)
cw = cell(1,nCodewords);
for n=1:nCodewords
    % CRC addition for the transport block
    crccoded = lteCRCEncode(trBlk{n},'24A');
    % Code block segmentation returns a cell array of code block segments
    % with filler bits and type-24B CRC appended as required
    blksegmented = lteCodeBlockSegment(crccoded);
    % Channel coding returns the turbo coded segments in a cell array
    chencoded = lteTurboEncode(blksegmented);

    % Bundle the parameters in structure chs for rate matching as the
    % function requires both cell-wide and channel specific parameters
    chs(n).Modulation = pdsch.Modulation{n};
    chs(n).DuplexMode = enb.DuplexMode;
    chs(n).TDDConfig = enb.TDDConfig;
    % Calculate number of layers for the codeword
    if n==1
        chs(n).NLayers = floor(pdsch.NLayers/nCodewords);
    else
        chs(n).NLayers = ceil(pdsch.NLayers/nCodewords);
    end
    % Rate matching returns a codeword after sub-block interleaving, bit
    % collection and bit selection and pruning defined for turbo encoded
    % data and merging the cell array of code block segments
    cw{n} = lteRateMatchTurbo(chencoded,pdschInfo.G(n),pdsch.RV(n),chs(n));
end

Обработка физического нисходящего общего канала (PDSCH)

Один или два блока транспортного кодирования (кодовые слова) могут передаваться одновременно на PDSCH в зависимости от используемой схемы передачи (см. раздел 6.4 [2] TS 36.211). Как показано рисунок выше, кодовые слова подвергаются скремблированию, модуляции, отображению слоя, предварительному кодированию, необязательному формированию луча UE и отображению ресурсного элемента. Размер матрицы precoded является N-на-P, причем N является количеством символов модуляции для одного порта антенны и P является количеством передающих антенн.

  • Скремблирование: До двух кодовых слов могут передаваться в подкадре, и для каждого кодового слова биты скремблируются с другой скремблирующей последовательностью в соответствии с TS 36.211 Раздел 6.3.1 [2]. Скремблирующая последовательность инициализируется в начале каждого субкадра и зависит от RNTI, NCellID, NSubframe и индекс кодового слова.

  • Модуляция: Скремблированное кодовое слово (и) затем модулируется как символ с помощью одной из схем модуляции ('QPSK', '16QAM', '64QAM' или '256QAM')

  • Отображение слоев: Комплексные модулированные символы затем отображаются на один или несколько слоев в соответствии с используемой схемой передачи (TS 36.211, раздел 6.3.3 [1]). Для одного порта (порт 0, 5, 7 или 8) используется один слой. Для разнесения передачи разрешено только одно кодовое слово, и количество слоев (2 или 4) должно равняться количеству портов антенны, используемых для передачи физического канала. Для пространственного мультиплексирования 1 или 2 кодовых слова могут передаваться на до 8 слоях. Количество слоев меньше или равно количеству портов антенны, используемых для передачи физического канала.

  • Предварительное кодирование: Этап предварительного кодирования принимает в матрице M-на-Слоях со стадии отображения слоя и возвращает матрицу размера M-на-P для передачи на P-антеннах, как определено в TS 36.211 Раздел 6.3.4 [2]. Для одного порта (порт 0, 5, 7 или 8) этот каскад прозрачен, и для разнесения передачи предварительное кодирование применяется для 2 или 4 портов антенны. Предварительное кодирование для пространственного мультиплексирования зависит от того, имеют ли порты антенны со специфическими для ячейки опорными сигналами ('SpatialMux', 'CDD' и 'MultiUser' схемы передачи) или порты антенны с специфичными для UE опорными сигналами ('Port5', 'Port7-8', 'Port8' и 'Port7-14

  • Отображение с ресурсными элементами: Комплексные модулированные символы затем сопоставляются с ресурсными элементами, как определено в TS 36.211 Раздел 6.3.5 [2], чтобы создать сетку для передачи. Этот этап не показан в этом примере, но может быть легко выполнен путем создания пустой ресурсной сетки с помощью lteDLResourceGrid и сопоставление символов с элементами ресурса, возвращенными ltePDSCHIndices функция.

% Initialize the modulated symbols
modulated = cell(1,nCodewords);
for n=1:nCodewords
   % Generate the scrambling sequence
   scramseq = ltePDSCHPRBS(enb,pdsch.RNTI,n-1,length(cw{n}));
   % Scramble the codewords
   scrambled = xor(scramseq,cw{n});
   % Symbol modulate the scrambled codewords
   modulated{n} = lteSymbolModulate(scrambled,pdsch.Modulation{n});
end
% Layer mapping results in a (symbols per layer)-by-NLayers matrix
layermapped = lteLayerMap(pdsch,modulated);
% Precoding results in a (symbols per antenna)-by-NTxAnts matrix
precoded = lteDLPrecode(enb, pdsch, layermapped);
% Apply beamforming optionally (W should be 1 or identity if no beamforming)
pdschsymbols = precoded*pdsch.W;

Декодирование PDSCH

Декодирование является обратной обработкой Physical Nowlink Shared Channel (PDSCH) на матрице сложных модулированных символов PDSCH, в зависимости от структуры настроек всей ячейки enb и специфическую для канала структуру строения pdsch. Обратная обработка канала включает в себя дескремблирование, демпфирование слоя и разделение кодового слова, мягкую демодуляцию и дескремблирование. Амортизация выполняется с использованием матричной псевдоинверсии матриц предварительного кодирования. Для приложений, связанных с каналами распространения и/или шумом, оценка и эквализация канала выполняются на принятых символах перед декодированием. См. ltePDSCHDecode для получения дополнительной информации.

% Deprecoding (pseudo-inverse based) returns (Number of symbols)-by-NLayers matrix
if (any(strcmpi(pdsch.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'})))
    rxdeprecoded=pdschsymbols*pinv(pdsch.W);
else
    rxdeprecoded = lteDLDeprecode(enb,pdsch,pdschsymbols);
end
% Layer demapping returns a cell array containing one or two codewords. The
% number of codewords is deduced from the number of modulation scheme
% character vectors
layerdemapped = lteLayerDemap(pdsch,rxdeprecoded);

% Initialize the recovered codewords
cws = cell(1,nCodewords);
for n=1:nCodewords
    % Soft demodulation of received symbols
    demodulated = lteSymbolDemodulate(layerdemapped{n},pdsch.Modulation{n},'Soft');
    % Scrambling sequence generation for descrambling
    scramseq = ltePDSCHPRBS(enb,pdsch.RNTI,n-1,length(demodulated),'signed');
    % Descrambling of received bits
    cws{n} = demodulated.*scramseq;
end

Декодирование DL-SCH

Декодирование совместно используемого канала нисходящей линии связи (DL-SCH) включает в себя восстановление скорости, турбодекодирование, конкатенацию блоков и вычисление CRC. Кроме того, функция lteDLSCHDecode также обеспечивает ту же функциональность. Эта функция также возвращает результат декодирования CRC транспортного блока type-24A, результат декодирования CRC набора кодовых блоков type-24B состояние декодирования HARQ процесса и обеспечивает параметризацию для определения начального состояния процесса HARQ.

% Initialize the received transport block and CRC
rxTrBlk = cell(1,nCodewords);
crcError = zeros(1,nCodewords);
for n=1:nCodewords
    % Rate recovery stage also allows combining with soft information for
    % the HARQ process, using the input cbsbuffers. For the first
    % transmission of the transport block, the soft buffers are initialized
    % as empty. For retransmissions, the parameter cbsbuffers should be the
    % soft information from the previous transmission
    cbsbuffers = [];  % Initial transmission of the HARQ process
    % Rate recovery returns a cell array of turbo encoded code blocks
    raterecovered = lteRateRecoverTurbo(cws{n},TrBlkSizes,pdsch.RV(n),chs(n),cbsbuffers);
    NTurboDecIts = 5; % Number of turbo decoding iteration cycles
    % Turbo decoding returns a cell array of decoded code blocks
    turbodecoded = lteTurboDecode(raterecovered,NTurboDecIts);
    % Code block desegmentation concatenates the input code block segments
    % into a single output data block, after removing any filler and
    % type-24B CRC bits that may be present
    [blkdesegmented,segErr] = lteCodeBlockDesegment(turbodecoded,(TrBlkSizes+24));
    % CRC decoding returns the transport block after checking for CRC error
    [rxTrBlk{n},crcError(n)] = lteCRCDecode(blkdesegmented,'24A');
end

Заключение

Этот пример объяснил обработку совместно используемого канала нисходящей линии связи (DL-SCH) и физического общего канала нисходящей линии связи (PDSCH) и дал представление о различных функциях, доступных в LTE Toolbox для поддержки этих каналов. Пример также проиллюстрировал, как низкоуровневые функции могут использоваться для моделирования каналов, и этот подход может использоваться в приложениях, включая генерацию золотого эталонного тестового вектора из этих промежуточных этапов обработки, чтобы независимо подтвердить различные этапы обработки альтернативных реализаций. В этом примере также показано, как платформа LTE Toolbox и MATLAB позволяет создать мощное окружение для верификации и тестирования больших шкал.

Дальнейшие исследования

Можно изменить параметры, представленные в этом примере, чтобы экспериментировать с различными строениями. Для, например, при симуляции для различных режимов передачи, некоторыми из интересующих параметров являются схема передачи (TxScheme), схема модуляции (Modulation), количество кодовых слов (количество элементов TrBlkSizes).

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

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

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

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

  4. 3GPP TS 36.101 «Радиопередача и прием пользовательского оборудования (UE)»

  5. 3GPP TS 36.306 «Возможности радиодоступа пользовательского оборудования (UE)»