Main Content

wlanHEMUConfig

Configure HE MU transmission

Description

The wlanHEMUConfig object is a configuration object for the WLAN high-efficiency multi-user (HE MU) packet format.

Creation

Description

cfgHEMU = wlanHEMUConfig(AllocationIndex) creates cfgHEMU, a configuration object that initializes transmit parameters for an IEEE® 802.11™ HE MU PPDU for AllocationIndex, the input resource unit allocation. For a detailed description of the HE WLAN format, see [2].

example

cfgHEMU = wlanHEMUConfig(AllocationIndex,Name,Value) sets properties using one or more name-value pairs. Enclose each property name in quotation marks. For example, wlanHEMUConfig([200 114 114 200],'LowerCenter26ToneRU',true) specifies an 80 MHz bandwidth allocation for three users on three RUs with lower center 26-tone RU allocation signaling.

At runtime, the calling function validates object settings for properties relevant to the operation of the function.

example

Properties

expand all

Resource unit (RU) allocation index for each 20 MHz subchannel. This property defines the number of RUs, the size of each RU, and the number of users assigned to each RU. For more information, see Allocation Index.

You can specify this value as an integer, a vector of integers, a string array, a character vector, or a cell array of character vectors. The format in which you specify these indices depends on how many you are specifying.

  • Specify a single allocation index using one integer in either of these forms.

    • An integer in the interval [0, 223]

    • An 8-bit binary sequence specified as a string or character vector

  • Specify multiple allocation indices using two, four, or eight integer values in any of these forms.

    • A vector of integers in the interval [0, 223]

    • An 8-bit binary sequence specified as a string array

    • An 8-bit binary sequence specified as a cell array of character vectors

    In an 80 MHz transmission, you can signal a punctured 20 MHz subchannel at any location.

    In a 160 MHz transmission, you can signal a punctured 20 or 40 MHz subchannel. You can only signal a punctured 20 MHz subchannel in the 40 MHz subchannel containing the primary 20 MHz subchannel, as shown in this figure.

    20 MHz subchannel puncturing for 160 MHz transmission

    Similarly, you can only signal a punctured 40 MHz subchannel in the 80 MHz subchannel containing the primary 20 MHz subchannel, as shown in this figure.

    40 MHz subchannel puncturing for 160 MHz transmission

    To signal a punctured 20 MHz subchannel, set the corresponding element of this property to 113. To signal a punctured 40 MHz subchannel, set the two corresponding adjacent elements to 114.

    To signal an empty HE-SIG-B user field in an HE-SIG-B content channel, set the corresponding element of this property to 114 or 115.

Note

This property is read-only after the object is created.

Data Types: double | char | string | cell

Channel bandwidth of PPDU transmission, specified as one of these values:

  • 'CBW20' – Channel bandwidth of 20 MHz

  • 'CBW40' – Channel bandwidth of 40 MHz

  • 'CBW80' – Channel bandwidth of 80 MHz

  • 'CBW160' – Channel bandwidth of 160 MHz

When you create a wlanHEMUConfig object, this property is configured based on the value to which you set the AllocationIndex property.

Note

This property is read-only after the object is created.

Data Types: char | string

Enable lower center 26-tone RU allocation signaling, specified as a numeric or logical 1 (true) or 0 (false). To enable the lower frequency center 26-tone RU, set this property to 1 (true). This property can be set during object creation only.

Dependencies

This property applies only when the AllocationIndex property defines a channel bandwidth of 80 MHz or 160 MHz and does not specify a full bandwidth allocation.

Data Types: logical

Enable upper center 26-tone RU allocation signaling, specified as a numeric or logical 1 (true) or 0 (false). To enable the upper frequency center 26-tone RU, set this property to 1 (true). This property can be set during object creation only.

Dependencies

This property applies only when the AllocationIndex property defines a channel bandwidth of 80 MHz or 160 MHz and does not specify a full bandwidth allocation.

Data Types: logical

Transmission properties of each RU in the transmission, specified as a cell array of wlanHEMURU objects. When you create a wlanHEMUConfig object, the AllocationIndex property determines this property.

Data Types: cell

Transmission properties of each user, specified as a cell array of wlanHEMUUser objects. When you create a wlanHEMUConfig object, the AllocationIndex property determines this property.

