Main Content

wlanHEDataNoiseEstimate

Noise estimation using HE-Data field

Since R2023b

Description

nest = wlanHEDataNoiseEstimate(X,chanEstSSPilots,cfgHE) estimates the variance of additive white Gaussian noise in a high-efficiency (HE) transmission configured by cfgHE. For the estimate, the function uses the demodulated pilot symbols in the HE-Data field, X, and the single-stream channel estimates at pilot subcarriers, chanEstSSPilots. The noise estimate is averaged over the number of OFDM symbols and receive antennas.

example

nest = wlanHEDataNoiseEstimate(X,chanEstSSPilots,cfgMU,ruNumber) specifies the number of a resource unit (RU). To estimate noise for an HE multi-user (HE MU) packet, use this syntax.

example

Examples

collapse all

Create a configuration object for an HE SU packet with a channel bandwidth of 160 MHz. Set an initial signal-to-noise ratio of 10 dB.

cfgHE = wlanHESUConfig;
cfgHE.ChannelBandwidth = "CBW160";
snr = 10;

Extract the OFDM information of the HE-Data field in the configuration. Change the signal-to-noise ratio to remove the noise contribution from the null subcarriers.

ofdmInfo = wlanHEOFDMInfo("HE-Data",cfgHE);
snrValue = snr-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

Extract the field indices that correspond to the HE-LTF and the HE-Data field.

indHELTF = wlanFieldIndices(cfgHE,"HE-LTF");
indData = wlanFieldIndices(cfgHE,"HE-Data");

Use the getPSDULength object function to get the PSDU length of the configuration in bytes. Multiply by eight to convert the unit of length to bits.

cfgLength = getPSDULength(cfgHE)*8;

Generate a random sequence of bits to transmit. The number of bits is equal to the PSDU length.

txBits = randi([0 1],cfgLength,1);

Generate a time-domain waveform for the configuration and bits. Pass the waveform through an AWGN channel.

tx = wlanWaveformGenerator(txBits,cfgHE);
rx = awgn(tx,snrValue);

Extract the indices of the received waveform that correspond to the HE-LTF. Demodulate the HE-LTF and perform channel estimation at the single-stream pilots.

rxHELTF = rx(indHELTF(1):indHELTF(2),:);
heltfDemod = wlanHEDemodulate(rxHELTF,"HE-LTF",cfgHE);
[~,chanEstSSPilots] = wlanHELTFChannelEstimate(heltfDemod,cfgHE);

Extract the indices of the received waveform that correspond to the HE-Data field. Demodulate the HE-Data field and extract the demodulated symbols that correspond to the pilot subcarriers.

rxData = rx(indData(1):indData(2),:);
demodSym = wlanHEDemodulate(rxData,"HE-Data",cfgHE);
X = demodSym(ofdmInfo.PilotIndices,:,:);

Estimate the noise power of X from the channel estimate at the pilot symbols.

nest = wlanHEDataNoiseEstimate(X,chanEstSSPilots,cfgHE);

Extract the demodulated symbols that correspond to the data subcarriers. Recover the received bits from the demodulated data field and verify that they match the transmitted bits.

dataDemod = demodSym(ofdmInfo.DataIndices,:,:);
rxBits = wlanHEDataBitRecover(dataDemod,nest,cfgHE);
disp(isequal(txBits,rxBits))
   1

Create a configuration object for an HE MU packet. Set the allocation index to 96. This setting specifies a configuration with two users and a 20 MHz channel bandwidth. The two users each have a 106-tone RU.

cfgMU = wlanHEMUConfig(96);

Set an initial signal-to-noise ratio of 30 dB.

snr = 30;

Extract the OFDM information that corresponds to the first resource unit and the HE-Data field. Change the signal-to-noise ratio to remove the noise contribution from the null subcarriers.

ruNumber = 1;
ofdmInfo = wlanHEOFDMInfo("HE-Data",cfgMU,ruNumber);
snrValue = snr-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

Extract the field indices that correspond to the HE-LTF and the HE-Data field.

