# nrEqualizeMMSE

Minimum mean-squared error (MMSE) equalization

## Description

`[`

applies MMSE equalization to the extracted resource elements of a physical channel
`eqSym`

,`csi`

]
= nrEqualizeMMSE(`rxSym`

,`hest`

,`nVar`

)`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`

.

## Examples

### Perform MMSE Equalization for PBCH

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');

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');

## Input Arguments

`rxSym`

— Extracted resource elements

2-D numeric matrix

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

`hest`

— Estimated channel information

3-D numeric array

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

`nVar`

— Estimated noise variance

real nonnegative scalar

Estimated noise variance, specified as a real nonnegative scalar.

**Data Types: **`double`

## Output Arguments

`eqSym`

— Equalized symbols

2-D numeric matrix

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

`csi`

— Soft channel state information

2-D numeric matrix

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™.

### GPU Arrays

Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™. (since R2024a)

The `nrEqualizeMMSE`

function
fully supports GPU arrays. To run the function on a GPU, specify the input data as a `gpuArray`

(Parallel Computing Toolbox). For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

## Version History

**Introduced in R2018b**

### R2024a: GPU array support

The `nrEqualizeMMSE`

function now supports GPU arrays. For more
information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)