Chapter 7

Link Adaptation

So far we have studied the modulation, coding, scrambling, channel-modeling, multicarrier, and multi-antenna transmission schemes used in the LTE (Long Term Evolution) standard. We have examined in detail multiple MIMO (Multiple Input Multiple Output) transmission modes, the best operating condition for each mode, and the peak data rates achievable for the system. We have not yet examined the mechanisms involved in the transition between various transmission modes or the criteria for these changes. In this chapter, we will overview the dynamic nature of the LTE standard and the way in which it chooses various parameters in order to optimize the spectral efficiency in time-varying channel conditions.

Spectral efficiency is an important measure used to evaluate the performance of mobile communications systems. The LTE standard, for example, has specific requirements in terms of average, cell-edge, and overall spectral efficiency relative to 3G (third-generation) standards 1. Spectral efficiency is defined as the average data rate per bandwidth unit (Hz) per cell. This definition by itself reveals the tradeoffs involved in designing mobile systems. For a given bandwidth allocation, you can increase the spectral efficiency by augmenting the data rate through the use of higher-order modulation or higher-dimension MIMO techniques; in noisy channel conditions, however, such a selection may increase the probability of error and thus have a detrimental effect on the effective throughput.

In order to achieve the desired spectral efficiencies consistently, the 3G and 4G standards, including the LTE, employ techniques that dynamically change system parameters based on channel conditions. These techniques are generally known as channel-aware scheduling or link adaptations.

The basic idea of link adaptation is to adapt certain transmission parameters to varying channel conditions as they are monitored and measured by the system. Typical system parameters that are dynamically adapted include the system bandwidth, MIMO transmission modes, the number of transmission layers, the precoding matrix, Modulation and Coding Schemes (MCSs), and transmission power. With proper selection of these system parameters, we can exploit bandwidth resources more effectively instead of using a fixed parameter set that provides the best performance only in a worst-case channel condition.

In this chapter, we will first review various measurement made in the mobile receiver in order to ascertain the channel conditions as a function of time. These include Channel Quality Indicator (CQI), Precoder Matrix Indicator (PMI), and Rank Indicator (RI) measurements. Then we will discuss adaptation techniques that respond to channel measurements and change various system parameters to maintain a given measure of quality. These include adaptations of MCS, adaptive precoding in closed-loop spatial multiplexing modes, and adaptive MIMO based on rank estimation. Finally, we will provide a short overview of PUCCH (Physical Uplink Control Channel) and PDCCH Physical Downlink Control Channel, which enable communication of the channel measurements and adaptive scheduling between the UE (User Equipment; the mobile terminal) and the eNodeB (enhanced Node Base station).

7.1 System Model

Link adaptation is all about adapting to the channel conditions and changing system parameters based on actual channel quality. The LTE standard enables link adaptations that can help us make use of the spectrum more efficiently. The cost associated with this adaptation is the additional computational complexity involved in implementing link-aware schedulers. Figure 7.1 illustrates the typical operations involved in link adaptation, which are subdivided into downlink and uplink operations.

Figure 7.1 Sequence of downlink and uplink operations involved in link adaptations

c07f001

The series of operations performed in a typical link adaptation scenario can be summarized as follows:

1. At subframe (n), the downlink transmitter forms the resource grid from the user data (PDSCH, Physical Downlink Shared Channel) and the Downlink Control Information, DCI (the PDCCH). The DCI contains the scheduling assignments that help the mobile receiver correctly decode the subframe information. The information contained in the PDCCH includes the MCSs, the precoder matrix, rank information, and the MIMO mode used.
2. The mobile receiver can then perform the critical step of channel condition measurement as part of the process of decoding the received resource grid. In this process, it estimates the received channel matrix and performs various channel quality measurements. These measurements include the CQI, the PMI, and the RI.
3. As part of uplink transmission, the mobile (UE) transmitter may embed the channel quality measures within the PUCCH and transmit to the base station (eNodeB) as a closed-loop feedback mechanism.
4. The base station (eNodeB) receiver can then decode the PUCCH information to obtain channel measurements. Having this information available enables the system scheduler to decide whether or not to adapt various system parameters in the next frame as a result of feedback received from downlink channel quality.
5. At the base station (eNodeB) in the downlink transmitter operations for the next subframe (n + 1), the scheduling decisions based on channel conditions are encoded into the PDCCH information and transmitted to the mobile. These include the new MCSs, precoder matrix, rank information, and MIMO mode that are now adapted based on the actual channel quality in the last subframe (n). This full feedback process is then repeated for each subframe.

7.2 Link Adaptation in LTE

To enable dynamic changes to MCSs and for proper operation of MIMO schemes, the LTE standard provides mechanisms that enable information regarding the channel characteristics to be measured by the mobile unit (UE). This information is then fed back to the base station (eNodeB) to help with scheduling and link adaptation.

At the mobile receiver, three types of channel-state report are generated and transmitted to the base station:

1. The CQI, a measure of downlink radio channel quality that specifies the best modulation constellation and coding rate to match the link quality.
2. The PMI, a measure that indicates the best set of precoding matrices for use in closed-loop single- and multi-user spatial multiplexing modes of the LTE standard.
3. The RI, which signals the number of useful transmission layers that can be used by the transmitter in spatial multiplexing modes.

Next we will discuss each of these reports in detail and provide an overview of various methodologies used in computing these measures.

7.2.1 Channel Quality Estimation

The CQI report gives a measure of the mobile radio channel quality. It provides a recommendation concerning the best MCS for the communication channel. The value of this measure is computed such that the transport block error rate using this recommendation will not exceed 10%. The higher the value of the CQI measure, the higher the modulation order and the higher the coding rate. There are two types of CQI report, based on their granularity: a wideband CQI report assigns a single MCS value for the whole system bandwidth, while a subband CQI report assigns multiple MCS values to different contiguous resource blocks.

There are many formulations for optimal MCS selection in the literature 2–6. Most of these techniques select the best MCS as a function of the post-detection SINR (Signal-to-Interference and Noise Ratio) measure. This measure is selected such that the Packet Error Rate (PER) experienced in the transmission is less than a given target. This in turn allows the system to avoid frequent retransmissions. The best MCS recommendation can ultimately be selected by quantizing the SINR value using a codebook lookup table 2.

7.2.2 Precoder Matrix Estimation

The PMI report provides a preferred precoding codebook index for use in closed-loop spatial multiplexing of downlink transmission. Like CQI reports, a PMI report can be a single wideband value or multiple subband values. Multiple approaches to PMI selection are discussed in the literature. A summary of typical selection criteria is presented in Reference 7. These criteria differ based on the metrics that are optimized. Approaches to optimal selection include minimization of singular values and minimization of the Mean Squared Error (MSE) or the capacity.

7.2.3 Rank Estimation

The rank estimation measure (RI) denotes the number of transmission layers or independent data streams for a spatial multiplexing system. Multiple approaches to estimating the rank of the channel matrix are available in the literature, with differing profiles of performance and complexity. Some of these approaches 8 perform the selection based on the post-detection SINR, the same measure used for the MCS selection. Others maximize the mutual information between the transmitted and post-detection signals and therefore directly maximize the capacity 11. Another, less complex technique exploits the eigenvalues of the channel matrix 7.

7.3 MATLAB® Examples

In this section, we review various MATLAB algorithms used to generate channel-state reports in the receiver. As receiver operations are not specified in the standard, our guiding principles in choosing these algorithms are reasonable computational complexity and suitability for the single-user case. The algorithms featured here provide a starting point and showcase a general framework for the implementation of channel-state measurements and link adaptations of the LTE PHY (Physical Layer) model in MATLAB.

7.3.1 CQI Estimation

The two MATLAB functions in this section implement the channel quality estimation (CQI) measure based on the SINR of the MIMO receiver output and the transmitted signal. The CQI estimation is performed in two steps:

1. SINR estimation: The SINR measure is computed as a function of the decoded bits in the receiver and the MIMO receiver output
2. Spectral efficiency lookup: The computed SINR values are mapped to a spectral efficiency measure defined as the product of the number of modulated bits per symbol and the coding rate. For each SINR measure, distinct modulation schemes and coding rates are found through a table lookup.

7.3.1.1 SINR Estimation

Let us define G as the optimum equalizer that transforms the received signal Y(n) into the equalized signal c07-math-0001 as the best linear estimate of the transmitted signal c07-math-0002. The error signal c07-math-0003 is then expressed as:

7.1 c07-math-0004

For the CQI estimation, we compute a very simplified approximation of the SINR measure, defined as the ratio of the transmitted signal power c07-math-0005 to the error signal power c07-math-0006.

7.2 c07-math-0007

The following function (CQIselection.m) computes the SINR measure, taking as inputs the decoded bits at the receiver (bits), the post-detection MIMO receiver output (equalized), the current subframe number (nS), and the PDSCH and DLSCH (Downlink Shared Channel Processing) parameter structures (prmLTEDLSCH, prmLTEPDSCH). The function output (sinr) is the SINR estimate. Note that to compute the SINR we need the best estimate of the transmitted signal c07-math-0008, which is denoted by the variable modOut in the function. The function computes this signal by operating on the decoded bits at the receiver (input variable bits). The receiver output bits are best estimates of the transmitted input bits in every subframe. We have used this signal throughout this book to compute and monitor the bit-error rate of the system. The function applies the first few functions of the transmitter on this signal in order to compute the best estimate of the modulated signal. These operations are CRC (Cyclic Redundancy Check) attachment, channel coding, scrambling, and modulation. Finally, it computes the SINR measure, as defined by Equation 7.2.


