wlanNonHTOFDMDemodulate
Syntax
Description
Examples
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
Input Arguments
rx
— Received time-domain signal
complex-valued matrix
Received time-domain signal, specified as a complex-valued matrix of size Ns-by-Nr.
Ns is the number of time-domain samples. If Ns is not an integer multiple of the OFDM symbol length, Ls, for the specified field, then the function ignores the remaining
mod(Ns,Ls)
symbols.Nr is the number of receive antennas.
Data Types: single
| double
Complex Number Support: Yes
field
— Field to be demodulated
'L-LTF'
| 'L-SIG'
| 'NonHT-Data'
Field to be demodulated, specified as one of these values.
'L-LTF'
— Demodulate legacy long training field (L-LTF).'L-SIG'
— Demodulate the legacy signaling (L-SIG) field.'NonHT-Data'
— Demodulate the non-HT Data field.
Data Types: char
| string
cfg
— Non-HT transmission parameters
wlanNonHTConfig
object
Non-HT transmission parameters, specified as a wlanNonHTConfig
object.
bandwidth
— Channel bandwidth
'CBW5'
| 'CBW10'
| 'CBW20'
| 'CBW40'
| 'CBW80'
| 'CBW160'
Channel bandwidth, specified as one of these values.
'CBW5'
— Channel bandwidth of 5 MHz'CBW10'
— Channel bandwidth of 10 MHz'CBW20'
— Channel bandwidth of 20 MHz'CBW40'
— Channel bandwidth of 40 MHz'CBW80'
— Channel bandwidth of 80 MHz'CBW160'
— Channel bandwidth of 160 MHz
Data Types: char
| string
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: symOffset=0.5
OFDMSymbolOffset
— 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.
Example: 0.45
Data Types: double
OversamplingFactor
— Oversampling factor
1
(default) | scalar greater than 1
Oversampling factor, specified as a scalar greater than or equal to 1. The oversampled cyclic prefix length must be an integer number of samples. For more information, see FFT-Based Oversampling.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Output Arguments
sym
— Demodulated frequency-domain signal
complex-valued array
Demodulated frequency-domain signal, returned as a complex-valued array of size Nsc-by-Nsym-by-Nr.
Nsc is the number of active occupied subcarriers in the demodulated field.
Nsym is the number of OFDM symbols.
Nr is the number of receive antennas.
Data Types: single
| double
Complex Number Support: Yes
Algorithms
FFT-Based Oversampling
An oversampled signal is a signal sampled at a frequency that is higher than the Nyquist rate. WLAN signals maximize occupied bandwidth by using small guardbands, which can pose problems for anti-imaging and anti-aliasing filters. Oversampling increases the guardband width relative to the total signal bandwidth, which increases the number of samples in the signal.
This function performs oversampling by using a larger IFFT and zero pad when generating an OFDM waveform. This diagram shows the oversampling process for an OFDM waveform with NFFT subcarriers made up of Ng guardband subcarriers on either side of Nst occupied bandwidth subcarriers.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2020bR2024a: FFT-based oversampling
The function now supports FFT-based oversampling. To specify an oversampling factor, use
the OversamplingFactor
name-value argument.
R2023b: Single precision support
This function supports single-precision values for its numeric input arguments.
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)