Main Content

wlanAMPDUDeaggregate

Deaggregate A-MPDU and extract MPDUs

Description

[mpduList,failCRC,status] = wlanAMPDUDeaggregate(ampdu,phyFormat) recovers mpduList, a list of medium access control (MAC) protocol data units (MPDUs), by deaggregating ampdu, an aggregate MPDU (A-MPDU). The function deaggregates the A-MPDU by using parameters appropriate for phyFormat, the physical layer (PHY) format.

The function also returns failCRC, the delimiter cyclic redundancy check (CRC) status for subframes found in ampdu, and status, the status of A-MPDU deaggregation.

example

[mpduList,failCRC,status] = wlanAMPDUDeaggregate(ampdu,cfgPHY) deaggreagates the A-MPDU by using PHY transmission parameters cfgPHY.

example

[mpduList,failCRC,status] = wlanAMPDUDeaggregate(___,Name,Value) specifies options using one or more name-value pair arguments in addition to any input argument combination from previous syntaxes.

example

Examples

collapse all

Create a WLAN MAC frame configuration object, specifying the frame type, frame format, and MPDU aggregation.

cfgMAC = wlanMACFrameConfig('FrameType','QoS Data', ...
    'FrameFormat','HT-Mixed','MPDUAggregation',1);

Create an HT configuration object, specifying MPDU aggregation.

cfgPHY = wlanHTConfig('AggregatedMPDU',1);

Create a random payload of eight MSDUs, and then use it generate an A-MPDU in bit form.

payload = repmat({randi([0 255],1,40)},1,8);
ampdu = wlanMACFrame(payload,cfgMAC,cfgPHY,'OutputFormat','bits');

Return the list of MPDUs by deaggregating the A-MPDU.

phyFormat = 'HT';
[mpduList,failCRC,status] = wlanAMPDUDeaggregate(ampdu,phyFormat);

Confirm successful deaggregation by displaying the result of the delimiter CRC and the decoding status.

disp(failCRC)
   0   0   0   0   0   0   0   0
disp(status)
    Success

Create a WLAN MAC frame configuration object, specifying the frame type and frame format.

cfgMAC =  wlanMACFrameConfig('FrameType','QoS Data','FrameFormat','VHT');

Create a VHT configuration object with default settings.

cfgPHY = wlanVHTConfig;

Create a random payload of eight MSDUs, and then use it to generate an A-MPDU in bit form.

payload = repmat({randi([0 255],1,40)},1,8);
ampdu = wlanMACFrame(payload,cfgMAC,cfgPHY,'Outputformat','bits');

Deaggregate the A-MPDU.

[mpduList,failCRC,status] = wlanAMPDUDeaggregate(ampdu,cfgPHY);

Confirm successful deaggregation by displaying the result of the delimiter CRC and the decoding status.

disp(failCRC)
   0   0   0   0   0   0   0   0
disp(status)
    Success

Deaggregate a VHT A-MPDU and decode the extracted MPDUs.

Create a WLAN MAC frame configuration object for a VHT A-MPDU.

txCfgMAC = wlanMACFrameConfig('FrameType','QoS Data', ...
    'FrameFormat','VHT');

Create a VHT-format configuration object with default settings.

cfgPHY = wlanVHTConfig;

Generate a random payload of eight MSDUs.

txPayload =  repmat({randi([0 255],1,40)},1,8);

Generate the A-MPDU containing eight MPDUs for the specified MAC and PHY configurations.

ampdu = wlanMACFrame(txPayload,txCfgMAC,cfgPHY);

Extract the list of MPDUs by deaggregating the A-MPDU. Display the status of the deaggregation and the delimiter CRC.

[mpduList,failCRC,status] = wlanAMPDUDeaggregate(ampdu,cfgPHY, ...
    'DataFormat','octets');
disp(status)
    Success
disp(failCRC)
   0   0   0   0   0   0   0   0

Decode all of the MPDUs in the extracted. Confirm successful decoding by displaying the status.

if strcmp(status,'Success')
    for i = 1:numel(mpduList)
        if ~failCRC(i)
            [cfgMAC,payload,status(i)] = ...
                wlanMPDUDecode(mpduList{i},cfgPHY, ...
                'DataFormat','octets');
        end
    end
end
disp(status)
    Success    Success    Success    Success    Success    Success    Success    Success

Input Arguments

collapse all

A-MPDU to be deaggregated, specified as one of these values.

  • A binary-valued vector representing the A-MPDU in bit format

  • A vector of integers in the interval [0, 255] representing octets in decimal format

  • A string scalar representing the A-MPDU as octets in hexadecimal format

  • A character vector representing the A-MPDU as octets in hexadecimal format

  • A character array, where each row represents an octet in hexadecimal format

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