Algorithm
MATLAB function
function sinr=CQIselection(bits, equalized,  nS, prmLTEDLSCH, prmLTEPDSCH)
%#codegen
tbCrcOut1 =CRCgenerator(bits);
% Channel coding includes - CB segmentation, turbo coding, rate matching,
% bit selection, CB concatenation - per codeword
data = lteTbChannelCoding(tbCrcOut1, nS, prmLTEDLSCH, prmLTEPDSCH);
%Scramble codeword
scramOut = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
% Modulate
modOut = Modulator(scramOut, prmLTEPDSCH.modType);
error=modOut-equalized;
sinr=10*log10(var(modOut)./var(error));

7.3.1.2 Spectral Efficiency Lookup

The following function implements a transformation that maps the SINR estimate (input variable sinr) to the proposed modulation scheme and the coding rate (output variables Ms and Cr, respectively). Using a 4 bit (16-interval) scalar quantizer, we first map the SINR values to a CQI index. The dsp.ScalarQuantizerEncoder System object of the DSP System Toolbox is used here to perform the mapping operation. The threshold values correspond to the boundary points of the scalar quantizer. Since the quantizer is defined as unbounded (input values have a range from −inf to +inf), only 15 threshold values are needed to subdivide the real axis into 16 regions represented by four CQI bits. The threshold values mapping the SINR values to the spectral efficiency are based on a simple lookup table 9.


Algorithm
MATLAB function
function [Ms, Cr]=CQI2indexMCS(sinr)
%#codegen
% Table of SINR threshold values, 15 boundary points for an unbounded quantizer
thresh=[-6.7,-4.7,-2.3,0.2,2.4,4.3,5.9,8.1,10.3,11.7,14.1,16.3,18.7,21,22.7];
% Table of coding rate (16 value)
Map2CodingRate=[0.076, 0.076, 0.117, 0.188, 0.301, 0.438, 0.588, 0.369, 0.479,
0.602, 0.455, 0.554, 0.650, 0.754, 0.853, 0.926];
% Table of modulation type (1=QPSK, 2=QAM16, 3=QAM64)
Map2Modulator=[1*ones(7,1);2*ones(3,1);3*ones(6,1)];
persistent hQ
if isempty(hQ)
    hQ=dsp.ScalarQuantizerEncoder(
        'Partitioning', 'Unbounded',
        'BoundaryPoints',  thresh,
        'OutputIndexDataType','uint8');
end;
indexCQI=step(hQ, sinr);
index1=indexCQI+1;                   % 1-based indexing
% Map CQI index to modulation type
Ms = Map2Modulator (index1);
% Map CQI index to coding rate
Cr = Map2CodingRate (index1);
if Cr < 1/3, Cr=1/3;end;

In order to compute the modulation scheme (Ms) and the coding rate (Cr) outputs, we perform a table lookup operation with the CQI index. For the first seven values of the CQI index (indices 0–6), we map to a QPSK (Quadrature Phase Shift Keying) modulation with a modulation rate of 2 bits per symbol. The next three CQI indices (7, 8, and 9) are mapped to the 16QAM (Quadrature Amplitude Modulation) modulator with a modulation rate of 4 bits per symbol. Finally, the last six CQI indices (10–15) are mapped to 64QAM with a 6-bits-per-symbol modulation rate. Technically, the CQI index 0 signals an out-of-range message and does not participate in modulation mapping. For simplicity, we include this index in our MATLAB function with the QPSK set. Note also that the 16 mapping values for the coding-rate (Cr) mapping of spectral efficiency measures to modulation and coding rates are specified by the LTE standard document 10. The combined information is provided in Table 7.1.

Table 7.1 Lookup table for mapping SINR estimate to modulation scheme and coding rate

c07-tab-0001

7.3.2 PMI Estimation

The MATLAB function in this section implements a PMI codebook index selection. It employs the Minimum Mean Squared Error (MMSE) criterion to calculate as the output (cbIdx) the PMI codebook index per subframe. The input arguments of the function include the 3D channel matrix at the receiver (h), a Boolean signal indicating whether or not PMI closed-loop feedback is performed (enPMIfback), the number of transmit antennas (numTx), the number of layers (that is to say, the number of operational transmit antennas with sufficient rank) (numLayers), and the noise variance (nVar). If the PMI closed-loop feedback is turned off, the function has as output a constant value of 1 for the codebook index. Otherwise, it computes a single codebook index for each subframe by minimizing a distance measure.


Algorithm
MATLAB function
function cbIdx = PMICbSelect(h, enPMIfback, numTx, numLayers, nVar)
%#codegen
% Codebook selection using minimum MSE criterion
if (enPMIfback)
    if (numTx == 2)
        cbLen = 2; % Only indices 1 and 2 are used for 2-layer closed-loop Spatial MUX
        MSEcb = zeros(cbLen, 1);
        for cbIdx = 1:cbLen
            Wn = PrecoderMatrix(cbIdx, numTx, numLayers);
            MSEcb(cbIdx) = Sinr_MMSE(h, nVar, Wn);
        end
        [˜, cbIdx] = min(MSEcb); % 0-based, note 0 and 3 are not used
    else % for numTx=4
        cbLen = 2^numLayers;
        MSEcb = zeros(cbLen, 1);
        for cbIdx = 1:cbLen
            Wn = PrecoderMatrix(cbIdx-1, numTx, numLayers);
            MSEcb(cbIdx) = Sinr_MMSE(h, nVar, Wn);
        end
        [˜, cbIdx] = min(MSEcb);   % 1-based
        cbIdx = cbIdx-1;        % 0-based
    end
else
    cbIdx = 1;
