LTE System Toolbox

Release 10 PDSCH Enhanced UE-Specific Beamforming

This example demonstrates the Release 10 UE-specific beamforming capability of the LTE System Toolbox™ and shows how an appropriate choice of beamforming matrix leads to better performance.

Introduction

Release 10 allows for transmission of up to 8 layers on antenna ports 7-14 (TS36.213, Section 7.1.5B [ 1 ]). Transmissions in this scheme are made on one or more layers with a reference signal (port) for each layer, and can be beamformed onto any number of transmission antennas using any appropriately-dimensioned beamforming matrix; the choice of the number of transmission antennas and beamforming matrix values are not specified in the standard.

This example shows the Error Vector Magnitude (EVM) improvement achieved when using Precoding Matrix Indicator (PMI) feedback based on channel state information reference signal. A waveform with Physical Downlink Shared Channel (PDSCH) information is created and passed through a noisy fading channel. The received waveform is demodulated, resulting in a received resource grid for each receive antenna. An estimate of the channel is then used to decode the PDSCH, calculate the SNR and singular values of the channel and select an appropriate precoding matrix. The EVM of the received signal is calculated and used to estimate the effective channel SNR. This process is carried out with and without Channel State Information (CSI) and Reference Signal (RS) based PMI feedback to demonstrate the impact on performance.

Channel Estimator Configuration

cec = struct;                       % Channel estimation config structure
cec.PilotAverage = 'UserDefined';   % Type of pilot symbol averaging
cec.FreqWindow = 1;                 % Frequency window size
cec.TimeWindow = 2;                 % Time window size
cec.InterpType = 'Cubic';           % 2D interpolation type
cec.InterpWindow ='Centered';       % Interpolation window type
cec.InterpWinSize = 1;              % Interpolation window size

Reference Measurement Channel Configuration

Generate Reference Measurement Channel (RMC) configuration structure for RMC R.5; amended to create only one subframe and 5 Resource Blocks (RBs), and use 8 antennas.

Release 10 UE-specific beamforming capability is parameterized within the LTE System Toolbox as TxScheme = 'Port7-14' in conjunction with the appropriate choice of the number of layers NLayers. The number of transmission antennas is represented by the PDSCH configuration field NTxAnts; the beamforming matrix is represented by the PDSCH configuration field W.

rmc = struct;                      % RMC config structure
rmc.RC ='R.5';                     % Base configuration on RMC R.5
rmc.DuplexMode = 'TDD';            % User Time Division Duplex (TDD)
rmc.TotSubframes = 1;              % Configure a single subframe

% Generate full configuration and amend
rmc = lteRMCDL(rmc);
rmc.NDLRB = 27;                    % 27 Resource Blocks
rmc.NCellID = 10;                  % Cell identity 10
rmc.PDSCH.TxScheme = 'Port7-14';   % Up to 8 layer transmission, ports 7-14
rmc.PDSCH.NTxAnts = 8;             % Beamforming onto 8 antennas
rmc.PDSCH.NLayers = 2;             % 2 layers for beamforming
rmc.PDSCH.NSCID = 0;               % Scrambling identity 0
rmc.CSIRefP = 8;                   % 8 CSI-RS ports
rmc.CSIRSConfig = 0;               % CSI-RS configuration 0
rmc.CSIRSPeriod = 'On';            % Configure CSI-RS always 'on'
rmc.ZeroPowerCSIRSPeriod = 'Off';  % Configure Zero Power CSI-RS 'off'
rmc.PDSCH.PRBSet = (4:8).';        % 5 allocated RBs
rmc.PDSCH.PMIMode = 'Wideband';    % Wideband PMI mode
% Codebook subset definition allowing all codebook entries
rmc.PDSCH.CodebookSubset = '0x1FFFFFFFFFFFFFFFFFFFFFFFFFFF';

Channel Configuration

The fading channel is configured with an Extended Vehicular A (EVA) profile for 3 receive antennas.