PHY format, specified as one of these values.

  • 'HE-SU' — High-efficiency single-user (HE SU) format

  • 'HE-EXT-SU' — HE extended-range SU (HE ER SU) format

  • 'HE-MU' — HE multi-user (HE MU) format

  • 'HE-TB' — HE trigger-based (HE TB) format

  • 'VHT' — Very-high-throughput (VHT) format

  • 'HT' — High-throughput (HT) format

  • 'EHT-SU' — Extremely high-throughput SU (EHT-SU) format

Data Types: char | string

PHY format and transmission parameters, specified as one of these objects.

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: 'DataFormat','octets'

Format of input A-MPDU, specified as the comma-separated pair consisting of 'DataFormat' and one of these values.

  • 'bits' — Specify the ampdu input in bit format

  • 'octets' — Specify the ampdu input in octet format

Data Types: char | string

Suppress warning messages, specified as the comma-separated pair consisting of 'SuppressWarnings' and one of these values.

  • false or 0 — Allow warning messages.

  • true or 1 — Suppress warning messages.

Data Types: logical

Output Arguments

collapse all

List of MPDUs, returned as a cell array of character arrays, where each character array corresponds to one MPDU. In these character arrays, each row is the hexadecimal representation of an octet.

If no MPDU delimiter is found in the input A-MPDU, the function returns mpduList as an empty cell array.

Data Types: cell

Delimiter CRC failure indicator, returned as a row vector of logical values. Each element of this vector indicates the delimiter CRC failure status for an A-MPDU subframe.

A value of 1 for the kth element of this vector indicates that the delimiter CRC failed for the kth A-MPDU subframe. In this case, the kth element of mpduList contains an MPDU that might be invalid.

A value of 0 for the kth element of this vector indicates that the delimiter CRC passed for the kth subframe. In this case, the kth element of mpduList contains a valid MPDU.

Data Types: logical

Status of A-MPDU deaggregation, returned as a nonpositive integer in the interval [–20, 0]. Each enumeration value of status corresponds to a member of the wlanMACDecodeStatus enumeration class, which indicates the status of MAC frame parsing according to this table.

Enumeration ValueMember of Enumeration ClassDecoding Status
0SuccessMAC frame successfully decoded
-1FCSFailedFrame check sequence (FCS) failed
-2InvalidProtocolVersionInvalid protocol version
-3UnsupportedFrameTypeUnsupported frame type
-4UnsupportedFrameSubtypeUnsupported frame subtype
-5NotEnoughDataInsufficient data to decode frame
-6UnsupportedBAVariantUnsupported variant of Block Ack frame
-7UnknownBitmapSizeUnknown bitmap size
-8UnknownAddressExtModeUnknown address extension mode
-9MalformedAMSDULengthMalformed aggregate MAC service data unit (A-MSDU) with invalid length
-10MalformedSSIDMalformed service set identifier (SSID) information element (IE)
-11MalformedSupportedRatesIEMalformed supported rates IE
-12MalformedIELengthMalformed IE length field
-13MissingMandatoryIEsMandatory IEs missing
-14NoMPDUFoundNo MPDU found in A-MPDU
-15CorruptedAMPDUAll the delimiters in received A-MPDU failed cyclic redundancy check (CRC)
-16InvalidDelimiterLengthInvalid length field in MPDU delimiter
-17MaxAMSDULenthExceededA-MSDU exceeds maximum length limit
-18MaxMPDULengthExceededMPDU exceeds maximum length limit
-19MaxMMPDULengthExceededMAC management frame exceeds maximum length limit
-20MaxMSDULengthExceededMSDU exceeds maximum length limit
-21UnexpectedProtectedFrameInvalid value of protected bit for this frame type
-22UnsupportedTriggerTypeUnsupported trigger frame type
-23UnknownHELTFTypeAndGIUnknown guard interval (GI) and high-efficiency long training field (HE-LTF) type
-24UnknownAPTxPowerUnknown value for AP Tx Power subfield of Common Info field
-25UnknownAID12ValueUnknown value for AID12 subfield of User Info field
-26UnknownRUAllocationUnknown value for B7-B1 in RU Allocation subfield of User Info field
-27UnknownULMCSUnknown value for UL MCS subfield of User Info field
-28UnknownTargetRSSIUnknown value for UL Target RSSI subfield of User Info field
-29UnsupportedBARTypeUnsupported value for BAR Type subfield of BAR Control field
-30MissingUserInfoReceived trigger frame contains invalid User Info field
-31InvalidLSIGLengthInvalid value for UL Length subfield of Common Info field, corresponding to length of legacy signal (L-SIG) field.

An enumeration value other than 0 means that A-MPDU deaggregation stopped because the input A-MPDU is corrupt or malformed.

Data Types: int16

Extended Capabilities

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

Version History

Introduced in R2019a