Main Content

nrEqualizeMMSE

Minimum mean-squared error (MMSE) equalization

Description

[eqSym,csi] = nrEqualizeMMSE(rxSym,hest,nVar) applies MMSE equalization to the extracted resource elements of a physical channel rxSym and returns the equalized symbols in eqSym. The equalization process uses the estimated channel information hest and the estimate of the received noise variance nVar. The function also returns the soft channel state information csi.

example

Examples

collapse all

Perform MMSE equalization on extracted resource elements of the physical broadcast channel (PBCH).

Create symbols and indices for a PBCH transmission.

ncellid = 146;
v = 0;
E = 864;
cw = randi([0 1],E,1);
pbchTxSym = nrPBCH(cw,ncellid,v);
pbchInd = nrPBCHIndices(ncellid);

Generate an empty resource array for one transmitting antenna. Populate the array with the PBCH symbols by using the generated PBCH indices.

carrier = nrCarrierConfig('NSizeGrid',20);
P = 1;
txGrid = nrResourceGrid(carrier,P);
txGrid(pbchInd) = pbchTxSym;

Perform OFDM modulation.

txWaveform = nrOFDMModulate(carrier,txGrid);

Create channel matrix and apply channel to transmitted waveform.

R = 4;
H = dftmtx(max([P R]));
H = H(1:P,1:R);
H = H / norm(H);
rxWaveform = txWaveform * H;

Create channel estimate.

hEstGrid = repmat(permute(H.',[3 4 1 2]),[240 4]);
nEst = 0.1;

Perform OFDM demodulation.

rxGrid = nrOFDMDemodulate(carrier,rxWaveform);

To prepare for PBCH decoding, use nrExtractResources to extract symbols from received and channel estimate grids. Plot the received PBCH constellation.

[pbchRxSym,pbchHestSym] = nrExtractResources(pbchInd,rxGrid,hEstGrid);
scatterplot(pbchRxSym(:),[],[],'y+');
title('Received PBCH Constellation');

Figure Scatter Plot contains an axes object. The axes object with title Received PBCH Constellation, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

Decode the PBCH with the extracted resource elements. Plot the equalized PBCH constellation.

[pbchEqSym,csi] = nrEqualizeMMSE(pbchRxSym,pbchHestSym,nEst);
pbchBits = nrPBCHDecode(pbchEqSym,ncellid,v);
scatterplot(pbchEqSym(:),[],[],'y+');
title('Equalized PBCH Constellation');

Figure Scatter Plot contains an axes object. The axes object with title Equalized PBCH Constellation, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

Input Arguments

collapse all

Extracted resource elements of a physical channel, specified as an NRE-by-R numeric matrix. NRE is the number of resource elements extracted from each K-by-L plane of the received grid. K is the number of subcarriers and L is the number of OFDM symbols. R is the number of receive antennas.

Data Types: double
Complex Number Support: Yes

Estimated channel information, specified as an NRE-by-R-by-P numeric array. NRE is the number of resource elements extracted from each K-by-L plane of the received grid. K is the number of subcarriers and L is the number of OFDM symbols. R is the number of receive antennas. P is the number of layers.

Data Types: double
Complex Number Support: Yes

Estimated noise variance, specified as a real nonnegative scalar.

Data Types: double

Output Arguments

collapse all

Equalized symbols, returned as an NRE-by-P numeric matrix. NRE is the number of resource elements extracted from each K-by-L plane of the received grid. K is the number of subcarriers and L is the number of OFDM symbols. P is the number of layers.

Data Types: double
Complex Number Support: Yes

Soft channel state information, returned as an NRE-by-P numeric matrix. NRE is the number of resource elements extracted from each K-by-L plane of the received grid. K is the number of subcarriers and L is the number of OFDM symbols. P is the number of layers. This output is a log-likelihood ratio (LLR) scaling factor that accounts for the SNR in each RE.

Data Types: double
Complex Number Support: Yes

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2018b

expand all