Main Content

wlanVHTEqualize

Equalize demodulated VHT field symbols

Since R2025a

Description

[eqSym,csi] = wlanVHTEqualize(sym,chEst,noiseEst,cfg,field) equalizes the demodulated very high-throughput (VHT) field symbols sym from the specified field. The function uses the channel estimate chEst, the noise estimate noiseEst, and the parameters specified in cfg.

example

[eqSym,csi] = wlanVHTEqualize(___,userIdx) specifies the user index in combination with the previous syntax. This syntax applies only when field is "VHT-SIG-B" or "VHT-Data", the STBC property of the cfg input is false, and the NumSpaceTimeStreams property of the cfg input is a vector.

example

Examples

collapse all

Create a VHT configuration object with default parameters. Generate a time-domain waveform for the configuration.

cfg = wlanVHTConfig;
tx = wlanWaveformGenerator([1;0;0;1],cfg);

Pass the waveform through an AWGN channel with a signal-to-noise ratio of 15 dB.

rx = awgn(tx,15);

Get indices for the L-LTF. Use the indices to isolate the part of the received waveform that corresponds to the L-LTF.

indLLTF = wlanFieldIndices(cfg,"L-LTF");
rxLLTF = rx(indLLTF(1):indLLTF(2),:);

Demodulate the L-LTF. Use the demodulated symbols to estimate the channel and noise at the L-LTF.

demodLLTF = wlanVHTDemodulate(rxLLTF,"L-LTF",cfg);
chEst = wlanLLTFChannelEstimate(demodLLTF,cfg);
noiseEst = wlanLLTFNoiseEstimate(demodLLTF);

Isolate the part of the received waveform that corresponds to the L-SIG field.

field = "L-SIG";
indLSIG = wlanFieldIndices(cfg,field);
rxLSIG = rx(indLSIG(1):indLSIG(2),:);

Demodulate the L-SIG field.

sym = wlanVHTDemodulate(rxLSIG,field,cfg);

Equalize the L-SIG field using the channel and noise estimates you obtained at the L-LTF.

[eqSym,csi] = wlanVHTEqualize(sym,chEst,noiseEst,cfg,field);

Create a VHT configuration object with four users, four transmit antennas, and one space-time stream per user.

cfg = wlanVHTConfig(NumUsers=4,UserPositions=[0 1 2 3], ...
    NumTransmitAntennas=4,NumSpaceTimeStreams=[1 1 1 1],GroupID=1);

Create a four-element cell array of PSDU bits. Each element of the array contains the bits for one user.

psdu = cell(1,cfg.NumUsers);
for i = 1:cfg.NumUsers
    psdu{i} = randi([0 1],cfg.PSDULength(i)*8,1);
end

Generate time-domain waveforms for the VHT-LTF and VHT-Data field of the configuration.

txVHTLTF = wlanVHTLTF(cfg);
txData = wlanVHTData(psdu,cfg);

Pass both waveforms through an AWGN channel with a signal-to-noise ratio of 5 dB, returning the noise variance.

[rxVHTLTF,noiseEst] = awgn(txVHTLTF,5);
rxData = awgn(txData,5);

Demodulate the VHT-LTF. Use the demodulated symbols to estimate the channel at the VHT-LTF.

demodVHTLTF = wlanVHTDemodulate(rxVHTLTF,"VHT-LTF",cfg);
chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,cfg);

Demodulate the VHT-Data field.

field = "VHT-Data";
sym = wlanVHTDemodulate(rxData,field,cfg);

Equalize the demodulated symbols for the first user.

userIdx = 1;
[eqSym,csi] = wlanVHTEqualize(sym,chEst,noiseEst,cfg,field,userIdx);

Input Arguments

collapse all

Demodulated VHT field symbols, specified as a 3-D array. The size of the array is NSC-by-NSYM-by-NR, where NSC is the number of subcarriers, NSYM is the number of OFDM symbols, and NR is the number of receive antennas.

Data Types: double | single
Complex Number Support: Yes

Channel estimate, specified as a matrix or 3-D array. The size of this input must be:

  • NSC-by-1-by-NR if the field input is "L-SIG" or "VHT-SIG-A".

  • NSC-by-NSTS-by-NR if the field input is "VHT-SIG-B" or "VHT-Data". If the STBC property of the cfg input is 1 (true), NSTS must be even.

NSTS is the number of space-time streams specified in the cfg input. If the NumSpaceTimeStreams property is a scalar, NSTS is equal to it. If the NumSpaceTimeStreams property is a vector, NSTS is the sum of its entries.

Data Types: double | single
Complex Number Support: Yes

Noise estimate, specified as a nonnegative real scalar. This input determines how the function equalizes the input symbols. For more information, see Equalization Methods.

Data Types: double | single

Format configuration, specified as a wlanVHTConfig object.

Field to equalize, specified as one of these values:

  • "L-SIG" — Equalize the legacy signal (L-SIG) field.

  • "VHT-SIG-A" — Equalize the VHT signal A (VHT-SIG-A) field.

  • "VHT-SIG-B" — Equalize the VHT signal B (VHT-SIG-B) field.

  • "VHT-Data" — Equalize the VHT-Data field.

Data Types: char | string

User index, specified as a positive integer.

Note

This input is required only when field is "VHT-SIG-B" or "VHT-Data", the STBC property of the cfg input is 0 (false), and the NumSpaceTimeStreams property of the cfg input is a vector. If you specify this input in any other situation, the function ignores it.

Output Arguments

collapse all

Equalized symbols, returned as a matrix or 3-D array. The size of this output depends on the value of the field input:

  • If field is "L-SIG" or "VHT-SIG-A", eqSym has size NSC-by-NSYM, where NSC is the number of data, pilot, or combined data and pilot subcarriers in a 20 MHz channel bandwidth and NSYM is the number of OFDM symbols.

  • If field is "VHT-SIG-B" or "VHT-Data", eqSym has size NSC-by-NSYM-by-NSS. NSC is the number of subcarriers in the sym input. NSYM is the number of OFDM symbols. NSS is the number of spatial streams for the user of interest. Its value varies as follows:

    • When field is "VHT-Data" and the STBC property of the cfg input is 1 (true), NSS is half of NSTS.

    • When the previous conditions are not both satisfied and the NumSpaceTimeStreams property of the cfg input is a scalar, NSS is equal to NSTS.

    • Otherwise, NSS is equal to the vector entry in the NumSpaceTimeStreams property that corresponds to the user of interest as specified by userIdx.

Data Types: double | single
Complex Number Support: Yes

Channel state information, returned as a real-valued matrix. The size of the matrix depends on the field input:

  • If field is "L-SIG" or "VHT-SIG-A", csi has size NSC-by-1, where NSC has the same value as in eqSym.

  • If field is "VHT-SIG-B" or "VHT-Data", csi has size NSC-by-NSS, where NSS has the same value as in eqSym.

Data Types: double | single

More About

collapse all

Algorithms

collapse all

References

[1] IEEE Std 802.11-2020 (Revision of IEEE Std 802.11-2016). “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.” 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 R2025a