Data Types: cell

Index of primary 20 MHz subchannel in an 80 or 160 MHz transmission, specified as one of these options.

  • When the ChannelBandwidth property is 'CBW80', set this property to an integer in the interval [1, 4].

  • When the ChannelBandwidth property is 'CBW160', set this property to an integer in the interval [1, 8].

The location of the primary subchannel and the preamble puncturing pattern (defined by the AllocationIndex property) determine the bandwidth value signaled in the HE-SIG-A field of the transmission, as specified in Table 27-20 of [2].

Dependencies

This property applies only when the AllocationIndex property defines a channel bandwidth of 80 MHz or 160 MHz.

Data Types: double

Number of transmit antennas, specified as a positive integer.

Data Types: double

Cyclic shift values, in nanoseconds, of additional transmit antennas for the pre-HE fields of the waveform. The first eight antennas use the cyclic shift values specified in Table 21-10 of [1]. The remaining L antennas use the values you specify in this property, where L = NumTransmitAntennas – 8. Specify this property as one of these values:

  • An integer in the interval [–200, 0] – the wlanHEMUConfig object uses this cyclic shift value for each of the L additional antennas.

  • A row vector of length L of integers in the interval [–200, 0] – the wlanHEMUConfig object uses the kth element as the cyclic shift value for the (k + 8)th transmit antenna.

    Note

    If you specify this property as a row vector of length greater than L, the wlanHEMUConfig object uses only the first L elements. For example, if you set the NumTransmitAntennas property to 16, the wlanHEMUConfig object uses only the first L = 16 – 8 = 8 elements of this vector.

Dependencies

To enable this property, set the NumTransmitAntennas property to a value greater than 8.

Data Types: double

Enable space-time block coding (STBC) of the PPDU data field for all users, specified as a numeric or logical 1 (true) or 0 (false). STBC transmits multiple copies of the data stream across assigned antennas.

  • When you set this property to 0 (false), STBC is not applied to the data field. The number of space-time streams is equal to the number of spatial streams.

  • When you set this property to 1 (true), STBC is applied to the data field. The number of space-time streams is twice the number of spatial streams.

Dependencies

This property applies only when all of these conditions are satisfied:

  • The NumSpaceTimeStreams subproperty of each element of the User property is 2.

  • The MCS subproperty of each element of the User property is 0 (false).

  • No RU specifies multi-user multiple input/multiple output (MU-MIMO).

Data Types: logical

Guard interval (cyclic prefix) duration for the data field within a packet, in microseconds, specified as 3.2, 1.6, or 0.8.

Data Types: double

HE-LTF compression mode, specified as 4 or 2. This property indicates the type of HE-LTF, where a value of 4 or 2corresponds to four times or two times HE-LTF duration compression mode, respectively. The HE-LTF type is enumerated in Table 27-1 of [2] as:

  • 2xHE-LTF – Duration of 6.4 μs with a guard interval duration of 0.8 μs or 1.6 μs

  • 4xHE-LTF – Duration of 12.8 μs with a guard interval duration of 0.8 μs or 3.2 μs

For more information on the HE-LTF, see section 27.3.11.10 of [2].

Data Types: double

HE-SIG-B compression indicator, specified as a numeric or logical 1 (true) or 0 (false). To enable HE-SIG-B compression for a full-bandwidth 20 MHz MU-MIMO transmission, set this property to 1 (true).

Dependencies

This property applies only when you indicate a 20 MHz channel bandwidth by setting the AllocationIndex to a value in the interval [192,199].

Note

This property is not used for bandwidths of 40, 80, or 160 MHz because, at these bandwidths, the AllocationIndex alone determines if HE-SIG-B compression is used:

  • If you specify a single, full-band allocation index, the transmission uses HE-SIG-B compression. The allocation index is not signaled.

  • If you specify 2, 4, or 8 full-band allocation indices, the transmission does not use HE-SIG-B compression. The allocation indices are signaled.

For more information, see the tutorial on HE MU Transmission or the example Demonstrate SIGB Compression in HE MU Waveforms.

Data Types: logical

Modulation and coding scheme (MCS) for the HE-SIG-B field, specified as an integer in the interval [0, 5].

