exponenta event banner

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

В 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 для DL-SCH и PDSCH, показаны на приведенных ниже диаграммах.

Установка

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

% 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 функция. Процесс кодирования транспортного канала включает в себя следующие этапы, как показано на фиг.1 выше.

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

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

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

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

  • Предварительное кодирование: этап предварительного кодирования принимает матрицу M-by-Layers от этапа отображения уровня и возвращает матрицу размера M-by-P для передачи по P антеннам, как определено в TS 36.211 Раздел 6.3.4 [2]. Для одного порта (порта 0, 5, 7 или 8) этот этап является прозрачным, и для разнесения передачи предварительное кодирование применяется для 2 или 4 антенных портов. Предварительное кодирование для пространственного мультиплексирования зависит от того, используются ли антенные порты со специфичными для соты опорными сигналами (схемы передачи 'Mux', '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

Декодирование представляет собой обратную обработку физического общего канала нисходящей линии связи (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 также обеспечивает такую же функциональность. Эта функция также возвращается, транспорт типа-24A блокируют CRC, расшифровывающий результат, печатают-24B CRC набора блока кода, расшифровывающий результат, расшифровка процесса 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 ТС 36.213 «Процедуры физического уровня»

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

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