В 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. Один транспортный блок входит в цепочку обработки каждого запланированного подкадра (для схем пространственного мультиплексирования может быть два транспортных блока). Транспортные блоки кодируются и скорость передачи согласовывается с пропускной способностью битов канала 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 в зависимости от используемой схемы передачи (см. 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, в зависимости от общеячеечной структуры настроек. 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) включает в себя восстановление скорости, турбодекодирование, конкатенацию блоков и вычисления 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).
3GPP TS 36.212 «Мультиплексирование и канальное кодирование»
3GPP ТС 36.211 «Физические каналы и модуляция»
3GPP ТС 36.213 «Процедуры физического уровня»
3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»
3GPP TS 36.306 «Возможности радиодоступа пользовательского оборудования (UE)»