Main Content

lteULPMISelect

PUSCH precoder matrix indication calculation

Description

example

pmi = lteULPMISelect(ue,chs,hest,noiseest) performs PUSCH precoder matrix indication (PMI) calculation for given UE-specific settings, ue, channel configuration structure, chs, channel estimate resource array, hest, and receiver noise variance, noiseest. The output, pmi, is a scalar containing the PMI selected for closed-loop transmission.

hest is a 4-D array of size M-by-N-by-NRxAnts-by-NTxAnts, where M is the number of subcarriers, N is the number of SC-FDMA symbols, NRxAnts is the number of receive antennas, and NTxAnts is the number of transmit antennas.

noiseest is a scalar, an estimate of the received noise power spectral density.

pmi = lteULPMISelect(ue,chs,hest,noiseest,refgrid) provides an additional input refgrid, a 3-D M-by-N-by-NTxAnts array containing known transmitted data symbols in their correct locations. All other locations i.e. DRS Symbols and unknown data symbol locations should be represented by a NaN. This is the same array as the additional refgrid input described for the lteULChannelEstimate function. For PMI selection the symbols in refgrid are ignored, but the non-NaN RE locations are used as RE locations at which to sample the channel estimate and perform PMI estimation. This approach can be used to provide a refgrid containing for example the SRS RE locations created on all NTxAnts, allowing for full-rank channel estimation for the purposes of PMI selection when the PUSCH is transmitted with less than full rank.

pmi = lteULPMISelect(ue,chs,hest,noiseest,refgrid,cec) accepts channel estimator configuration structure cec containing the field Reference.

Reference = 'None' will generate no internal reference signals, and the PMI estimation can be performed on arbitrary known REs as given by the refgrid argument. This approach can be used to provide a refgrid containing for example the SRS signals created on all NTxAnts, allowing for full-rank PMI estimation for the purposes of PMI selection when the PUSCH is transmitted with less than full rank. Reference = 'Antennas' or Reference = 'Layers' will use the PUSCH DMRS RE indices as reference locations for PMI estimation; additional references can still be provided in refgrid.

Examples

collapse all

This example creates an empty resource grid for RMC A3-2 and amend it for MIMO configuration.

Initialize ue specific parameter structure and create an empty resource grid for RMC A3-2 and amend it for MIMO configuration.

ue = lteRMCUL('A3-2');
ue.NTxAnts = 4; 
ue.PUSCH.NLayers = 2;
rgrid = lteULResourceGrid(ue);
rgrid(ltePUSCHDRSIndices(ue,ue.PUSCH)) = ltePUSCHDRS(ue,ue.PUSCH);

Generate modulated waveform.

txWaveform = lteSCFDMAModulate(ue,rgrid);

Configure a fading channel.

chcfg.Seed = 100;
chcfg.DelayProfile = 'EPA';
chcfg.NRxAnts = 2;
chcfg.InitTime = 100;
chcfg.InitPhase = 'Random';
chcfg.ModelType = 'GMEDS';
chcfg.NTerms = 16;
chcfg.NormalizeTxAnts = 'On';
chcfg.NormalizePathGains = 'On';
chcfg.DopplerFreq = 50.0;
chcfg.MIMOCorrelation = 'Low';
chcfg.SamplingRate = 15360000;

Filter the transmit waveform through a fading channel and perform SC-FDMA demodulation.

rxWaveform = lteFadingChannel(chcfg,txWaveform);
rxSubframe = lteSCFDMADemodulate(ue,rxWaveform);

Estimate the corresponding channel and the noise power spectral density on the reference signal subcarriers.

cec = struct('FreqWindow',12,'TimeWindow',1,'InterpType','cubic');
cec.PilotAverage = 'UserDefined';
cec.Reference = 'Antennas';

[hest,noiseEst] = lteULChannelEstimate(ue,ue.PUSCH,cec,rxSubframe);

Use this estimate to calculate the precoder matrix indication (PMI).

pmi = lteULPMISelect(ue,ue.PUSCH,hest,noiseEst)
pmi = 4

Input Arguments

collapse all

UE-specific settings, specified as a scalar structure with the following fields.

Number of uplink (UL) resource blocks (RBs), specified as a scalar integer.

Data Types: double

Cyclic prefix length, specified as 'Normal' or 'Extended'.

Data Types: char | string

Number of transmission antennas, specified as 1, 2, or 4.

Data Types: double

Data Types: struct

Channel configuration structure, specified as a scalar structure with the following fields.

Physical Resource Block indices, specified as a numeric column matrix. PRBSet can be a 1- or 2-column matrix, containing the 0-based Physical Resource Block indices (PRBs) corresponding to the resource allocations for this PUSCH.

Data Types: double

Number of transmission layers, specified as 1, 2, 3, or 4.

Data Types: double

Data Types: struct

Channel estimate, specified as a 4-D numeric array of size M-by-N-by-NRxAnts-by-NTxAnts. M is the number of subcarriers, N is the number of SC-FDMA symbols, NRxAnts is the number of receive antennas and NTxAnts is the number of transmit antennas.

Data Types: double
Complex Number Support: Yes

Receiver noise variance, specified as a numeric scalar. It is an estimate of the received noise power spectral density.

Data Types: double

Transmitted data symbols, specified as a 3-D numeric array. refgrid is an M-by-N-by-NTxAnts array containing known symbols in their correct locations.

Data Types: double
Complex Number Support: Yes

Channel estimator configuration, specified as a scalar structure with the following fields.

Point of reference (indices to internally generate) for PMI estimation. Reference = 'None' generates no internal reference signals, and the PMI estimation can be performed on arbitrary known REs as given by the refgrid argument. Reference = 'Antennas' or Reference = 'Layers' uses the PUSCH DMRS RE indices as reference locations for PMI estimation; additional references can still be provided in refgrid.

Data Types: char | string

Data Types: struct

Output Arguments

collapse all

Precoder matrix indication selected for closed-loop transmission, returned as a numeric scalar between 0 and 23.

Version History

Introduced in R2014a