Main Content

wlanEHTDataNoiseEstimate

Estimate noise using EHT-Data field

Since R2023b

Description

nest = wlanEHTDataNoiseEstimate(X,chanEstSSPilots,cfg) estimates the variance of additive white Gaussian noise in an extremely high-throughput (EHT) transmission configured by cfg. For the estimate, the function uses the demodulated pilot symbols in the EHT-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 = wlanEHTDataNoiseEstimate(X,chanEstSSPilots,cfg,ruNumber) specifies the number of a resource unit (RU) or multiple resource unit (MRU). To estimate noise for an OFDMA-type EHT MU packet, use this syntax.

example

Examples

collapse all

Create a configuration object for an EHT MU packet of non-OFDMA PPDU type and a channel bandwidth of 320 MHz. Set an initial signal-to-noise ratio of 10 dB.

cfg = wlanEHTMUConfig("CBW320");
snr = 10;

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

ofdmInfo = wlanEHTOFDMInfo("EHT-Data",cfg);
snrValue = snr-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

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

indEHTLTF = wlanFieldIndices(cfg,"EHT-LTF");
indData = wlanFieldIndices(cfg,"EHT-Data");

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

cfgLength = psduLength(cfg)*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,cfg);
rx = awgn(tx,snrValue);

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

rxEHTLTF = rx(indEHTLTF(1):indEHTLTF(2),:);
ehtltfDemod = wlanEHTDemodulate(rxEHTLTF,"EHT-LTF",cfg);
[~,chanEstSSPilots] = wlanEHTLTFChannelEstimate(ehtltfDemod,cfg);

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 = wlanEHTDemodulate(rxData,"EHT-Data",cfg);
X = demodSym(ofdmInfo.PilotIndices,:,:);

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

nest = wlanEHTDataNoiseEstimate(X,chanEstSSPilots,cfg);

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 = wlanEHTDataBitRecover(dataDemod,nest,cfg);
disp(isequal(txBits,rxBits))
   1

Create a configuration object for an EHT MU packet. Set the allocation index to 43. This setting specifies a configuration with three users. Two users each have a 52-tone RU. The third user has a 106+26-tone MRU.

cfg = wlanEHTMUConfig(43);

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

snr = 30;

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

ruNumber = 2;
ofdmInfo = wlanEHTOFDMInfo("EHT-Data",cfg,ruNumber);
snrValue = snr-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

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

indEHTLTF = wlanFieldIndices(cfg,"EHT-LTF");
indData = wlanFieldIndices(cfg,"EHT-Data");

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

cfgLength = psduLength(cfg)*8;

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

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

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

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

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

rxEHTLTF = rx(indEHTLTF(1):indEHTLTF(2),:);
ehtltfDemod = wlanEHTDemodulate(rxEHTLTF,"EHT-LTF",cfg,ruNumber);
[~,chanEstSSPilots] = wlanEHTLTFChannelEstimate(ehtltfDemod,cfg,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 = wlanEHTDemodulate(rxData,"EHT-Data",cfg,ruNumber);
X = demodSym(ofdmInfo.PilotIndices,:,:);

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

nest = wlanEHTDataNoiseEstimate(X,chanEstSSPilots,cfg,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 = wlanEHTDataBitRecover(dataDemod,nest,cfg,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 EHT-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 EHT long training field (EHT-LTF) symbol, returned as an NSP-by-NLTF-by-NR array. NSP is the number of pilot subcarriers, NLTF is the number of demodulated EHT-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

Physical layer (PHY) format configuration, specified as an object of type wlanEHTMUConfig, wlanEHTTBConfig, or wlanEHTRecoveryConfig.

Number of the RU or MRU of interest, specified as a positive integer. This input specifies the location of the RU or MRU in the channel. For example, consider a 20 MHz transmission with one 106+26-tone RU, one 52+26-tone MRU, and one 26-tone RU, in order of absolute frequency. For this allocation:

  • RU 1 corresponds to the 106+26-tone MRU at the lowest absolute frequency (size 106+26, index 1).

  • RU 2 corresponds to the 52+26-tone MRU at the next lowest absolute frequency (size 52+26, index 2).

  • RU 3 corresponds to the 26-tone RU at the highest absolute frequency (size 26, index 3).

Note

  • For an OFDMA-type EHT MU PPDU, this input is required.

  • For a non-OFDMA-type EHT MU PPDU, this input is not required.

  • For an EHT trigger-based (EHT TB) PPDU, this input is not required.

  • This input is not required when you specify cfg as a wlanEHTRecoveryConfig object.

Output Arguments

collapse all

Noise variance estimate, returned as a positive real scalar.

Data Types: single | double

More About

collapse all

References

[1] IEEE P802.11be/D5.0. “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications. Amendment 8: Enhancements for Extremely High Throughput (EHT).” Draft Standard for Information Technology — Telecommunications and Information Exchange between Systems — Local and Metropolitan Area Networks — Specific Requirements, https://ieeexplore.ieee.org/document/10381585

Extended Capabilities

expand all

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

Version History

Introduced in R2023b

expand all