Data Types: double

HE-SIG-B dual-carrier modulation (DCM) indicator, specified as a numeric or logical 1 (true) or 0 (false). A value of 1 (true) indicates that the HE-SIG-B field is modulated with DCM. A value of 0 (false) indicates that the HE-SIG-B field is not modulated with DCM.

Dependencies

This property applies only when the MCS subproperty of each element of the User property is 0, 1, 3, or 4.

Data Types: logical

Uplink indication, specified as a numeric or logical 1 (true) or 0 (false). To indicate that the PPDU is sent on a downlink transmission, set this property to 0 (false). To indicate that the PPDU is sent on an uplink transmission, set this property to 1 (true).

Data Types: logical

Basic service set (BSS) color identifier, specified as an integer in the interval [0, 63].

Data Types: double

Spatial reuse indication, specified as an integer in the interval [0, 15].

Data Types: double

Duration information for transmit opportunity (TXOP) protection, specified as an integer in the interval [0, 127]. Except for the first bit, which specifies TXOP length granularity, each bit of the TXOP field of HE-SIG-A is equal to TXOPDuration. Therefore a duration in microseconds must be converted according to the procedure set out in Table 27-18 of [2].

Data Types: double

High-Doppler mode indicator, specified as a numeric or logical 0 (false) or 1 (true). To indicate high-Doppler mode in the HE-SIG-A field, set this property to 1 (true).

Dependencies

The 1 (true) value for this property is valid only when the NumSpaceTimeStreams subproperty of each element of the RU property is less than or equal to 4.

Data Types: logical

Midamble periodicity of the HE-data field, in number of OFDM symbols, specified as 10 or 20.

Dependencies

This property applies only when the HighDoppler property is 1 (true).

Data Types: double

Object Functions

getNumPostFECPaddingBitsCalculate required number of post-FEC padding bits
getPSDULengthCalculate HE or WUR PSDU length
packetFormat WLAN packet format
ruInfoResource unit allocation information
showAllocationResource unit allocation
transmitTimePacket transmission time

Examples

collapse all

Create a 20 MHz multiuser HE configuration object with the allocation index set to 0. An allocation index of 0 specifies nine 26-tone RUs in a 20 MHz channel.

cfgMU = wlanHEMUConfig(0);
for i=1:numel(cfgMU.User)
    % Set the APEPLength of each user
    cfgMU.User{i}.APEPLength = 100;
end

Display the configuration object properties for the fourth user.

cfgMU.User{4}
ans = 
  wlanHEMUUser with properties:

              APEPLength: 100
                     MCS: 0
     NumSpaceTimeStreams: 1
                     DCM: 0
           ChannelCoding: 'LDPC'
                   STAID: 0
    NominalPacketPadding: 0
    PostFECPaddingSource: 'mt19937ar with seed'
      PostFECPaddingSeed: 4

   Read-only properties:
                RUNumber: 4

Create an HE MU configuration object for a 40 MHz transmission with an allocation index of 11000000 for each 20 MHz subchannel. This configuration specifies two 242-tone RUs, each with one user.

cfgHEMU = wlanHEMUConfig(["11000000" "11000000"],'NumTransmitAntennas',2);

Configure the first RU and the first user.

cfgHEMU.RU{1}.SpatialMapping = 'Direct';
cfgHEMU.User{1}.APEPLength = 1e3;
cfgHEMU.User{1}.MCS = 2;
cfgHEMU.User{1}.NumSpaceTimeStreams = 2;
cfgHEMU.User{1}.ChannelCoding = 'LDPC';
cfgHEMU.User{1}.NominalPacketPadding = 16;

Configure the second RU and the second user.

cfgHEMU.RU{2}.SpatialMapping = 'Fourier';
cfgHEMU.User{2}.APEPLength = 500;
cfgHEMU.User{2}.MCS = 3;
cfgHEMU.User{2}.NumSpaceTimeStreams = 1;
cfgHEMU.User{2}.ChannelCoding = 'LDPC';
cfgHEMU.User{2}.NominalPacketPadding = 8;

Display the configuration object properties for both RUs and both users.