channel = struct;                   % Channel config structure
channel.Seed = 8;                   % Random channel seed
channel.NRxAnts = 3;                % 3 receive antennas
channel.DelayProfile = 'EVA';       % Delay profile
channel.DopplerFreq = 5.0;          % Doppler frequency in Hz
channel.MIMOCorrelation = 'Medium'; % Multi-antenna correlation
channel.NTerms = 16;                % Oscillators used in fading model
channel.ModelType = 'GMEDS';        % Rayleigh fading model type
channel.InitTime = 0.0;             % Initial time
channel.InitPhase = 'Random';       % Random initial phases
channel.NormalizePathGains = 'On';  % Normalize delay profile power
channel.NormalizeTxAnts = 'On';     % Normalize for transmit antennas

Simulation Loop

The simulation is run twice to demonstrate the performance gain when using CSI-RS-based PMI feedback. Two plots are produced:

  • The PDSCH receive constellation when transmitting on 2 layers, each on 1 out of 8 transmit antennas

  • The PDSCH receive constellation when transmitting on 8 antennas with a beamforming matrix W which is matched to the channel response. This is chosen using CSI-RS-based PMI feedback.

The singular values of each of the two transmissions are also shown, with the channel response being averaged across all allocated PDSCH Resource Elements (REs). These singular values are combined to give the effective SNR of the channel. Finally the SNR of the received symbols is estimated using a measure of the EVM between the transmitted and received PDSCH symbols. These numerical results show an improvement in SNR of approximately 2dB with the beamforming matrix W chosen by CSI-RS-based PMI feedback.

