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 R2018bR2024a: 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)