disp(cfgHEMU)
  wlanHEMUConfig with properties:

                     RU: {[1x1 wlanHEMURU]  [1x1 wlanHEMURU]}
                   User: {[1x1 wlanHEMUUser]  [1x1 wlanHEMUUser]}
    NumTransmitAntennas: 2
                   STBC: 0
          GuardInterval: 3.2000
              HELTFType: 4
                SIGBMCS: 0
                SIGBDCM: 0
       UplinkIndication: 0
               BSSColor: 0
           SpatialReuse: 0
           TXOPDuration: 127
            HighDoppler: 0

   Read-only properties:
       ChannelBandwidth: 'CBW40'
        AllocationIndex: [192 192]
cfgHEMU.RU{1:2}
ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 242
               Index: 1
         UserNumbers: 1

ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Fourier'

   Read-only properties:
                Size: 242
               Index: 2
         UserNumbers: 2

cfgHEMU.User{1:2}
ans = 
  wlanHEMUUser with properties:

              APEPLength: 1000
                     MCS: 2
     NumSpaceTimeStreams: 2
                     DCM: 0
           ChannelCoding: 'LDPC'
                   STAID: 0
    NominalPacketPadding: 16
    PostFECPaddingSource: 'mt19937ar with seed'
      PostFECPaddingSeed: 1

   Read-only properties:
                RUNumber: 1

ans = 
  wlanHEMUUser with properties:

              APEPLength: 500
                     MCS: 3
     NumSpaceTimeStreams: 1
                     DCM: 0
           ChannelCoding: 'LDPC'
                   STAID: 0
    NominalPacketPadding: 8
    PostFECPaddingSource: 'mt19937ar with seed'
      PostFECPaddingSeed: 2

   Read-only properties:
                RUNumber: 2

HE MU-MIMO Configuration With SIGB Compression

Generate a full bandwidth HE MU-MIMO configuration at 20 MHz bandwidth with SIGB compression. All three users are on a single content channel, which includes only the user field bits.

cfgHE = wlanHEMUConfig(194);
cfgHE.NumTransmitAntennas = 3;

Create PSDU data for all users.

psdu = cell(1,numel(cfgHE.User));
psduLength = getPSDULength(cfgHE);
for j = 1:numel(cfgHE.User)
    psdu = randi([0 1],psduLength(j)*8,1,'int8');
end

Generate and plot the waveform.

y = wlanWaveformGenerator(psdu,cfgHE);
plot(abs(y))

Figure contains an axes object. The axes object contains 3 objects of type line.

Generate a full bandwidth HE MU-MIMO waveform at 80 MHz bandwidth with SIGB compression. HE-SIG-B content channel 1 has four users. HE-SIG-B content channel 2 has three users.

cfgHE = wlanHEMUConfig(214);
cfgHE.NumTransmitAntennas = 7;

Create PSDU data for all users.

psdu = cell(1,numel(cfgHE.User));
psduLength = getPSDULength(cfgHE);
for j = 1:numel(cfgHE.User)
    psdu = randi([0 1],psduLength(j)*8,1,'int8');
end

Generate and plot the waveform.

y = wlanWaveformGenerator(psdu,cfgHE);
plot(abs(y));

Figure contains an axes object. The axes object contains 7 objects of type line.

HE MU-MIMO Configuration Without SIGB Compression

Generate a full bandwidth HE MU-MIMO configuration at 20 MHz bandwidth without SIGB compression. All three users are on a single content channel, which includes both common and user field bits.

cfgHE = wlanHEMUConfig(194);
cfgHE.SIGBCompression = false;
cfgHE.NumTransmitAntennas = 3;

Create PSDU data for all users.

psdu = cell(1,numel(cfgHE.User));
psduLength = getPSDULength(cfgHE);
for j = 1:numel(cfgHE.User)
    psdu = randi([0 1],psduLength(j)*8,1,'int8');
end

Generate and plot the waveform.

y = wlanWaveformGenerator(psdu,cfgHE);
plot(abs(y))

Figure contains an axes object. The axes object contains 3 objects of type line.

Generate an 80 MHz HE MU waveform for six users without SIGB compression. HE-SIG-B content channel 1 has four users. HE-SIG-B content channel 2 has two users.

