Main Content

Release 10 PUSCH Multiple Codeword Transmit and Receive Modeling

This example demonstrates the multicodeword transmission and reception in the uplink.

Introduction

This example shows how to implement multicodeword transmission and reception using LTE Toolbox™. This is done using Fixed Reference Channel (FRC) A3-2 as specified in TS36.104, Annex A3 [ 1 ]. The configuration is then amended to transmit two identically configured codewords.

Setup

This section sets the User Equipment (UE) configuration structure associated to FRC A3-2 and modifies it to use 2 codewords. The configuration for the two codewords is identical.

% Generate configuration for FRC A3-2
frc = lteRMCUL('A3-2');

% UE configuration
frc.TotSubframes = 1;   % Total number of subframes
frc.NTxAnts = 2;        % Number of transmit antennas

% Update Physical Uplink Shared Channel (PUSCH) configuration for 2
% identically configured codewords
frc.PUSCH.NLayers = 2;
frc.PUSCH.Modulation = repmat({frc.PUSCH.Modulation},1,2);
frc.PUSCH.RV = repmat(frc.PUSCH.RV,1,2);
frc.PUSCH.TrBlkSizes = repmat(frc.PUSCH.TrBlkSizes,2,1);

Encoding

This section sets up the transport blocks and the Uplink Control Information (UCI). This is then coded to generate the Uplink Shared Channel (UL-SCH). The diagram below shows the operations performed internally by lteULSCH.

PUSCH modulation is applied to the generated codewords.

% Set up the transport block sizes and data for both codewords
TBSs = frc.PUSCH.TrBlkSizes(:,frc.NSubframe+1); % transport block sizes
trBlks = {(randi([0 1], TBSs(1), 1)) (randi([0 1], TBSs(2), 1))}; % data

% Set up UCI contents
CQI = [1 0 1 0 0 0 1 1 1 0 0 0 1 1].';
RI  = [0 1 1 0].';
ACK = [1 0].';

% UL-SCH coding including UCI coding
cws = lteULSCH(frc,frc.PUSCH,trBlks,CQI,RI,ACK);

% PUSCH modulation
puschSymbols = ltePUSCH(frc,frc.PUSCH,cws);

Decoding

This section demodulates the PUSCH and applies channel decoding. The resulting UCI is then decoded to produce the received Channel Quality Indicator (CQI), Rank Indication (RI) and Acknowledgment (ACK).

% PUSCH demodulation
ulschInfo = lteULSCHInfo(frc,frc.PUSCH,TBSs,length(CQI),length(RI),...
            length(ACK),'chsconcat');    % Get UL-SCH information
llrs = ltePUSCHDecode(frc,ulschInfo,puschSymbols); % Decode PUSCH

% UL-SCH decoding
softBuffer = [];
[rxtrblks,crc,softBuffer] = lteULSCHDecode(frc,ulschInfo,TBSs,llrs,...
                            softBuffer);

% UCI decoding
[llrsData,llrsCQI,llrsRI,llrsACK] = lteULSCHDeinterleave(frc,ulschInfo,...
                                    llrs);
rxCQI = lteCQIDecode(ulschInfo,llrsCQI);    % Decode CQI
rxRI = lteRIDecode(ulschInfo,llrsRI);       % Decode RI
rxACK = lteACKDecode(ulschInfo,llrsACK);    % Decode ACK

Results

The decoded CRC for both codewords is displayed. The transmitted and received CQI, RI and ACK bits are also shown.

hULMulticodewordTxRxDisplayResults(crc,CQI,RI,ACK,rxCQI,rxRI,rxACK);
CRCs:
Codeword 1: 0
Codeword 2: 0

CQI:
transmitted: 1  0  1  0  0  0  1  1  1  0  0  0  1  1
received   : 1  0  1  0  0  0  1  1  1  0  0  0  1  1

RI:
transmitted: 0  1  1  0
received   : 0  1  1  0

ACK:
transmitted: 1  0
received   : 1  0

Appendix

This example uses this helper function.

Selected Bibliography

  1. 3GPP TS 36.104 "Base Station (BS) radio transmission and reception"