end
end
% Helper function
function out = Sinr_MMSE(chEst, nVar, Wn)
%#codegen
% post-detection SNR computation
% Based on received channel estimates
% Per layer noise variance
% Precoder matrix
% Uses the MMSE detector.
% Get params
persistent Gmean
if isempty(Gmean), Gmean=dsp.Mean('RunningMean', true);end
noisFac = diag(nVar);
numData = size(chEst, 1);
numLayers = size(Wn,1);
F = inv(Wn);
%% MMSE receiver
for n = 1:numData
    h = chEst(n, :, :);                         % numTx x numRx
    h = reshape(h(:), numLayers, numLayers).';  % numRx x numTx
    Ht= inv((F'*(h'*h)*F) + noisFac);
    % Post-detection SINR
    g=real((1./(diag(Ht).*(nVar.')))-1);
    Gamma=step(Gmean,g);
end
out=mean(Gamma);
reset(Gmean);
end

The measure chosen here is the MSE between the post-detection MIMO receiver estimate and the transmitted modulator. This measure is formulated as a quadratic form involving the MIMO channel matrix and the precoder matrix. Each precoder matrix is computed by iterating through all PMI codebook entries; in other words, through a full search. This measure is computed for each codebook index and for each time sample (first dimension) of the 3D channel matrix. The codebook index that minimizes the MSE measure is the selected codebook index output. Note that for a four-antenna transmission, we have to search through 16 codebook indices, and for a two-antenna case, a subset of a codebook represented by a 2 bit index.

7.3.3 RI Estimation

The MATLAB function in this section implements an RI estimation algorithm based on the condition number of the channel matrix. The condition number is defined as the ratio of maximum and minimum eigenvalues of the channel matrix. It is a good indicator of the accuracy of matrix inversion and of the availability of a solution for a system of linear equation. Condition number values near 1 indicate a well-conditioned matrix, whereas very high values indicate an ill-conditioned matrix, for which the system of linear equations associated with the measure cannot be solved. A simple call to the cond function in MATLAB provides us access to a numerically reliable condition number for the channel matrix.


Algorithm
MATLAB function
function y = RIestimate(Q)
%#codegen
y=cond(Q);   % Condition number of a matrix

The rank estimation operation must be performed in the receiver on each 2D channel matrix. This 2D matrix is a sample of the 3D channel matrix computed at each sample time (the first dimension). Therefore, the best place to perform the operation is within the for loop of MIMO receiver operation, where we iterate through the first dimension of the 3D channel matrix to compute the post-detection MIMO receiver output sample by sample. As a result, we need to modify our MIMO receiver functions to include the rank estimation within the body of the function and to provide the estimates as an additional output.

7.3.3.1 RI Computation in MIMO Receiver Functions

The following MIMO receiver functions have been updated to include the rank estimation within their processing loop. In Chapter 6, we developed three different MIMO receivers based on either a Zero-Forcing (ZF), an MMSE, or a Sphere Decoder (SD) algorithm.

The following function computes the RI estimate sample by sample inside the ZF MIMO receiver. The rank estimation output (ri) is a column vector composed of all condition numbers computed for MIMO channels, with one value per sample of post-detection receiver output (y).


Algorithm
MATLAB function
function  [y, ri]  = MIMOReceiver_ZF(in, chEst, Wn)
%#codegen
% MIMO Receiver:
%   Based on received channel estimates, process the data elements
%   to equalize the MIMO channel. Uses the ZF detector.
% Get params
numData = size(in, 1);
y = complex(zeros(size(in)));
ri=zeros(numData,1);
iWn = inv(Wn);
%% ZF receiver
for n = 1:numData
    h = squeeze(chEst(n, :, :)); % numTx x numRx
    h = h.';                     % numRx x numTx
   ri(n) = RIestimate(h);
    Q = inv(h);
    x = Q * in(n, :).';%#ok
    tmp = iWn * x; %#ok
    y(n, :) = tmp.';
end

Similarly, the following function computes the RI estimator output (ri) sample by sample inside the MMSE MIMO receiver. The rank estimation output (ri) is a column vector composed of all condition numbers computed for MIMO channels, with one value per sample of post-detection receiver output (y).


Algorithm
MATLAB function
function [y, ri] = MIMOReceiver_MMSE(in, chEst, nVar, Wn)
%#codegen
% MIMO Receiver:
%   Based on received channel estimates, process the data elements
%   to equalize the MIMO channel. Uses the MMSE detector.
% Get params
numLayers = size(Wn,1);
% noisFac = numLayers*diag(nVar);
noisFac = diag(nVar);
numData = size(in, 1);
y = complex(zeros(size(in)));
ri=zeros(numData,1);
iWn = inv(Wn);
%% MMSE receiver
for n = 1:numData
    h = chEst(n, :, :);                         % numTx x numRx
    h = reshape(h(:), numLayers, numLayers).';  % numRx x numTx
    ri(n) = RIestimate(h);
    Q = (h'*h + noisFac)h';
    x = Q * in(n, :).';
    tmp = iWn * x; %#ok
    y(n, :) = tmp.';
end

Finally, the following function computes the RI estimator output (ri) sample by sample inside the sphere-decoder MIMO receiver. The rank estimation output (ri) is a column vector composed of all condition numbers computed for MIMO channels, with one value per sample of post-detection receiver output (y).


Algorithm
MATLAB function
function [y, ri, bittable] = MIMOReceiver_SphereDecoder(in, chEst, prmLTE, nVar, Wn)
%#codegen
% MIMO Receiver:
%   Based on received channel estimates, process the data elements
%   to equalize the MIMO channel. Uses the Sphere detector.
% Soft-Sphere Decoder
symMap=prmLTE.SymbolMap;
numBits=prmLTE.Qm;
constell=prmLTE.Constellation;
bittable = de2bi(symMap, numBits, 'left-msb');
iWn=Wn.';
nVar1=(-1/mean(nVar));
ri=zeros(numData,1);
persistent SphereDec
if isempty(SphereDec)
    % Soft-Sphere Decoder
    SphereDec = comm.SphereDecoder('Constellation', constell,
        'BitTable', bittable, 'DecisionType', 'Soft');
end
% SSD receiver
temp = complex(zeros(size(chEst)));
% Account for precoding
for n = 1:size(chEst,1)
    h= squeeze(chEst(n, :, :));
    temp(n, :, :) = iWn * h;
     ri(n) = RIestimate(h);
end
hD = temp;
y = nVar1 * step(SphereDec, in, hD);

The following function uses a threshold approach to update the transmission mode as a function of an average rank estimation measure.


Algorithm
MATLAB function
function  y=RIselection(ri, threshold)
Ri=mean(ri);
% RI estimation
if Ri > threshold, y = 4; else y=2; end

7.4 Link Adaptations between Subframes

In Sections 7.5–7.8, we look at various ways of using the Channel-State Information (CSI: CQI, PMI, and RI estimates) to adapt various transceiver parameters in successive subframes. In this section we highlight what can be regarded as some very simple scheduling scenarios. These algorithms are meant to provide a framework for the implementation of adaptation algorithms in MATLAB. In most realistic implementations, however, scheduling decisions are based on algorithms that take into account a variety of factors, including the CSI, quality of service, and type of data being transmitted.

In the following link adaptation exercises, we let the channel-estimate measures directly affect the scheduled system parameters of the following subframe. In all cases we apply a given adaptation to all resource blocks of the following subframe. This is known as a wideband adaptation. Alternatively, the LTE standard allows different adaptations to be set to different resource blocks in each subframe. This is known as a subband adaptation. In order to reduce the complexity of the algorithm, subband adaptations are not featured in this chapter.

Next, we show four types of adaptation applied to a single-codeword closed-loop spatial multiplexing system (single-codeword model for LTE transmission mode 4). We will first show an adaptive modulation and then an adaptive modulation and coding mechanism by using the CQI measure. Then we will combine adaptive modulation and coding with adaptive precoder selection based on the PMI measure. Finally, we will combine all adaptations by adding adaptive layer mapping using the RI measure.

7.4.1 Structure of the Transceiver Model

The following MATLAB script is the testbench calling the MIMO transceiver function. First it calls the initialization function (commlteMIMO_initialize) to set all the relevant parameter structures (prmLTEDLSCH, prmLTEPDSCH, prmMdl), then it uses a while loop to perform subframe processing by calling the MIMO transceiver function.


Algorithm
MATLAB script
% Script for MIMO LTE (mode 4)
%
% Single codeword transmission
%
clear functions
%% Set simulation parameters & initialize parameter structures
commlteMIMO_ params;
[prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_initialize(txMode, 
    chanBW, contReg, modType, Eqmode,numTx, numRx,cRate,maxIter, fullDecode,
chanMdl, Doppler, corrLvl, 
    chEstOn, numCodeWords, enPMIfback, cbIdx, snrdB, maxNumErrs, maxNumBits);
clear txMode chanBW contReg modType Eqmode numTx numRx cRate maxIter
fullDecode chanMdl Doppler corrLvl chEstOn numCodeWords enPMIfback cbIdx snrdB
maxNumErrs maxNumBits
%%
disp('Simulating the LTE Mode 4: Multiple Tx & Rx antennas with Spatial Multiplexing');
zReport_data_rate(prmLTEPDSCH, prmLTEDLSCH);
hPBer = comm.ErrorRate;
snrdB=prmMdl.snrdB;
maxNumErrs=prmMdl.maxNumErrs;
maxNumBits=prmMdl.maxNumBits;
%% Simulation loop
nS = 0; % Slot number, one of [0:2:18]
Measures = zeros(3,1); %initialize BER output
while (Measures(3) < maxNumBits)
    % Insert one subframe step processing
    %% including adaptations here
end
BER=Measures(1);
BITS=Measures(3);

Note that we have left the body of the while loop as a placeholder. In this script, in place of commented lines that read “Insert one subframe step processing including adaptations here,” we will place three different code segments that implement the three different adaptation scenarios.

7.4.2 Updating Transceiver Parameter Structures

The following function implements the adaptation mechanism by updating the three parameter structures (prmLTEDLSCH, prmLTEPDSCH, prmMdl) used in transceiver models. It takes as input the initial parameter structures (given as input arguments p1, p2, and p3) and a variable number of additional input arguments. As output it generates the updated parameter structures.

If only one more input argument is given besides the parameter structures (p1, p2, and p3), we update the modulation scheme by setting the (modType) parameter. If two additional input arguments are given, the first updates the modulation scheme and the second updates the coding rate (cRate). So far we have only used the CQI measures for adaptive modulation and coding. With three additional input arguments, besides updating modType and cRate we also adapt the PMI codebook index (cbIdx). Finally, by providing four additional input arguments we adapt all parameters, including the final one (txMode), which determines whether we are using a spatial-multiplexing mode (txMode = 4) or a transmit-diversity mode (txMode = 2).


Algorithm
MATLAB function
function [p1, p2, p3] = commlteMIMO_update(p1,p2, p3, varargin)
switch nargin
    case 1, modType=varargin{1}; cRate=p2.cRate; cbIdx=p3.cbIdx; txMode=p1.txMode;
    case 2, modType=varargin{1}; cRate=varargin{2}; cbIdx=p3.cbIdx; txMode=p1.txMode;
    case 3, modType=varargin{1}; cRate=varargin{2}; cbIdx=varargin{3}; txMode=p1.txMode;
    case 4, modType=varargin{1}; cRate=varargin{2}; cbIdx=varargin{3}; txMode=varargin{4};
    otherwise
        error('commlteMIMO_update has 1 to 4 arguments!');
end
% Update PDSCH parameters
tmp = prmsPDSCH(txMode, p1.chanBW, p1.contReg, modType,p1.numTx, p1.numRx, 
    p1.numCodeWords,p1.Eqmode);
p1=tmp;
[SymbolMap, Constellation]=ModulatorDetail(p1.modType);
p1.SymbolMap=SymbolMap;
p1.Constellation=Constellation;
% Update DLSCH parameters
p2 = prmsDLSCH(cRate, p2.maxIter, p2.fullDecode, p1);
% Update channel model parameters
tmp = prmsMdl(txMode, p1.chanSRate,  p3.chanMdl, p3.Doppler, p1.numTx, p1.numRx, 
    p3.corrLvl, p3.chEstOn, p3.enPMIfback, cbIdx, p3.snrdB, p3.maxNumErrs,
p3.maxNumBits);
p3=tmp;

7.5 Adaptive Modulation

In this section we take advantage of the CQI channel-state report to adaptively change the modulation scheme of the transceiver in successive subframes. We implement a wideband modulation selection, in which in any given subframe all resource blocks will have the same modulation scheme and the change occurs between subframes.

To understand the design tradeoffs, we need to compare adaptive modulation with alternative implementations. We feature three algorithms that apply different adaptation scenarios: (i) baseline (with no adaptation), (ii) adaptation through random changing of the modulation type, and (iii) adaptation by exploitation of the CQI channel measurements. Next we show the operations performed in each scenario in the body of the processing while loop.

7.5.1 No Adaptation

The following MATLAB script segment shows the body of the processing while loop. Without any link adaptation, the while loop includes only five operations: (i) calling the transceiver step function to process one subframe of data; (ii) reporting the average and instantaneous data rates together with average values of the coding rate and the modulation rate (number of modulation bits per symbol); (iii) measuring the BER (Bit Error Rate); (iv) visualizing the post-detection received signals and the transmitted and received OFDM (Orthogonal Frequency Division Multiplexing) signals; and (v) updating the subframe number.


Algorithm
MATLAB script segment
    %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
     %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    %% No adaptations here

7.5.2 Changing the Modulation Scheme at Random

The following MATLAB script segment shows the body of the processing while loop. In addition to operations performed in the case of no adaptations, the while loop includes the following two operations: (i) it assigns to the modulation-type parameter (modType) a random integer value of 1, 2, or 3, corresponding to QPSK, 16QAM, and 64QAM, respectively; and (ii) it calls the commlteMIMO_update function, which updates and recomputes all LTEPDSCH and LTEDLSCH parameters based on the new modulation type.


Algorithm
MATLAB script segment
    %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
     %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    % Change of modulation scheme randomly
    modType=randi([1 3],1,1);
    [prmLTEPDSCH, prmLTEDLSCH] = commlteMIMO_update( prmLTEPDSCH, prmLT-
EDLSCH, modType);
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    %% No adaptations here

7.5.3 CQI-Based Adaptation

The following MATLAB script segment shows the body of the processing while loop. In addition to operations performed in the case of no adaptations, the while loop contains the following four adaptation operations: (i) CQI measure reporting, which computes the SINR measure by calling the CQIselection function; (ii) new modulation-type selection, carried out by calling the CQI2indexMCS function that maps the SINR measure into a modulation type; (ii) calling the commlteMIMO_update function that updates and recomputes LTEPDSCH, LTEDLSCH, and prmMdl parameters based on the new modulation type; and (iv) visualizing the variations in the channel quality with time by calling the zVisSinr function that plots the present and the 24 past values of the SINR measure.


Algorithm
MATLAB script segment
    %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
    %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% CQI feedback
    sinr=CQIselection(dataOut, yRec,  nS, prmLTEDLSCH, prmLTEPDSCH);
    indexMCS=CQI2indexMCS(sinr);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
        zVisSinr(sinr);
    end;
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    % Adaptive change of modulation
    modType=indexMCS;
    [prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_update
( prmLTEPDSCH, prmLTEDLSCH, prmMdl, modType);

7.5.4 Verifying Transceiver Performance

The parameters used in simulation are summarized in the following MATLAB script, called commlteMIMO_params. During the simulation, all of these parameters remain constant except for the modulation scheme specified by the variable modType.


Algorithm
MATLAB script
% PDSCH
txMode             = 4;   % Transmission mode one of {1, 2, 4}
numTx              = 2;    % Number of transmit antennas
numRx              = 2;    % Number of receive antennas
chanBW            = 6;         % [1,2,3,4,5,6] maps to [1.4, 3, 5, 10, 15, 20]MHz
contReg            = 1;         % {1,2,3} for >=10MHz, {2,3,4} for <10Mhz
modType           = 3;         % [1,2,3] maps to ['QPSK','16QAM','64QAM']
% DLSCH
cRate                = 1/3; % Rate matching target coding rate
maxIter              = 6;     % Maximum number of turbo decoding iterations
fullDecode         = 0;    % Whether "full" or "early stopping" turbo decoding is performed
% Channel 
chanMdl             =   'frequency-selective';   % Channel model
Doppler              = 70;                               % Average Doppler shift
% one of {'flat-low-mobility', 'flat-high-mobility','frequency-selective-low-mobility',
% 'frequency-selective-high-mobility', 'EPA 0Hz', 'EPA 5Hz', 'EVA 5Hz', 'EVA 70Hz'}
corrLvl                 = 'Medium';
% Simulation parameters
Eqmode               = 2;      % Type of equalizer used [1,2,3] for ['ZF', 'MMSE','Sphere Decoder']
chEstOn              = 1;          % use channel estimation or ideal channel
snrdB                  = 20;    % Signal to Noise Ratio in dB
maxNumErrs       = 2e7; % Maximum number of errors found before simulation stops
maxNumBits       = 2e7;  % Maximum number of bits processed before simulation stops
visualsOn            = 0;      % Whether to visualize channel response and constellations
numCodeWords  = 1; % Number of codewords in PDSCH
enPMIfback         = 0;     % Enable/Disable Precoder Matrix Indicator (PMI) feedback
cbIdx                   = 1;      % Initialize PMI index

The function zReport_data_rate_average reports the average and instantaneous values of data rates, the coding rate, and the modulation rate. The average values are computed as running means by the dsp.Mean System object of the DSP System Toolbox. The instantaneous data rate is computed as the sum of input bits in all 10 subframes of a frame multiplied by a constant factor of 100 frames per second.


Algorithm
MATLAB function
function t = zReport_data_rate_average(p2, p1)
persistent Rmean Rmod Rcod
if isempty(Rmean), Rmean=dsp.Mean('RunningMean', true);end
if isempty(Rmod), Rmod=dsp.Mean('RunningMean', true);end
if isempty(Rcod), Rcod=dsp.Mean('RunningMean', true);end
y=(1/10.0e-3)*(p1.TBLenVec(1)+p1.TBLenVec(2)+8*p1.TBLenVec(3));
z=y/1e6;
t=step(Rmean,z);
mm=step(Rmod,2*p2.modType);
cc=step(Rcod,p1.cRate);
Mod={'QPSK','16QAM','64QAM'};
fprintf(1,'Modulation                   = %s
',Mod{p2.modType});
fprintf(1,'Instantaneous Data rate       = %.2f Mbps
',z);
fprintf(1,'Average Data rate            = %.2f Mbps
',t);
fprintf(1,'Instantaneous Modulation rate = %4.2f
',2*p2.modType);
fprintf(1,'Average Modulation rate      = %4.2f
',mm);
fprintf(1,'Instantaneous Coding rate     = %.4f
',p1.cRate);
fprintf(1,'Average Coding rate          = %.4f 

',cc);
end

By executing the MATLAB script of the MIMO transceiver model with adaptive modulation, we can look at various signals in order to assess the performance of the system. As Figure 7.2 illustrates, changes in the modulation scheme affect the instantaneous data rate and thus the average data rate.

Figure 7.2 Link adaptation: data rates, modulation, and coding modes subframe by subframe

c07f002

7.5.5 Adaptation Results

For each of the adaptation scenarios, we compute the BERs by processing 20 million bits. Table 7.2 summarizes the results. As expected, adaptive modulation that responds to channel quality performs best. In scenarios without adaptations, as we use higher modulation rates, such as 64QAM, we obtain high data rates at the cost of higher BERs. When using lower modulation rates, such as QPSK, we obtain lower BERs but lower data rates. When selecting the modulation scheme randomly, without any correlation to the channel quality, both the average data rate and the BER are average values of the cases without any adaptations.

Table 7.2 Adaptive modulation: BER, data rates, and modulation rates in different scenarios

c07-tab-0002

However, as we select a modulation scheme based on channel quality, we obtain the best compromise in conditions of both low and high channel qualities. In subframes with higher channel quality, we choose higher modulation rates. Although we are using modulation schemes with smaller minimum constellation distances, as the channel is deemed clean, the probability of error in these subframes is low, so we enjoy the highest rate without too much cost in bit errors. In subframes with lower channel quality, we revert to lower modulation rates. These rates are associated with higher distances between constellation points and as a result the probability of error is low. These subframes result in a reduction in the overall rates but maintain the quality within an acceptable range. As a result, the average BER with adaptive modulation (0.0009) is lower than the random selection (0.0016) and the average data rate with adaptive modulation (52.61 Mbps) is higher than that with random selection (40.75 Mbps). We observe that with adaptation based on channel quality we obtain the best tradeoff in terms of highest rate and reasonable error rate.

7.6 Adaptive Modulation and Coding Rate

In this section, we use the CQI channel-state report to adaptively change both the modulation scheme and the coding rate of the transceiver in successive subframes. We will compare the channel quality-based (CQI-based) adaptive approach with two algorithms that apply different adaptation scenarios: (i) baseline (without adaptation) and (ii) adaptation through random changing of the modulation type and coding rate.

In the scenario where no adaptation is performed, we examine each of the three LTE modulation schemes with a coding rate equal to the average coding rate used in the CQI-based adaptive scenario. In the random-adaptation scenario, in each subframe we randomly select one of the LTE modulation schemes and choose a random value for the coding rate within the same range of values used in the CQI-based adaptive scenario.

7.6.1 No Adaptation

The following MATLAB script segment shows the body of the processing while loop. Since no adaptation is performed here, the MATLAB code is identical to that presented in Section 7.5.


Algorithm
MATLAB script segment
    %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
     %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    %% No adaptations here

7.6.2 Changing Modulation Scheme at Random

The following MATLAB code segment shows the body of the processing while loop in the case where the modulation and coding rate are randomly selected. In addition to operations performed in the case of no adaptations, the while loop includes the following three operations: (i) it assigns to the modulation-type parameter (modType) a random integer value of 1, 2, or 3, corresponding to QPSK, 16QAM, and 64QAM, respectively; (ii) it assigns to the coding-rate parameter (cRate) a normal random value in the range between 1/3 and 0.95; and (iii) it calls the commlteMIMO_update function that updates and recomputes all parameters based on the new modulation type and the coding rate.


Algorithm
MATLAB script segment
   %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
     %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    % Change of modulation and coding rates randomly
    Average_cRate=0.4932;
    modType=randi([1 3],1,1);
    cRate = Average_cRate + (1/6)*randn;
    if cRate > 0.95, cRate=0.95;end; if cRate < 1/3, cRate=1/3;end;
    [prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_update( 
        prmLTEPDSCH, prmLTEDLSCH, prmMdl, modType, cRate);
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;    

7.6.3 CQI-Based Adaptation

The following MATLAB script segment shows the body of the processing while loop that implements the CQI-based adaptive modulation and coding. In addition to operations characterizing the no-adaptation scenario, the following three tasks are performed: (i) by calling the functions CQIselection and CQI2indexMCS in sequence, the CQI report is computed, estimating the best modulation scheme (modType) and coding rate (cRate) for the following subframe; (ii) the commlteMIMO_update function that updates and recomputes the LTEPDSCH, LTEDLSCH, and prmMdl parameters based on the new modulation type and coding rate is called; and (iii) the variations in channel quality with time are visualized by calling the zVisSinr function, which plots a vector comprising the present and the 24 past values of the SINR measure.


Algorithm
MATLAB script segment
    %% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = 
        commlteMIMO_SM_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
    %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    %% CQI feedback
    sinr=CQIselection(dataOut, yRec,  nS, prmLTEDLSCH, prmLTEPDSCH);
    [modType, cRate]=CQI2indexMCS(sinr);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
        zVisSinr(sinr);
    end;
    % Adaptive change of modulation and coding rate
    [prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_update(
        prmLTEPDSCH, prmLTEDLSCH, prmMdl, modType, cRate);
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;

7.6.4 Verifying Transceiver Performance

The parameters used in the simulation are the same as used in the adaptive-modulation case and are summarized in the script commlteMIMO_params. During the simulation, all of these parameters remain constant except the modulation scheme (modType) and the coding rate (cRate). By executing the MATLAB script of the MIMO transceiver model with adaptive modulation and coding rate, we can assess the performance of the system. As the simulation is running, the message shown in Figure 7.3 appears on the MATLAB screen. As we can see, changes in both the modulation scheme and the coding rate affect the instantaneous data rate and thus the average data rate of the transceiver.

Figure 7.3 Adaptive modulation and coding: data rates, modulation, and coding modes subframe by subframe

c07f003

7.6.5 Adaptation Results

For each of the three adaptation scenarios, we compute the BER by processing 20 million bits. For the first four experiments (no adaptations in the case of QPSK, 16QAM, and 64QAM modulation and a random selection of modulation in each subframe), we choose a constant coding rate of 0.4932. This coding rate is the average of rates in the adaptive case and is chosen in order to make fair comparisons. Table 7.3 summarizes the results.

Table 7.3 Adaptive modulation and coding: BER, data rates, modulation, and coding rates in different scenarios

c07-tab-0003

The results in this case are very similar to those in the case where only adaptive modulation is used. With fixed modulation and coding rates, we obtain higher rates and higher-order modulations at the cost of a much lower achievable BER. Changing the modulation based on random selection provides the average results of the three fixed modulation cases. Adaptive modulation and coding based on channel quality provides the best compromise. The average data rate in the CQI-based adaptive approach (64.73 Mbps) is higher than in the case of random selection (56.81 Mbps). The BER of adaptive coding (0.0047) is lower than that in the case of random selection (0.0250).

7.7 Adaptive Precoding

In this section we use the PMI channel-state report to adaptively change the precoding matrix index in successive subframes. This adaptation is only available in the closed-loop spatial multiplexing mode of transmission. We use a parameter called enPMIfback, which enables or disables the PMI mechanism. When this parameter is turned on, the PMI index is selected within the receiver and fed back to the transmitter for use at the next time step. Otherwise, the fixed user-specified codebook index is used for the duration of the simulation. The feedback granularity is modeled once for the whole subframe (wideband) and applied to the next transmission subframe.


Algorithm
MATLAB function
function [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr_ref, cbIdx]
    = commlteMIMO_SM_PMI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl)
%% TX
persistent hPBer1
if isempty(hPBer1), hPBer1=comm.ErrorRate; end;
%  Generate payload
dataIn = genPayload(nS,  prmLTEDLSCH.TBLenVec);
% Transport block CRC generation
tbCrcOut1 =CRCgenerator(dataIn);
% Channel coding includes - CB segmentation, turbo coding, rate matching,
% bit selection, CB concatenation - per codeword
[data, Kplus1, C1] = lteTbChannelCoding(tbCrcOut1, nS, prmLTEDLSCH, prmLTEPDSCH);
%Scramble codeword
scramOut = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
% Modulate
modOut = Modulator(scramOut, prmLTEPDSCH.modType);
% Map modulated symbols  to layers
numTx=prmLTEPDSCH.numTx;
LayerMapOut = LayerMapper(modOut, [ ], prmLTEPDSCH);
usedCbIdx = prmMdl.cbIdx;
% Precoding
[PrecodeOut, Wn] = SpatialMuxPrecoder(LayerMapOut, prmLTEPDSCH, usedCbIdx);
% Generate Cell-Specific Reference (CSR) signals
csr = CSRgenerator(nS, numTx);
csr_ref=complex(zeros(2*prmLTEPDSCH.Nrb, 4, numTx));
for m=1:numTx
    csr_ pre=csr(1:2*prmLTEPDSCH.Nrb,:,:,m);
    csr_ref(:,:,m)=reshape(csr_ pre,2*prmLTEPDSCH.Nrb,4);
end
% Resource grid filling
txGrid = REmapper_mTx(PrecodeOut, csr_ref, nS, prmLTEPDSCH);
% OFDM transmitter
txSig = OFDMTx(txGrid, prmLTEPDSCH);
%% Channel
% MIMO Fading channel
[rxFade, chPathG] = MIMOFadingChan(txSig, prmLTEPDSCH, prmMdl);
% Add AWG noise
sigPow = 10*log10(var(rxFade));
nVar = 10.^(0.1.*(sigPow-snrdB));
rxSig =  AWGNChannel(rxFade, nVar);
%% RX
% OFDM Rx
rxGrid = OFDMRx(rxSig, prmLTEPDSCH);
% updated for numLayers -> numTx
[dataRx, csrRx, idx_data] = REdemapper_mTx(rxGrid, nS, prmLTEPDSCH);
% MIMO channel estimation
if prmMdl.chEstOn
    chEst = ChanEstimate_mTx(prmLTEPDSCH, csrRx,  csr_ref, prmMdl.chEstOn);
    hD     = ExtChResponse(chEst, idx_data, prmLTEPDSCH);
else
    idealChEst = IdChEst(prmLTEPDSCH, prmMdl, chPathG);
    hD =  ExtChResponse(idealChEst, idx_data, prmLTEPDSCH);
end
% PMI codebook selection
if (prmMdl.enPMIfback)
cbIdx = PMICbSelect( hD, prmMdl.enPMIfback, prmLTEPDSCH.numTx, 
    prmLTEPDSCH.numLayers, nVar );
else
    cbIdx=prmMdl.cbIdx;
end
% Frequency-domain equalizer
if (numTx==1)
    % Based on Maximum-Combining Ratio (MCR)
    yRec = Equalizer_simo(dataRx, hD, nVar, prmLTEPDSCH.Eqmode);
else
    % Based on Spatial Multiplexing
    yRec = MIMOReceiver(dataRx, hD, prmLTEPDSCH, nVar, Wn);
end
% Demap received codeword(s)
[cwOut, ˜] = LayerDemapper(yRec, prmLTEPDSCH);
if prmLTEPDSCH.Eqmode < 3
    % Demodulate
    demodOut = DemodulatorSoft(cwOut, prmLTEPDSCH.modType, max(nVar));
else
    demodOut = cwOut;
end
% Descramble received codeword
rxCW =  lteDescramble(demodOut, nS, 0, prmLTEPDSCH.maxG);
% Channel decoding includes - CB segmentation, turbo decoding, rate dematching
[decTbData1, ˜,˜] = lteTbChannelDecoding(nS, rxCW, Kplus1, C1,  prmLTEDLSCH, prmLTEPDSCH);
% Transport block CRC detection
[dataOut, ˜] = CRCdetector(decTbData1);
end

7.7.1 PMI-Based Adaptation

The following MATLAB script segment shows the body of the processing while loop that implements the PMI codebook index selection without adaptive modulation and coding. The script uses the last output argument (cbIdx) of the commlteMIMO_SM_PMI_step function, which is the updated PMI codebook index in the current subframe. By providing this index as the third input argument to the commlteMIMO_update function, we set the PMI index for the following subframe.


Algorithm
MATLAB script segment
%% One subframe step processing
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr_ref, cbIdx]
    = commlteMIMO_SM_PMI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
     %% Report average data rates
    ADR=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
    fprintf(1,'PMI codebook index = %2d
', cbIdx);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
        zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    %% Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    % Adaptive PMI
    modType=prmLTEPDSCH.modType;
    cRate=prmLTEDLSCH.cRate;
    [prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_update(
        prmLTEPDSCH, prmLTEDLSCH, prmMdl, modType, cRate, cbIdx);
    %% including adaptations here

7.7.2 Verifying Transceiver Performance

The parameters used in the simulation are the same as those used in the adaptive PMI, as summarized in the script commlteMIMO_params. During the simulation, all of these parameters remain constant except the PMI codebook index (cbIdx). By executing the MATLAB script of the MIMO transceiver model, we can assess the performance of the system. As the simulation is running, the message in Figure 7.4 appears on the MATLAB screen, showing variations in the PMI codebook index.

Figure 7.4 Adaptive PMI: change of PMI codebook index subframe by subframe

c07f004

7.7.3 Adaptation Results

For each of the adaptation scenarios, we compute the BERs by processing 20 million bits. Table 7.4 illustrates the results. These PMI index variations do not affect the modulation scheme, the coding rate, the instantaneous data rate, or the average data rate of the transceiver. As we expect the relative effect on the BER reflects the benefits of adaptive precoding.

Table 7.4 Adaptive precoding: BER, data rates, modulation, and coding rates in different scenarios

c07-tab-0004

7.8 Adaptive MIMO

In this section we use the RI channel-state report to adaptively toggle the transmission mode between transmit diversity and spatial multiplexing. If the estimated rank is equal to the number of transmit antennas, we perform spatial multiplexing. For the sake of simplicity, if the rank is less than the number of transmit antennas then we revert to transmit-diversity mode. We will use the same number of antennas but we forego the increased data rate associated with spatial multiplexing in favor of the greater link reliability associated with transmit diversity.

By applying a threshold to the condition number, we propose a wideband rank value for the whole subframe. The function takes as input a 2D channel matrix at the receiver (h). This is either a 2 × 2 or a 4 × 4 matrix, depending on whether two- or four-antenna transmission is used.


Algorithm
MATLAB function
function [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr_ref, cbIdx, ri]
    = commlteMIMO_SM_PMI_RI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH,
prmMdl)
%% TX
persistent hPBer1
if isempty(hPBer1), hPBer1=comm.ErrorRate; end;
%  Generate payload
dataIn = genPayload(nS,  prmLTEDLSCH.TBLenVec);
% Transport block CRC generation
tbCrcOut1 =CRCgenerator(dataIn);
% Channel coding includes - CB segmentation, turbo coding, rate matching,
% bit selection, CB concatenation - per codeword
[data, Kplus1, C1] = lteTbChannelCoding(tbCrcOut1, nS, prmLTEDLSCH, prmLTEPDSCH);
%Scramble codeword
scramOut = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
% Modulate
modOut = Modulator(scramOut, prmLTEPDSCH.modType);
% Map modulated symbols  to layers
if (prmLTEPDSCH.txMode ==4)
LayerMapOut = LayerMapper(modOut, [ ], prmLTEPDSCH);
usedCbIdx = prmMdl.cbIdx;
% Precoding
[PrecodeOut, Wn] = SpatialMuxPrecoder(LayerMapOut, prmLTEPDSCH, usedCbIdx);
else
% TD with SFBC
PrecodeOut = TDEncode(modOut(:,1),prmLTEPDSCH.numTx);
end
% Generate Cell-Specific Reference (CSR) signals
numTx=prmLTEPDSCH.numTx;
csr = CSRgenerator(nS, numTx);
csr_ref=complex(zeros(2*prmLTEPDSCH.Nrb, 4, numTx));
for m=1:numTx
    csr_ pre=csr(1:2*prmLTEPDSCH.Nrb,:,:,m);
    csr_ref(:,:,m)=reshape(csr_ pre,2*prmLTEPDSCH.Nrb,4);
end
% Resource grid filling
txGrid = REmapper_mTx(PrecodeOut, csr_ref, nS, prmLTEPDSCH);
% OFDM transmitter
txSig = OFDMTx(txGrid, prmLTEPDSCH);
%% Channel
% MIMO Fading channel
[rxFade, chPathG] = MIMOFadingChan(txSig, prmLTEPDSCH, prmMdl);
% Add AWG noise
sigPow = 10*log10(var(rxFade));
nVar = 10.^(0.1.*(sigPow-snrdB));
rxSig =  AWGNChannel(rxFade, nVar);
%% RX
% OFDM Rx
rxGrid = OFDMRx(rxSig, prmLTEPDSCH);
% updated for numLayers -> numTx
[dataRx, csrRx, idx_data] = REdemapper_mTx(rxGrid, nS, prmLTEPDSCH);
% MIMO channel estimation
if prmMdl.chEstOn
    chEst = ChanEstimate_mTx(prmLTEPDSCH, csrRx,  csr_ref, prmMdl.chEstOn);
    hD     = ExtChResponse(chEst, idx_data, prmLTEPDSCH);
else
    idealChEst = IdChEst(prmLTEPDSCH, prmMdl, chPathG);
    hD =  ExtChResponse(idealChEst, idx_data, prmLTEPDSCH);
end
% Frequency-domain equalizer
if (numTx==1)
    % Based on Maximum-Combining Ratio (MCR)
    yRec = Equalizer_simo(dataRx, hD, nVar, prmLTEPDSCH.Eqmode);
else
    if (prmLTEPDSCH.txMode ==4)
        % Based on Spatial Multiplexing
        [yRec, ri] = MIMOReceiver_ri(dataRx, hD, prmLTEPDSCH, nVar, Wn);
    else
% Based on Transmit Diversity  with SFBC combiner
    [yRec, ri] = TDCombine_ri(dataRx, hD, prmLTEPDSCH.numTx, prmLTEPDSCH.numRx);
    end
end
% PMI codebook selection
if (prmMdl.enPMIfback)
cbIdx = PMICbSelect( hD, prmMdl.enPMIfback, prmLTEPDSCH.numTx, 
    prmLTEPDSCH.numLayers, snrdB);
else
    cbIdx = prmMdl.cbIdx;
end
% Demap received codeword(s)
[cwOut, ˜] = LayerDemapper(yRec, prmLTEPDSCH);
if prmLTEPDSCH.Eqmode < 3
    % Demodulate
    demodOut = DemodulatorSoft(cwOut, prmLTEPDSCH.modType, max(nVar));
else
    demodOut = cwOut;
end
% Descramble received codeword
rxCW =  lteDescramble(demodOut, nS, 0, prmLTEPDSCH.maxG);
% Channel decoding includes - CB segmentation, turbo decoding, rate dematching
[decTbData1, ˜,˜] = lteTbChannelDecoding(nS, rxCW, Kplus1, C1,  prmLTEDLSCH,
prmLTEPDSCH);
% Transport block CRC detection
[dataOut, ˜] = CRCdetector(decTbData1);
end

7.8.1 RI-Based Adaptation

The following MATLAB script segment shows the body of the processing while loop that implements the RI-based adaptation without any previously presented adaptation. The script uses the updated rank-estimation index in the current subframe, as represented by the last output argument (ri) of the commlteMIMO_SM_PMI_RI_step function. By providing this index as the fourth input argument to the commlteMIMO_update function, we set the RI index for the following subframe.


Algorithm
MATLAB script segment
%% One subframe step
    [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr, cbIdx, ri] 
    =  commlteMIMO_SM_PMI_RI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH,
prmMdl);
    Ri=RIselection(ri, threshold);
    ADR_a=zReport_data_rate_average(prmLTEPDSCH, prmLTEDLSCH);
     fprintf(1,'PMI codebook index = %2d
Transmission mode  = %2d
', cbIdx, Ri);
    %% Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    %% Visualize results
    if (visualsOn && prmLTEPDSCH.Eqmode˜=3)
          zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
    end;
    % Update subframe number
    nS = nS + 2; if nS > 19, nS = mod(nS, 20); end;
    % Adaptive RI
    modType=prmLTEPDSCH.modType;
    cRate=prmLTEDLSCH.cRate;
    cbIdx=prmMdl.cbIdx;
    [prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_update(
        prmLTEPDSCH, prmLTEDLSCH, prmMdl, modType, cRate,  cbIdx, Ri);

7.8.2 Verifying Transceiver Performance

The parameters used in the simulation are the same as those used in the adaptive modulation case, as summarized in the script commlteMIMO_params. During the simulation, all of these parameters remain constant except the rank-estimation index (ri). As the simulation is running, the message shown in Figure 7.5 appears on the MATLAB screen. As we can see, transmission-mode changes based on RI estimation affect the instantaneous data rate and thus the average data rate of the transceiver.

Figure 7.5 Adaptive MIMO: change of transmission mode subframe by subframe

c07f005

7.8.3 Adaptation Results

The results indicate that, as expected, we obtain higher data rates when using spatial multiplexing than when using transmit diversity (Table 7.5). By using the rank-estimation method, we obtain an average rate that is closer to that obtained with spatial multiplexing. This reflects the greater proportion of full-rank subframes (86.5%) as compared to lower-rank subframes (13.5%).

Table 7.5 Adaptive rank estimation and MIMO: BER, data rates, modulation, and coding rates in different scenarios

c07-tab-0005

7.9 Downlink Control Information

As we saw earlier, link adaptation involves the following three components: (i) channel-state estimation at the receiver; (ii) scheduling operations to create scheduling assignments; and (iii) transmission of the scheduling assignments in the following subframe. In downlink, the scheduling assignments are captured as DCI. There are multiple DCI formats for various LTE-standard transmission modes. A DCI format may contain many types of information, including multi-antenna characteristics such as the precoding matrix indicator index, modulation scheme, and transport block size and HARQ (Hybrid Automatic Repeat Request) process details such as the process number, the redundancy version, and a new data indicator.

In this book we focus on user-plane information and the single-user processing case. As such, we will not discuss in detail the DCI formats or their implementation in MATLAB. However, we will present two topics with reference to the control information: (i) how CQI information is mapped to the MCS information and (ii) how the PDCCH is encoded before it is transmitted within the first few OFDM symbols of the downlink resource grid. Finally, we perform a quick review of the reliability of the PDCCH transmission by comparing its BER with that of the PDSCH, which we have examined in detail in this book.

7.9.1 MCS

The scheduler provides the downlink transmitter with the modulation type and coding rate of the data in the current subframe. This information is encoded as a 5 bit MCS index and incorporated in all different DCI formats. The MCS index jointly codes the modulation scheme and the transport block size (tbSize). The coding rate (R) is defined as the ratio of the number of input bits (K) to the number of output bits (N): K/N. Since a 24 bit CRC is used prior to DLSCH processing, the number of input bits at the encoder is equal to tbSise + 24. The number of DLSCH coder output bits (N) is equal to the size of each PDSCH codeword (numPDSCHbits); that is, c07-math-0009. Since the number of bits in each PDDSCH codeword is completely specified by the number of resource blocks, knowledge of the transport block size (tbSize) gives the coding rate as c07-math-0010.

The following MATLAB function shows how the CQI information (modulation scheme and target coding rate) can be mapped to the transport block size, the index of the transport-block-size lookup table, and the actual coding rate.


Algorithm
MATLAB function
function [tbSize, TBSindex, ActualRate] = getTBsizeMCS(modType, TCR, Nrb, numLayers, numPDSCHBits)
% Get the transport block size for a specified configuration.
% Inputs: 
%   modType     : 1 (QPSK), 2 (16QAM), 3 (64QAM)
%   TCR         : Target Code Rate
%   Nrb         : number of resource blocks
%   numLayers   : number of layers
%   numPDSCHBits: number of PDSCH bits (G)
% Output:
%   tbSize : transport block length
% Example: R.10 of A.3.3.2.1 in 36.101
%   tbLen =  getTBsizeRMC(1, 1/3, 50, 1, 12384)
% Reference: 
%   1) Section 7.1.7 of 36.213, for TB sizes.
%      Uses preloaded Tables 7.1.7.1-1, 7.1.7.2.1-1, 7.1.7.2.2 and 7.1.7.2.5.
%   2) Section A.3.1 of 36.101 for TB size selection criteria.
switch modType
    case 1 % QPSK
        numTBSizes = 10;
        stIdx = 0;
    case 2 % 16QAM
        numTBSizes = 7;
        stIdx = 9;
    case 3 % 64QAM
        numTBSizes = 12;
        stIdx = 15;
end
numBitsPerLayer=numPDSCHBits/numLayers;
% Load saved entries for Tables 7.1.7.2.1-1, 7.1.7.2.2 and 7.1.7.2.5.
load TBSTable.mat
tbVec = baseTBSTab(stIdx+(1:numTBSizes), Nrb);      % for 1-based indexing
ProposedRates=(tbVec+24)./numBitsPerLayer;
ProposedRates(ProposedRates<1/3)=10;
[˜, c] = min(abs(TCR-ProposedRates));
tbSize = tbVec(c);
if (numLayers==2) % Section 7.1.7.2.2
    if (Nrb <= 55)
        tbSize = baseTBSTab(TBSindex, 2*Nrb);
    else
        index=(layer2TBSTab(:,1)==tbSize);
        tbSize = layer2TBSTab(index, 2);
    end
elseif (numLayers==4)  % Section 7.1.7.2.5
    if (Nrb <= 27)
        tbSize = baseTBSTab(TBSindex, 4*Nrb);
    else
        index=(layer4TBSTab(:,1)==tbSize);
        tbSize = layer4TBSTab(index, 2);
    end
end
ActualRate=(tbSize+24)./numPDSCHBits;
TBSindex= stIdx+c;

The following function shows how the transport-block-size index and the modulation type are mapped to a unique MCS index that can be encoded using a 5 bit scalar quantizer.


Algorithm
MATLAB function
function MCSindex=map2MCSindex(TBSindex, modType)
%#codegen
% Assume 1-based indexing
if ((TBSindex < 1) ||  (TBSindex>27)), error('map2MCSindex function: Wrong TBSindex.');end
switch TBSindex
    case 10
        switch modType
            case 1
                MCSindex=10;
            case 2
                MCSindex=11;
            otherwise
                error('Wrong combination of TBSindex and modulation type');
        end
    case 16
        switch modType
            case 2
                MCSindex=17;
            case 3
                MCSindex=18;
            otherwise
                error('Wrong combination of TBSindex and modulation type');
        end
    otherwise
        if TBSindex <10
            MCSindex=TBSindex;
        elseif ((TBSindex>10) &&  (TBSindex <16))
            MCSindex=TBSindex+1;
        else
            MCSindex=TBSindex+2;
        end
end

7.9.2 Rate of Adaptation

The scheduling decision affecting the downlink can be updated once every subframe. But the DCI containing the MCS, for example, does not need to adapt every 1 ms. The granularity and rate of adaptation are left to the discretion of the scheduling algorithm, which takes into account various factors, including the totality of the link quality for all users, the base-station interference profile, quality-of-service requirements, service, and service priorities [9].

7.9.3 DCI Processing

In this section we will examine the performance of the transceiver applied to the DCI. DCI is encoded and transmitted in the first few OFDM symbols of each subframe. Reliable decoding of the DCI is a critical requirement for proper recovery of the user data placed within the ensuing OFDM symbols of the subframe. Since DCI is usually transmitted in small packets, a convolutional code is used to encode them. The LTE standard specifies a combination of tail-biting convolutional encoding and transmit diversityfor reliable link performance by the DCI.

To stay true to our user-plane processing focus, we will not discuss in detail all the components of the DCI (which including the Physical Hybrid ARQ Indicator Channel (PHICH) and the Physical Control-Format Indicator Channel (PCFICH). We will also forego a detailed description of the placement of the information within the resource grid and the OFDM transmission. Instead, we will focus on the signal processing chain prior to transmission of the signal through a combination flat-fading and AWGN (Additive White Gaussian Noise) channel in order to evaluate the performance of the control information.

7.9.3.1 Transceiver Function

The following MATLAB function (commlteMIMO_DCI_step) summarizes the DCI processing chain. In the transmitter, we first apply a DCI-specific CRC generation. The DCI data are processed by a tail-biting convolutional encoder with the same trellis structure as the one used in the user plane for turbo coding. Then we apply to the encoded bits the same rate-matching, scrambling, and modulation operations that were performed on the user-plane bits. Finally, transmit diversity is performed on the modulated signal. In this function we forego the resource-grid-mapping and OFDM-signal-generation operations. We apply channel modeling directly to the outputs of the transmit diversity encoder. At the receiver, we perform the inverse operation to that of the transmitter, including ideal-channel estimation, transmit-diversity combining, soft-decision demodulation, descrambling, rate dematching, and Viterbi decoding. Finally, by performing the DCI-specific CRC detection we find the best output estimate of the DCI bits. The function commlteMIMO_DCI_step represents a simplified version of the transceiver operations applied to the DCI.


Algorithm
MATLAB function
function [dataIn, dataOut, modOut, rxSig]
    = commlteMIMO_DCI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl)
%% TX
numBitsDCI = 205;
%  Generate payload
dataIn        = genPayload(nS,  numBitsDCI);
% Transport block CRC generation
CrcOut1      = CRCgeneratorDCI(dataIn);
% Channel coding includes - tail biting convolutional coding, rate matching
data             = TailbitingConvEnc(CrcOut1,  prmLTEDLSCH.cRate);
%Scramble codeword
scramOut     = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
% Modulate
modOut       = Modulator(scramOut, prmLTEPDSCH.modType);
% Transmit diversity encoder
PrecodeOut = TDEncode(modOut, prmLTEPDSCH.numTx);
%% Channel
% MIMO fading channel
[fadeOut, pathGain]     = MIMOFadingChan(PrecodeOut, prmLTEPDSCH, prmMdl);
nVar                      = real(var(fadeOut(:)))/(10.^(0.1*snrdB));
pathG                            = squeeze(pathGain);
% AWGN
recOut                           = AWGNChannel(fadeOut, nVar);
%% RX
% Transmit diversity combiner
rxSig =  TDCombine(recOut, pathG,  prmLTEPDSCH.numTx,  prmLTEPDSCH.numRx);
% Demodulate
demodOut = DemodulatorSoft(rxSig, prmLTEPDSCH.modType, nVar);
% Descramble both received codewords
rxCW1 =  lteDescramble(demodOut, nS, 0, prmLTEPDSCH.maxG);
% Channel decoding includes - tail biting Viterbi decoding, rate dematching
L=numel(CrcOut1);
decData1=TailbitingViterbiSoft( rxCW1, L);
% Transport block CRC detection
[dataOut, ˜] = CRCdetectorDCI(decData1);
end

The transceiver function features two functions: TailbitingConvEnc and TailbitingViterbiSoft. These implement tail-biting convolutional coding and its inverse Viterbi decoding with System objects from the Communications System Toolbox. In the encoder, we create two convolutional coders: one that maintains the state of the encoder and one that streams each frame of data using the state provided by the encoder. Finally, we compute the output using the rate-matching operations introduced in the previous chapter.


Algorithm
MATLAB function
function y=TailbitingConvEnc(u,  codeRate)
%#codegen
trellis=poly2trellis(7, [133 171 165]);
L=numel(u);
C=6;
persistent  ConvEncoder1 ConvEncoder2
if isempty(ConvEncoder1)
    ConvEncoder1=comm.ConvolutionalEncoder('TrellisStructure', trellis,
'FinalStateOutputPort', true, 
        'TerminationMethod','Truncated');
    ConvEncoder2 =  comm.ConvolutionalEncoder('TerminationMethod','Truncated',
'InitialStateInputPort', true,
        'TrellisStructure', trellis);
end
u2              = u((end-C+1):end);                            % Tail-biting convolutional coding
[˜, state]   = step(ConvEncoder1, u2);
u3              = step(ConvEncoder2, u,state);
y                = fcn_RateMatcher(u3, L, codeRate);  % Rate matching

In the decoder, we first perform rate dematching and then concatenate the received likelihood measures and perform soft-decision Viterbi decoding based on the state value that is embedded within the concatenated input signal. We compute the output by extracting the subset of the Viterbi-decoding output samples.


Algorithm
MATLAB function
function y=TailbitingViterbiSoft(u, L)
%#codegen
trellis=poly2trellis(7, [133 171 165]);
Index=[L+1:(3*L/2) (L/2+1):L];
persistent Viterbi
if isempty(Viterbi)
    Viterbi=comm.ViterbiDecoder(
        'TrellisStructure', trellis,
'InputFormat','Unquantized','TerminationMethod','Truncated','OutputDataType','logical');
end
uD             = fcn_RateDematcher(u, L);                % Rate de-matching
uE             = [uD;uD];                                               % Tail-biting
uF             = step(Viterbi, uE);                                  % Viterbi decoding
y               = uF(Index);

7.9.3.2 Testbench for the DCI Transceiver

The following function (commlteMIMO_DCI) represents the testbench for evaluating performance. The function takes as its inputs the Eb/N0 value, the specified maximum number of errors observed, and the maximum number of bits processed. As its outputs, it produces the BER measure and the actual number of process bits. First it calls the initialization function (commlteMIMO_initialize) in order to set all the relevant parameter structures (prmLTEDLSCH, prmLTEPDSCH, prmMdl). Then the testbench uses a while loop to perform subframe processing by calling the DCI-processing-chain function.


Algorithm
MATLAB function
function [ber, bits]=commlteMIMO_DCI(EbNo, maxNumErrs, maxNumBits)
%
clear functions
%% Set simulation parameters & initialize parameter structures
commlteMIMO_ params_DCI;
codeRate=cRate;
k=2*modType;
snrdB = EbNo + 10*log10(codeRate) + 10*log10(k);
[prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteMIMO_initialize(txMode, 
    chanBW, contReg, modType, Eqmode,numTx, numRx,cRate,maxIter, fullDecode, chan-
Mdl, Doppler, corrLvl, 
    chEstOn, numCodeWords, enPMIfback, cbIdx, snrdB, maxNumErrs, maxNumBits);
clear txMode chanBW contReg modType Eqmode numTx numRx cRate maxIter
fullDecode chanMdl Doppler corrLvl chEstOn numCodeWords enPMIfback cbIdx
%%
hPBer = comm.ErrorRate;
%% Simulation loop
nS = 0; % Slot number, one of [0:2:18]
Measures = zeros(3,1); %initialize BER output
while (( Measures(2)< maxNumErrs) && (Measures(3) < maxNumBits))
   [dataIn, dataOut, modOut, rxSig] = 
       commlteMIMO_DCI_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
    % Calculate  bit errors
    Measures = step(hPBer, dataIn, dataOut);
    % Visualize results
    if visualsOn, zVisConstell( prmLTEPDSCH,  modOut, rxSig, nS); end;
end
ber=Measures(1);
bits=Measures(3);
reset(hPBer);

7.9.3.3 BER Measurements

What characterizes the DCI transceiver is the combination of a low-constellation modulator (QPSK), a tail-biting convolutional encoder, and transmit-diversity coding. As illustrated by Figure 7.6, this combination provides a high BER performance for the processing of DCI information as designated by the LTE standard to process the DCI. This is critical, as excessive errors in the control information will have catastrophic effects on the quality of the recovered user data.

Figure 7.6 BER performance of the DCI: combination of AWGN and a flat-fading channel model with ideal channel-response estimation

c07f006

Figure 7.6 illustrates the result of processing or testbenching with Eb/N0 values of between 0 and 4 dB and the maximum number of errors set to 1000 and the maximum number of bits to 1e7. We process the transmitted data using a flat-fading channel in which the CSI is completely known. This implements an ideal channel estimator. Note that the BER measure is quite low even at low SNR (Signal-to-Noise Ratio) values. For example, at an Eb/N0 of 0 dB we have a BER of 1e−4, and at 2 dB we have a BER of around 1e−6.

These results are compatible with the high performance of the PDSCH processing discussed in Chapter 4. Even without transmit diversity, the combination of LTE turbo coding, scrambling, and modulation processed by the channel model presented here allows us to obtain BER performances that are compatible with DCI processing.

7.10 Chapter Summary

In this chapter we studied some of the LTE-standard specifications related to link adaptations. The operations related to link adaptation are performed in the receiver and involve the selection and feedback of various system parameters for use in the transmitter in the following subframes. They are applied to system parameters specifying: (i) the modulation and coding schemes, (ii) the number of transmission layers used in spatial multiplexing, and (iii) the choice of precoding matrices used in closed-loop spatial-multiplexing modes. The selection criteria for link adaptation are usually maximizing user data rates and increased spectral efficiency.

We reviewed the channel-quality measurements needed to perform the adaptations. These include CQI, PMI, and RI measurements. We then introduced algorithms that implement adaptations based on the channel-quality measures, including algorithms for adaptive modulation and coding, adaptive precoding for determination of the best precoder matrix, and adaptive MIMO for resolving occasional rank deficiencies in spatial multiplexing modes of transmission. Finally, we reviewed the signal-processing chain involved in the transmission of DCI. We showed that by exploiting a combination of transmit diversity and tail-biting convolutional coding, the LTE standard provides a reliable mechanism for the transmission of control information.

References

[1] 3GPP (2009) Requirements for Evolved UTRA (E-UTRA) and Evolved UTRAN (E-UTRAN) v9.0.0. TR 25.913, December 2009.

[2] Ding, L., Tong, F., Chen, Z., and Liu, Z. (2011) A novel MCS selection criterion for VOIP in LTE. International Conference on Wireless Communications, Networking and Mobile Computing - WiCom, pp. 1–4.

[3] Pande, A., Ramamurthi, V., and Mohapatra, P. (2011) Quality-oriented video delivery over LTE using adaptive modulation and coding. IEEE Global Telecommunications Conference (GLOBECOM), pp. 1–5.

[4] Tan, P., Wu, Y. and Sun, S. (2008) Link adaptation based on adaptive modulation and coding for multiple-antenna OFDM system. IEEE Journal on Selected Areas in Communications, 26, 8, 1599–1606.

[5] Kim, J., Lee, K., Sung, C. and Lee, I. (2009) A simple SNR representation method for AMC schemes of MIMO systems with ML detector. IEEE Transactions on Communications, 57, 2971–2976.

[6] Flahati, S., Svensson, A., Ekman, T. and Sternad, M. (2004) Adaptive modulation systems for predicted wireless channels. IEEE Transactions on Communications, 52, 307–316.

[7] Ohlmer, E. and Fettweis, G. (2009) Link adaptation in linearly precoded closed-loop MIMO-OFDM systems with linear receivers. IEEE International Conference on Communications (ICC), June 2009.

[8] Love, D. and Heath, R. (2005) Limited feedback unitary precoding for spatial multiplexing systems. IEEE Transactions on Information Theory, 51, 8, 2967–2976.

[9] Ghosh, A. and Ratasuk, R. (2011) Essentials of LTE and LTE-A, Cambridge University Press.

[10] 3GPP (2013) Physical Layer Procedures v11.3.0. TR 25.213, June 2013.

[11] Jiang, M., Prasad, N., Yue, G., and Rangarajan, S. (2011) Efficient link adaptation for precoded multi-rank transmission and turbo SIC receivers. IEEE ICC, 2011.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset