Recover PSDU from non-HT Data field
psdu = wlanNonHTDataBitRecover(
psdu, a column vector of physical layer service data unit
(PSDU) bits, from
sym, the demodulated and equalized orthogonal
frequency-division multiplexing (OFDM) symbols comprising the non-HT Data field of a
non-high-throughput (non-HT) waveform. The function recovers the PSDU by using noise
noiseVarEst and non-HT transmission parameters
Recover PSDU from Non-HT Data Signal
Configure and generate a non-HT time-domain waveform.
cfg = wlanNonHTConfig('MCS',4); bits = randi([0 1],8*cfg.PSDULength,1,'int8'); waveform = wlanWaveformGenerator(bits,cfg);
Transmit the waveform through an additive white Gaussian noise (AWGN) channel with a signal-to-noise ratio (SNR) of 30.
snr = 30; rxWaveform = awgn(waveform,snr);
Extract the non-HT Data field from the received waveform.
field = 'NonHT-Data'; ind = wlanFieldIndices(cfg,field); rx = rxWaveform(ind(1):ind(2),:);
Recover the frequency-domain signal by OFDM demodulating the time-domain data signal.
sym = wlanNonHTOFDMDemodulate(rx,field,cfg);
Extract the data subcarriers from the demodulated signal.
info = wlanNonHTOFDMInfo(field,cfg); sym = sym(info.DataIndices,:,:);
Recover the PSDU and confirm that it matches the transmitted PSDU.
noiseVarEst = 10^(-snr/10); psdu = wlanNonHTDataBitRecover(sym,noiseVarEst,cfg); isequal(bits,psdu)
ans = logical 1
Recover Bandwidth Signaling from Initial Scrambler State
Configure and generate a non-HT Data signal with a channel bandwidth of 160 MHz and dynamic bandwidth operation.
bandwidth = 'CBW160'; cfg = wlanNonHTConfig('ChannelBandwidth',bandwidth,'PSDULength',1, ... 'SignalChannelBandwidth',true,'BandwidthOperation','Dynamic'); bits = randi([0 1],8*cfg.PSDULength,1,'int8'); [range,~] = scramblerRange(cfg); scramInit = randi(range); y = wlanNonHTData(bits,cfg,scramInit);
Transmit the waveform through an AWGN channel with an SNR of 50.
snr = 50; noiseVarEst = 10^(-snr/10); rx = awgn(y,snr);
Recover the frequency-domain signal by OFDM demodulating the non-HT Data signal, specifying an OFDM symbol sampling offset.
field = 'NonHT-Data'; symOffset = 0.5; sym = wlanNonHTOFDMDemodulate(rx,field,bandwidth,'OFDMSymbolOffset',symOffset);
Extract the data subcarriers.
info = wlanNonHTOFDMInfo(field,bandwidth); sym = sym(info.DataIndices,:);
Recover the first 20 MHz subchannel of the PSDU, enhancing the demapping of the OFDM subcarriers by specifying channel state information. Confirm that the received and transmitted PSDUs match.
csi = ones(48,1); [psdu,scramInit] = wlanNonHTDataBitRecover(sym(1:48,:),noiseVarEst,csi,cfg); isequal(bits,psdu)
ans = logical 1
Recover and display bandwidth signaling by interpreting the scrambler state.
[bandwidth,dyn] = wlanInterpretScramblerState(scramInit)
bandwidth = 'CBW160'
dyn = logical 1
sym — Demodulated and equalized OFDM symbols
Demodulated and equalized OFDM symbols comprising the non-HT Data field, specified as a complex-valued matrix of size 48-by-Nsym, where Nsym is the number of OFDM symbols.
Complex Number Support: Yes
noiseVarEst — Noise variance estimate
Noise variance estimate, specified as a nonnegative scalar.
cfg — Non-HT transmission parameters
Non-HT transmission parameters, specified as a
csi — Channel state information
real-valued column vector
Channel state information, specified as a real-valued column vector of length 48.
symOffset — OFDM symbol sampling offset
0.75 (default) | scalar in the interval [0, 1]
OFDM symbol sampling offset, as a fraction of the cyclic prefix length, specified as a scalar in the interval [0, 1].
The value that you specify indicates the start location for OFDM demodulation relative to the beginning of the cyclic prefix.
psdu — Recovered PSDU bits
binary-valued column vector
Recovered PSDU bits, returned as a binary-valued column vector of length 8 ×
L, where L is the PSDU length in bytes. To
specify L, set the
PSDULength property of the
scramInit — Initial scrambler state
integer in the interval [1, 127] | binary-valued column vector
Initial scrambler state, returned as an integer in the interval [1, 127], or the corresponding binary-valued column vector of length 7.
Section 18.104.22.168 of specifies the scrambling and descrambling process applied to the transmitted data. The header and data fields that follow the scrambler initialization field (including data padding bits) are scrambled by XORing each bit with a length-127 periodic sequence generated by the polynomial S(x) = x7 + x4 + 1. The octets of the PSDU are placed into a bit stream, and, within each octet, bit 0 (LSB) is first and bit 7 (MSB) is last. This figure demonstrates the sequence generation and XOR operation.
Conversion from integer to bits uses left-MSB orientation. For example,
initializing the scrambler with decimal
1, the bits map to these
To generate the bit stream equivalent to a decimal, use the
function. For example, for decimal
int2bit(1,7)' ans = 0 0 0 0 0 0 1
[1; 0; 1; 1; 1; 0; 1] conveys the scrambler
initialization state of 93 as a binary-valued column vector.
 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.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Introduced in R2020b