indHELTF = wlanFieldIndices(cfgMU,"HE-LTF");
indData = wlanFieldIndices(cfgMU,"HE-Data");

Use the getPSDULength object function to get the PSDU length of the configuration in bytes. Multiply by eight to convert the unit of length to bits.

cfgLength = getPSDULength(cfgMU)*8;

Generate a random sequence of bits to transmit. The number of bits is equal to the PSDU length of the first RU.

txBits = randi([0 1],cfgLength(1),1);

Generate a time-domain waveform for the configuration and bits. Pass the waveform through an AWGN channel.

tx = wlanWaveformGenerator(txBits,cfgMU);
rx = awgn(tx,snrValue);

Extract the indices of the received waveform that correspond to the HE-LTF. Demodulate the HE-LTF and perform channel estimation at the single-stream pilots.

rxHELTF = rx(indHELTF(1):indHELTF(2),:);
heltfDemod = wlanHEDemodulate(rxHELTF,"HE-LTF",cfgMU,ruNumber);
[~,chanEstSSPilots] = wlanHELTFChannelEstimate(heltfDemod,cfgMU,ruNumber);

Extract the indices of the received waveform that correspond to the EHT-Data field. Demodulate the EHT-Data field and extract the demodulated symbols that correspond to the pilot subcarriers.

rxData = rx(indData(1):indData(2),:);
demodSym = wlanHEDemodulate(rxData,"HE-Data",cfgMU,ruNumber);
X = demodSym(ofdmInfo.PilotIndices,:,:);

Estimate the noise power from the channel estimate at the pilot symbols.

nest = wlanHEDataNoiseEstimate(X,chanEstSSPilots,cfgMU,ruNumber);

Extract the demodulated symbols that correspond to the data subcarriers. Recover the received bits from the demodulated data field and verify that they match the transmitted bits.

dataDemod = demodSym(ofdmInfo.DataIndices,:,:);
userIndex = ruNumber;
rxBits = wlanHEDataBitRecover(dataDemod,nest,cfgMU,userIndex);
disp(isequal(txBits,rxBits))
   1

Input Arguments

collapse all

Demodulated EHT-Data pilot symbols, specified as an NSP-by-NSYM-by-NR array. NSP is the number of pilot subcarriers, NSYM is the number of demodulated HE-Data symbols, and NR is the number of receive antennas.

Data Types: single | double
Complex Number Support: Yes

Channel estimate at each pilot subcarrier location for each HE long training field (HE-LTF) symbol, returned as an NSP-by-NLTF-by-NR array. NSP is the number of pilot subcarriers, NLTF is the number of demodulated HE-LTF OFDM symbols, and NR is the number of receive antennas. The function assumes that this estimate is performed with one space-time stream at the transmitter.

Data Types: single | double
Complex Number Support: Yes

HE physical layer (PHY) format configuration, specified as an object of type wlanHESUConfig, wlanHETBConfig, or wlanHERecoveryConfig.

HE MU format configuration, specified as a wlanHEMUConfig object.

Number of the RU of interest, specified as a positive integer. The RU number specifies the location of the RU within the channel. For example, consider an 80 MHz transmission with two 242-tone RUs and one 484-tone RU, in order of absolute frequency. For this allocation:

  • RU number 1 corresponds to the 242-tone RU in the 20 MHz subchannel at the lowest absolute frequency (size 242, index 1).

  • RU number 2 corresponds to the 242-tone RU in the 20 MHz subchannel at the next lowest absolute frequency (size 242, index 2).

  • RU number 3 corresponds to the 484-tone RU in the 40 MHz subchannel at the highest absolute frequency (size 484, index 2).

Output Arguments

collapse all

Noise variance estimate, returned as a positive real scalar.

Data Types: single | double

More About

collapse all

References

[1] IEEE Std 802.11ax-2021 (Amendment to IEEE Std 802.11-2020). “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications. Amendment 1: Enhancements for High Efficiency WLAN.” IEEE Standard for Information Technology — Telecommunications and Information Exchange between Systems. Local and Metropolitan Area Networks — Specific Requirements.

Extended Capabilities

expand all

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

Version History

Introduced in R2023b