此示例显示如何解码IEEE®802.11™MAC帧。
通用MAC帧格式由报头、帧体和帧校验序列(FCS)组成。报头保存有关帧的信息。帧体携带需要传输的数据。发射机通过报头和帧体计算FCS。接收端使用FCS确认报头和帧体已正确接收。下图显示了通用MAC帧的结构。
该标准指定了四种类型的框架:管理、数据、控制和扩展。每个帧类型都有多个子类型。这些是由类型和亚型MAC标头中的帧控制字段的字段。
管理框架:
用于连接建立和维护的框架。
这些帧携带信息字段和元素,指示运行在802.11网络中的设备的能力和配置。在建立连接时,这些信息字段和元素将在设备之间进行通信,以匹配两个设备的功能。
MAC层将标题和FCS添加到携带信息以形成MAC协议数据单元(MPDU)的帧主体。
数据帧:
控制帧:
用于支持数据、管理和扩展框架的交付的框架。金宝app
每个控制框架都有特定的功能。例如,像请求发送(RTS)和明确发送(CTS)这样的控制帧有助于保留通道以避免冲突,而确认帧有助于识别成功的传输。
扩展框架:
这个框架类型是上面定义的三种框架类型的扩展。
dmg beacon是当前在此帧类型下指定的唯一帧[1]。
这个例子展示了如何在[1]或[2可以被解码。它还显示了聚合MAC帧是如何在[1]或[2]可以进行分析。
WLAN工具箱™支持以下MA金宝appC帧的MPDU解码:
管理框架:灯架
数据帧:Data, Null。QoS数据,QoS Null
控制帧:RTS,CTS,ACK,块ACK
除了MPDU解码之外,WLAN工具箱还支持DEAGGREGATION A-MPDU。金宝app
MPDU可以是数据,控制或管理框类型。wlanmpdudecode.
可用于解码MPDU。该函数处理给定的MPDU和物理层配置对象以输出解码的MAC参数。
为了说明MPDU解码,使用有效的MPDU使用wlanMACFrame
。创建的MPDU被传递给了wlanmpdudecode.
函数和输出被观察。
创建一个MPDU
一个QoS数据帧被创建为这个例子使用wlanMACFrame
。以下输入需要形成一个包含40字节有效负载的非ht格式QoS数据帧:
txFrameCfg
:类型的MAC帧配置对象wlanmacframeconfig.
。
txMSDU
:包含在QoS数据帧中的40八位八分比有效载荷(MSDU)。
%创建MAC帧配置对象txFrameCfg = wlanMACFrameConfig ('frameType'那“QoS数据”那......'frameformat'那'非HT');% 40字节的有效负载为每个'QoS数据'帧txMSDU = randi([0,255], 40, 1);%物理层配置phyCfg = wlanNonHTConfig;%创建MPDUMPDU = WLANMACFRAME(TXMSDU,TXFRAMECFG);
解码MPDU
wlanmpdudecode.
消耗MPDU,PHY配置对象的类型wlanNonHTConfig
那wlanHTConfig
那wlanvhtconfig
, 或者wlanHESUConfig
可选的(名称,值)对dataformat.
指定MPDU的输入格式。自MPDU生成使用wlanMACFrame
是八位字节,dataformat.
被设置为八位字节
。wlanmpdudecode.
解码MPDU并输出以下信息:
rxframecfg.
:类型的MAC帧配置对象wlanmacframeconfig.
,包含解码的MAC参数。
rxmsdu.
:一个单元阵列,其中每个元素是表示解码的MSDU的n×2字符阵列。当MPDU包含聚合的MSDU(A-MSDU)作为有效载荷时,将返回多个MSDU。
状态
:类型的枚举状态,这表明了MPDU解码是否成功。
%解码MPDU。[rxFrameCfg, rxMSDU, status] = wlanMPDUDecode(mpdu, phyCfg,......“DataFormat”那'八位字节');% MPDU解码是否成功DISP([MPDU解码状态:char(状态)])如果MPDU成功解码,%会遵守输出如果比较字符串(状态,“成功”)disp([解码后的MPDU类型:rxframecfg.frameType])Disp(['MPDU中的MSDU数量:'num2str(元素个数(rxMSDU))))为了i = 1:numel(rxsdu)disp([“MSDU的大小”num2str(i)':'num2str(大小(rxMSDU {}, 1))'八位字节'])结束结束
Status of the MPDU decoding: Success MPDU解码类型:QoS Data Number of msdu in the MPDU: 1 Size of MSDU-1: 40 octets
A-MPDU是多个MPDU的聚合。A-MPDU中的MPDU的类型受到[中的第9.7.3节中规定的限制1]。
Wlanampdudeagggregge
可以用来解聚A-MPDU。该功能对给定的A-MPDU和相应的物理层配置对象进行处理,输出mpdu的解聚合列表。Wlanampdudeagggregge
能够解码HT (High Throughput)、VHT (Very High Throughput)、HE-SU (High Efficiency Single User)和HE-EXT-SU (High Efficiency Extended Range Single User)格式的a - mpdu,如[1]和[2]。
为了说明A-MPDU的分析,使用包含五个MPDU的有效A-MPDUwlanMACFrame
。将创建的A-MPDU传递给Wlanampdudeagggregge
函数和输出被观察。
创建一个A-MPDU
以下输入需要形成包含五个MPDU(QoS数据帧)的HE-SU格式A-MPDU,每个MPDU包含40八位字节有效载荷:
txFrameCfg
:类型的MAC帧配置对象wlanmacframeconfig.
。
txMSDUList
: 5个单元格阵列,包含5个mpdu的有效载荷(MSDU)。自MSDUAggregation
设置为falsetxFrameCfg
,为每个MSDU创建单独的MPDU。
phycfg.
:物理层配置对象wlanHESUConfig
。
%创建MAC帧配置对象txFrameCfg = wlanMACFrameConfig ('frameType'那“QoS数据”那......'frameformat'那“HE-SU”那......“MPDUAggregation”,真的,......'msduaggregation'、假);% 40字节的有效负载为每个'QoS数据'帧txMSDUList = repmat({randi([0,255], 40, 1)}, 1,5);%物理层配置phyCfg = wlanHESUConfig ('MCS',3);%创建包含5个mpdu的A-MPDUampdu = wlanMACFrame(txMSDUList, txFrameCfg, phyCfg);
Deaggrege GDU
Wlanampdudeagggregge
消耗一个a - mpdu,一个PHY配置对象的类型wlanHTConfig
那wlanvhtconfig
, 或者wlanHESUConfig
可选的(名称,值)对dataformat.
指定A-MPDU的输入格式。它查找并验证MPDU分隔符,提取MPDU并输出以下信息,这些信息可用于进一步处理MPDU:
mpduList
:包含从A-MPDU提取的MPDU列表的单元格数组。
delimCRCFails
:表示中对应索引的分隔符CRC有效性的逻辑行向量mpduList
。一个真正的价值代表了MPDU存在的mpduList
在相应的索引处可能无法正确提取。
ampdustatus.
:类型的枚举状态,表示A-MPDU解聚合是否成功。
%deagregge a-mpdu[MPDulist,delimcrcfails,ampdustatus] = wlanampdudeaggregate(Ampdu,phycfg,......“DataFormat”那'八位字节');%观察输出DISP([A-MPDU解聚合状态:char (ampduStatus)]) disp (['从A-MPDU提取的MPDU数:'num2str(numel(mpdulist))] disp([带分隔符CRC的mpdu数量失败:num2str (nnz (delimCRCFails))))
a-mpdu deaggregation的状态:从A-MPDU提取的MPDU的成功数:5带分隔CRC的MPDU数失败:0
解码MPDU列表
这mpduList
包含从A-MPDU中提取的mpdu列表。列表中的每一个mpdu都可以单独解码。然而,如果delimCRCFails
包含任何真正的
值,MPDU存在于mpduList
在相应的索引处可以被认为是无效的,因为由于分隔符CRC故障,可能无法正确提取。
%解码mpdu列表如果比较字符串(ampduStatus“成功”)%列表中mpdu个数numMPDUs =元素个数(mpduList);为了i = 1:nummpdus只有当相应的分隔符CRC有效时,%才会解码MPDU如果~delimCRCFails(i) [rxFrameCfg, rxMSDU, mpduStatus] = wlanMPDUDecode(mpduList{i}, phyCfg,......“DataFormat”那'八位字节');DISP(['mpdu-'num2str(i)解码状态:char (mpduStatus)]) disp (['mpdu-'num2str(i)的类型:rxframecfg.frameType])Disp(['mpdu-'num2str(i)有效载荷大小:num2str(size(rxsdu {1},1))'八位字节']) disp ('')结束结束结束
MPDU-1 decoding status: Success MPDU-1 type: QoS Data MPDU-1 payload size: 40 octets MPDU-2 decoding status: Success MPDU-2 type: QoS Data MPDU-2 payload size: 40 octets MPDU-3 decoding status: Success MPDU-3 type: QoS Data MPDU-3 payload size: 40 octets MPDU-3 decoding status: Success MPDU-4 type: QoS Data MPDU-4 payload size:40 octets MPDU-5解码状态:Success MPDU-5 type: QoS Data MPDU-5 payload size: 40 octets
这个例子演示了如何分解和解码IEEE 802.11 MAC帧。你也可以探索802.11具有捕获数据的OFDM信标接收器和802.11ac包的恢复过程用于解码从捕获的波形检索的MAC帧的示例。
IEEE STD 802.11™-2016信息技术的IEEE标准 - 系统之间的电信和信息交流 - 本地和大都市区域网络 - 特定要求 - 第11部分:无线LAN介质访问控制(MAC)和物理层(PHY)规格
局域网和城域网。特殊要求第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范。修改件6:高效WLAN的增强