cfgHE = wlanHEMUConfig([202 114 192 193]);
cfgHE.NumTransmitAntennas = 6;
for i = 1:numel(cfgHE.RU)
    cfgHE.RU{i}.SpatialMapping = 'Fourier';
end

Create PSDU data for all users.

psdu = cell(1,numel(cfgHE.User));
psduLength = getPSDULength(cfgHE);
for j = 1:numel(cfgHE.User)
    psdu = randi([0 1],psduLength(j)*8,1,'int8');
end

Generate and plot the waveform.

y = wlanWaveformGenerator(psdu,cfgHE);
plot(abs(y));

Figure contains an axes object. The axes object contains 6 objects of type line.

Generate a full bandwidth HE MU-MIMO waveform at 80 MHz bandwidth without SIGB compression. HE-SIG-B content channel 1 has seven users. HE-SIG-B content channel 2 has zero users.

cfgHE = wlanHEMUConfig([214 115 115 115]);
cfgHE.NumTransmitAntennas = 7;

Create PSDU data for all users.

psdu = cell(1,numel(cfgHE.User));
psduLength = getPSDULength(cfgHE);
for j = 1:numel(cfgHE.User)
    psdu = randi([0 1],psduLength(j)*8,1,'int8');
end

Generate and plot the waveform.

y = wlanWaveformGenerator(psdu,cfgHE);
plot(abs(y))

Figure contains an axes object. The axes object contains 7 objects of type line.

Create an 80 MHz MU-MIMO configuration with three users in a single RU with SIG-B compression. Display the configuration object properties.

cfgMU = wlanHEMUConfig(210);
cfgMU.NumTransmitAntennas = 3;
cfgMU.User{1}.NumSpaceTimeStreams = 1;
cfgMU.User{2}.NumSpaceTimeStreams = 1;
cfgMU.User{3}.NumSpaceTimeStreams = 1;
disp(cfgMU)
  wlanHEMUConfig with properties:

                     RU: {[1x1 wlanHEMURU]}
                   User: {[1x1 wlanHEMUUser]  [1x1 wlanHEMUUser]  [1x1 wlanHEMUUser]}
    NumTransmitAntennas: 3
                   STBC: 0
          GuardInterval: 3.2000
              HELTFType: 4
                SIGBMCS: 0
                SIGBDCM: 0
       UplinkIndication: 0
               BSSColor: 0
           SpatialReuse: 0
           TXOPDuration: 127
            HighDoppler: 0

   Read-only properties:
       ChannelBandwidth: 'CBW80'
        AllocationIndex: 210

Create a 160 MHz configuration using the upper center 26-tone RU. A total of four RUs are created. The RU tone assignments are 996, 484, 484, and 26. One user is allocated to each RU. The last RU created is the center 26-tone RU. Display the configuration properties of the object.

cfgMU = wlanHEMUConfig([208 115 115 115 200 114 114 200], ...
    'UpperCenter26ToneRU',true);
cfgMU.RU{:}
ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 996
               Index: 1
         UserNumbers: 1

ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 484
               Index: 3
         UserNumbers: 2

ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 484
               Index: 4
         UserNumbers: 3

ans = 
  wlanHEMURU with properties:

    PowerBoostFactor: 1
      SpatialMapping: 'Direct'

   Read-only properties:
                Size: 26
               Index: 56
         UserNumbers: 4

This example shows how to disable a user in an HE MU transmission.

Create an HE MU configuration object with allocation index equal to 112. This specifies four 52-tone RUs in a 20 MHz channel bandwidth. Each RU has one user.

cfg = wlanHEMUConfig(112);

Display the allocation.

showAllocation(cfg)

Figure RU Assignment and Occupied Subcarriers contains an axes object. The axes object with ylabel Subcarrier Index contains 11 objects of type patch, line, text.

Set the STAID property of the third user to 2046. This specifies that the RU that corresponds to the third user transmits no data.

cfg.User{3}.STAID = 2046;

Display the allocation.

showAllocation(cfg)

Figure RU Assignment and Occupied Subcarriers contains an axes object. The axes object with ylabel Subcarrier Index contains 9 objects of type patch, line, text.

More About

expand 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.

[2] 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

Version History

Introduced in R2018b