for loopIdx = 1:2 % Transmit without and with CSI-RS-based PMI feedback

    % Configure random number generators
    rng('default')

    % Configure labels for each simulation loop
    if (loopIdx == 1)
        label = '8 antenna transmission, 1 antenna for each layer';
    else
        label = '8 antenna transmission with CSI-RS-based PMI feedback';
    end

    % Create beamforming matrix W: in the first simulation loop transmit
    % each layer on 1 out of the 8 antennas, and in the second simulation
    % loop transmit on 2 beams (layers) matched to the channel response
    % using CSI-RS-based PMI feedback
    if (loopIdx == 1)
        rmc.PDSCH.W = [1 0 0 0 0 0 0 0; 0 0 0 0 1 0 0 0]/sqrt(2);
    else
        rmc.PDSCH.W = lteCSICodebook(rmc.PDSCH.NLayers, ...
            rmc.PDSCH.NTxAnts, PMI(1), PMI(2)).';
    end

    % Generate transmission without PDSCH, onto 1st of 8 antenna planes
    % (note that CellRefP = 1 for this RMC). Transmission without PDSCH
    % is achieved by passing empty codeword vector into lteRMCDLTool.
    [dummy, txGrid, rmcinfo] = lteRMCDLTool(rmc, []);
    channel.SamplingRate = rmcinfo.SamplingRate;

    % Generate UE-specific reference signal (UE-RS / DMRS) indices and
    % symbols. Note that the symbols are already precoded and the indices
    % refer to the transmission antennas
    dmrsIndices = lteDMRSIndices(rmc,rmc.PDSCH);
    dmrsSymbols = lteDMRS(rmc,rmc.PDSCH);

    % Map UE-specific reference signal into transmit grid
    txGrid(dmrsIndices) = dmrsSymbols;

    % Generate PDSCH indices and symbols (random data)
    [pdschIndices, pdschDims] = ltePDSCHIndices(rmc, rmc.PDSCH, ...
        rmc.PDSCH.PRBSet);
    pdschSymbols = ltePDSCH(rmc, rmc.PDSCH, randi([0 1], pdschDims.G, 1));

    % Map PDSCH into grid transmit grid
    txGrid(pdschIndices) = pdschSymbols;

    % In the first simulation loop, generate and map the CSI-RS into the
    % grid so that CSI-RS-based PMI estimation can be performed
    if (loopIdx == 1)
        csiRsIndices = lteCSIRSIndices(rmc);
        csiRsSymbols = lteCSIRS(rmc);
        txGrid(csiRsIndices) = csiRsSymbols;
    end

    % OFDM modulation: The additional 25 samples added to the end of the
    % waveform are to cover the range of delays expected from the channel
    % modeling (a combination of implementation delay and channel delay
    % spread)
    [txWaveform, ofdmDims] = lteOFDMModulate(rmc, txGrid, 0);
    txWaveform = [txWaveform; zeros(25, rmc.PDSCH.NTxAnts)]; %#ok

    % Fading channel
    rxWaveform = lteFadingChannel(channel, txWaveform);

    % Create and apply additive white Gaussian noise
    if (loopIdx == 1)
        SNRdB = 27;
        SNR = 10^(SNRdB/20);
        N = 1/(sqrt(2.0*rmc.PDSCH.NTxAnts*double(ofdmDims.Nfft))*SNR);
        v = N*complex(randn(size(rxWaveform)), randn(size(rxWaveform)));
    end
    rxWaveform = rxWaveform + v;

    % Perform synchronization
    offset = lteDLFrameOffset(rmc, rxWaveform);
    rxWaveform = rxWaveform(1+offset:end, :);

    % Perform OFDM demodulation on the received data to recreate the
    % resource grid
    rxGrid = lteOFDMDemodulate(rmc, rxWaveform);

    % Channel estimation via UE-specific RS for PDSCH reception
    cec.Reference = 'DMRS';
    [hest, nest] = lteDLChannelEstimate(rmc, rmc.PDSCH, cec, rxGrid);

    % Equalize (back to layers) and demodulate the PDSCH.
    % Extract REs corresponding to the 2 layers of the PDSCH from the given
    % subframe across all receive antennas and channel estimates.
    ind = ltePDSCHIndices(rmc, rmc.PDSCH, rmc.PDSCH.PRBSet);
    [pdschRx, pdschHest] = lteExtractResources(ind, rxGrid, hest);
    [rxBits, rxSymbols] = ltePDSCHDecode(rmc, rmc.PDSCH, ...
        pdschRx, pdschHest, nest);

    % Compute singular values of the channel and calculate SNR
    H = squeeze(mean(pdschHest));
    d = svd(H);
    fprintf('%s:\n\n', label);
    svdb = sprintf('     %0.2fdB', 20*log10(d));
    fprintf('       Channel singular values:%s\n', svdb);
    fprintf('         Effective channel SNR:     %0.2fdB\n', ...
        SNRdB+10*log10(rmc.PDSCH.NLayers)+10*log10(sum(d.^2)));

    % Regenerate PDSCH from hard bit decisions and demodulate to estimate
    % transmitted symbols
    remod = ltePDSCH(rmc, rmc.PDSCH, rxBits{1}>0);
    [rxBitsRef, rxSymbolsRef] = ltePDSCHDecode(rmc, rmc.PDSCH, remod);

    % Use EVM measurement to estimate SNR
    evm = lteEVM(rxSymbols{1}, rxSymbolsRef{1});
    SNRest = 20*log10(1/evm.RMS);
    fprintf('SNR estimate from receiver EVM:     %0.2fdB\n\n',SNRest);

    % Now compute PMI (via CSI-RS) for use in 2nd simulation loop. Channel
    % realization is the same in the second simulation loop
    if (loopIdx == 1)
        % Channel estimation via CSI-RS for PMI selection
        cec.Reference = 'CSIRS';
        [hestPMI, nestPMI] = lteDLChannelEstimate(rmc, rmc.PDSCH, ...
            cec, rxGrid);
        % PMI selection
        PMI = ltePMISelect(rmc, rmc.PDSCH, hestPMI, nestPMI);
    end

    % Plot received constellation
    figure(loopIdx);
    plot(rxSymbols{1}, 'o', 'MarkerEdgeColor', [0.75 0 0], ...
        'MarkerFaceColor', [1 0.25 0.25], 'MarkerSize',3);
    axis([-1.25 1.25 -1.25 1.25]);
    title(label);

end
8 antenna transmission, 1 antenna for each layer:

       Channel singular values:     -9.17dB     -14.67dB
         Effective channel SNR:     21.92dB
SNR estimate from receiver EVM:     21.45dB

8 antenna transmission with CSI-RS-based PMI feedback:

       Channel singular values:     -5.73dB     -10.42dB
         Effective channel SNR:     25.55dB
SNR estimate from receiver EVM:     24.92dB

Selected Bibliography

  1. 3GPP TS 36.213