主要内容

802.11ac报文的恢复过程

这个例子展示了如何在接收到的IEEE®802.11ac™VHT波形中检测数据包并解码有效载荷位。接收端从前导字段中恢复数据包格式参数来解码数据。

介绍

在一个单用户802.11ac包中,使用L-SIG和VHT-SIG-A前导字段向接收器发送传输参数[1]:

  • L-SIG字段包含允许接收器确定数据包传输时间的信息。

  • VHT-SIG-A字段包含了传输参数,包括调制和编码方案、空时流数和信道编码。

在这个例子中,我们检测和解码一个包在生成的波形中包含一个有效的MAC帧与帧检查序列(FCS)。除信道带宽外的所有传输参数都假定是未知的,因此从每个包中解码的L-SIG和VHT-SIG-A前导字段中检索。检索的传输配置用于解码VHT- sig - b和VHT数据字段。此外,还进行了以下分析:

  • 显示检测报文的波形。

  • 显示检测到的数据包的频谱。

  • 显示每个空间流的均衡数据符号的星座。

  • 测量了各场的误差矢量大小(EVM)。

波形传播

在本例中,本地产生802.11ac VHT单用户波形,但可以使用捕获的波形。MATLAB®可以使用仪器控制工具箱™和软件定义的无线电平台从广泛的仪器获取I/Q数据。

局部产生的波形受到3x3 TGac衰落信道、加性高斯白噪声和载波频率偏移的影响。为了在本地生成波形,我们配置一个VHT包格式配置对象。注意VHT包配置对象仅用于发送端。当数据包被解码时,接收端将动态地构造另一个VHT配置对象。辅助函数vhtSigRecGenerateWaveform局部产生受损波形。helper函数中的处理步骤是:

  • 一个有效的MAC帧被生成并编码成VHT波形。

  • 波形通过一个TGac衰落信道模型。

  • 载波频率偏移被添加到波形中。

  • 加性高斯白噪声被添加到波形中。

VHT链路参数cfgVHTTx = wlanVHTConfig (“ChannelBandwidth”“CBW80”“Numtransmitatenenas”3,“NumSpaceTimeStreams”2,“SpatialMapping”“阿达玛”“摘要”符合事实的“主持人”5,“GuardInterval”“长”“APEPLength”, 1052);%传播通道numRx = 3;%接收天线的数量delayProfile =“C型”%信道延迟曲线%障碍noisePower = -30;%应用于dBW的噪声功率cfo=62e3;%载频偏移(Hz)生成波形参数numTxPkt = 1;%发送报文数idleTime = 20 e-6;%每个包前后的空闲时间%生成波形rx = vhtsigrecgenerate波形(cfgVHTTx, numRx,delayProfile、noisePower、cfo、numTxPkt、idleTime);

包复苏

要处理的信号存储在变量中处方。恢复数据包的处理步骤如下:

  • 报文被检测并同步。

  • 检测报文的格式。

  • 提取L-SIG字段并恢复其信息位,以确定包的长度(以微秒计)。

  • 提取VHT-SIG-A字段并恢复其信息位。

  • 包格式参数从解码的L-SIG和VHT-SIG-A位中检索。

  • 提取VHT-LTF字段以执行MIMO信道估计以解码VHT-SIG-B和VHT数据字段。

  • 提取VHT-SIG-B域并恢复其信息位。

  • 提取VHT-Data字段,使用检索的包参数恢复PSDU和VHT-SIG-B CRC位。

某些前导字段的开始和结束索引取决于信道带宽,但与所有其他传输参数无关。这些索引使用具有已知带宽的默认传输配置对象计算。

cfgVHTRx = wlanVHTConfig (“ChannelBandwidth”, cfgVHTTx.ChannelBandwidth);idxLSTF = wlanFieldIndices (cfgVHTRx,“L-STF”);idxLLTF = wlanFieldIndices (cfgVHTRx,“L-LTF”);idxLSIG = wlanFieldIndices (cfgVHTRx,“L-SIG”);idxSIGA = wlanFieldIndices (cfgVHTRx,“VHT-SIG-A”);

下面的代码配置对象和变量以进行处理。

chanBW = cfgVHTTx.ChannelBandwidth;sr = wlanSampleRate (cfgVHTTx);例如%安装图[spectrmanalyzer, timeScope, constellationDiagram] = vhtSigRecSetupPlots(sr);%最小分组长度为10个OFDM符号lstfLen =双(idxLSTF (2));%L-STF中的样本数minPktLen = lstfLen * 5;rxWaveLen = size(rx, 1);

前端处理

前端处理包括分组检测、粗载波频偏校正、定时同步和精载波频偏校正。A.环路用于在接收的波形内检测和同步数据包。示例抵消搜索偏移量用于索引数组中的元素处方检测一个数据包。数据包中的第一个数据包处方被检测和处理。如果检测到的报文同步失败,则采样索引偏移搜索偏移量是增加到超出处理包在处方.这将一直重复,直到成功检测到数据包并同步。

searchOffset = 0;样品中波形开始的偏移量(searchOffset + minPktLen) <= rxWaveLen .%包检测pktOffset = wlanPacketDetect(rx, chanBW, searchOffset);%调整数据包偏移量pktOffset=searchOffset+pktOffset;如果isempty(pktOffset) || (pktOffset + idxLSIG(2) > rxWaveLen)错误(“**未检测到数据包**”);结束%基于L-STF的粗频偏估计LSTF=rx(pktOffset+(idxLSTF(1):idxLSTF(2)),:);粗略频率偏移量=wlancoarsecofestimate(LSTF,chanBW);%粗频偏置补偿rx=助手频率偏移量(rx,sr,-频率偏移量);符号定时同步LLTFSearchBuffer=rx(pktOffset+(idxLSTF(1):idxLSIG(2)),:);pktOffset=pktOffset+wlanSymbolTimingEstimate(LLTFSearchBuffer,chanBW);如果(pktOffset + minPktLen) > rxWaveLen fprintf('**没有足够的样本来恢复包**\n\n');打破结束%定时同步完成:检测到数据包流('在索引%d\n\n检测到包', pktooffset + 1);%使用L-LTF的精细频偏估计LLTF = rx(pktOffset + (idxLLTF(1):idxLLTF(2)),:);fineFreqOffset = wlanFineCFOEstimate(LLTF, chanBW);%精细频偏补偿rx = helperFrequencyOffset(rx, sr, -fineFreqOffset);显示估计的载波频率偏移cfoCorrection=粗略频率偏移+精细频率偏移;%总首席财务官流(“预计CFO: %5.1f Hz\n\n”, cfoCorrection);打破%前端处理完成,停止搜索数据包结束
在索引1600检测到的数据包估计CFO: 61954.3 Hz

格式检测

使用紧跟在L-LTF后面的三个OFDM符号来检测数据包的格式。需要估计从L-LTF获得的信道和噪声功率。

%使用L-LTF的信道估计LLTF = rx(pktOffset + (idxLLTF(1):idxLLTF(2)),:);demodLLTF = wlanlltf解调(LLTF, chanBW);chanEstLLTF = wlanLLTFChannelEstimate(demodLLTF, chanBW);%估计非高温领域的噪声功率noiseVarNonHT = helperNoiseEstimate (demodLLTF);%检测报文格式fmt = wlanFormatDetect(rx(pktOffset + (idxLSIG(1):idxSIGA(2)),:),chanEstLLTF、noiseVarNonHT chanBW);disp ([fmt“检测到格式”]);如果~ strcmp (fmt,“VHT”)错误(“**检测到VHT以外的格式**”);结束
VHT格式检测

L-SIG解码

在VHT传输中,L-SIG字段用于确定数据包的接收时间或RXTIME。RXTIME使用L-SIG有效载荷的字段位计算[1公式22-105]。包含数据包的样本数处方然后可以计算。L-SIG有效载荷使用从L-LTF获得的信道和噪声功率的估计进行解码。

%恢复L-SIG字段位disp (“解码L-SIG…”); [rxLSIGBits,failCheck,eqLSIGSym]=wlanLSIGRecover(rx(pktOffset+(idxLSIG(1):idxLSIG(2)),:),chanEstLLTF、noiseVarNonHT chanBW);如果failCheck%跳过样本的L-STF长度,继续搜索disp ('** L-SIG检查失败**');其他的disp (“L-SIG检查通行证”);结束%测量L-SIG符号的EVM维生素与= comm.EVM;维生素。ReferenceSignalSource =“根据参考星座估算”;维生素。ReferenceConstellation = wlanReferenceSymbols (“BPSK”);rmsEVM =维生素(eqLSIGSym);流('L-SIG EVM:%2.2f%%RMS\n',rmsEVM);%计算接收时间和对应的样本数量%包lengthBits = rxLSIGBits(17)。”;RXTime = cell ((bi2de(double(lengthBits)) + 3)/3) * 4 + 20;%的美国numRxSamples = RXTime * 1e-6 * sr;%收到样品的数量流(“RXTIME: % du \ n”, RXTime);流('包中的样本数量:%d\n\n', numRxSamples);
解码L-SIG……L-SIG check pass L-SIG EVM: 1.83% RMS RXTIME: 84us包内样品数量:6720

被检测数据包的波形和频谱处方显示计算出的RXTIME和相应的样本数量。

样本偏移=最大值(-lstfLen+pktOffset),1);%绘制的第一个索引sampleSpan=numRxSamples+2*lstfLen;%要绘制的样本数尽可能多地标记包装(和额外的样品)plotIdx = sampleOffset:min(sampleOffset + sampleespan, rxWaveLen);%配置timeScope显示报文timeScope。时间间隔= sampleSpan / sr;timeScope。TimeDisplayOffset = sampleOffset / sr;timeScope。YLimits = [0 max(abs(rx(:))]; / / rx(:)timeScope (abs (rx (plotIdx,:)));%显示检测报文的频谱频谱分析仪(rx(pKTOFSET+(1:numRx样本),:);

VHT-SIG-A解码

VHT-SIG-A字段表示报文的传输配置。VHT-SIG-A位利用从L-LTF获得的信道和噪声功率估计恢复。

%恢复VHT-SIG-A字段位disp (“解码VHT-SIG-A…”);[rxSIGABits, failCRC, eqSIGASym] = wlanVHTSIGARecover(rx(pktOffset + (idxSIGA(1):idxSIGA(2)),:),chanEstLLTF、noiseVarNonHT chanBW);如果failCRC disp ('** VHT-SIG-A CRC失败**');其他的disp (“VHT-SIG-A CRC传递”);结束%测量BPSK和QBPSK调制方案的VHT-SIG-A符号的EVM释放(维生素);维生素。ReferenceConstellation = wlanReferenceSymbols (“BPSK”); rmsEVMSym1=EVM(等式sigasym(:,1));释放(EVM);EVM.referencecontellation=wlanReferenceSymbols(“QBPSK”); rmsEVMSym2=EVM(等式sigasym(:,2));fprintf('VHT-SIG-A EVM:%2.2f%%RMS\n',意味着([rmsEVMSym1 rmsEVMSym2]));
解码VHT-SIG-A。。。VHT-SIG-A CRC通过VHT-SIG-A EVM:2.06%RMS

辅助函数helperVHTConfigRecover返回VHT格式配置对象,cfgVHTRx,基于恢复的VHT-SIG-A和L-SIG位。波形解码不需要的属性设置为wlanVHTConfig对象中的值可能不同cfgVHTTx。这类物业的例子包括NumtransmitatenenasSpatialMapping

%通过检索数据包参数创建VHT格式配置对象%从解码的L-SIG和VHT-SIG-A位cfgVHTRx = helperhtconfigrecover (rxLSIGBits, rxsigbits);%显示从VHT-SIG-A获取的传输配置vhtSigRecDisplaySIGAInfo (cfgVHTRx);
解码后的VHT-SIG-A内容:ChannelBandwidth: 'CBW80' NumSpaceTimeStreams: 2 STBC: 1 MCS: 5 ChannelCoding: {'BCC'} GuardInterval: 'Long' GroupID: 63 PartialAID: 275波束形成:0 PSDULength: 1167

VHT-SIG-A提供的信息允许计算接收波形中后续场的位置。

%获取VHT-LTF和VHT-Data字段的起始和结束索引%使用检索到的数据包参数idxVHTLTF = wlanFieldIndices (cfgVHTRx,“VHT-LTF”);idxVHTSIGB = wlanFieldIndices (cfgVHTRx,“VHT-SIG-B”);idxVHTData = wlanFieldIndices (cfgVHTRx,“VHT-Data”);%警告波形不包含整个包如果(pktOffset + double(idxVHTData(2))))'**没有足够的样本来恢复整个包**\n\n');结束

VHT-SIG-B解码

VHT-SIG-B的主要用途是在多用户包中信令用户信息。在单用户包中,VHT-SIG-B携带包的长度,也可以使用L-SIG和VHT-SIG-A(在上面的章节中演示)进行计算。尽管不需要解码一个单用户包,VHT-SIG-B在下面被恢复并解释比特。VHT-SIG-B符号使用从VHT-LTF获得的MIMO信道估计进行解调。注意VHT- sig - b的CRC是在VHT Data字段中进行的。

%使用VHT-LTF和检索包参数估计MIMO信道demodVHTLTF = wlanvhtltf解调(rx(pktOffset + (idxVHTLTF(1):idxVHTLTF(2)),:), cfgVHTRx);chanEstVHTLTF = wlanVHTLTFChannelEstimate(demodVHTLTF, cfgVHTRx);%估计VHT-SIG-B场中的噪声功率noiseVarVHT = helperNoiseEstimate(demodLLTF, chanBW, cfgVHTRx.NumSpaceTimeStreams);% VHT-SIG-B恢复disp (“解码VHT-SIG-B…”);[rxSIGBBits, eqSIGBSym] = wlanVHTSIGBRecover(rx(pktOffset + (idxVHTSIGB(1):idxVHTSIGB(2)),:),chanEstVHTLTF、noiseVarVHT、chanBW);%测量VHT-SIG-B符号的EVM释放(维生素);维生素。ReferenceConstellation = wlanReferenceSymbols (“BPSK”);rmsEVM =维生素(eqSIGBSym);流('VHT-SIG-B EVM: %2.2f%% RMS\n',rmsEVM);%解释VHT-SIG-B位以恢复APEP长度(舍入到a% 4字节的倍数)并生成参考CRC位[refSIGBCRC, sigbAPEPLength] = helperInterpretSIGB(rxsigbits, chanBW, true);disp (解码的VHT-SIG-B内容:);流(' APEP长度(四舍五入到4字节多):%d字节\n\n',sigbAPEPLength);
解码VHT-SIG-B……VHT-SIG-B EVM: 5.21% RMS解码后的VHT-SIG-B内容:APEP长度(四舍五入至4字节倍数):1052字节

甚高频数据解码

然后可以使用重建的VHT配置对象恢复VHT Data字段。这包括VHT-SIG-B CRC位和PSDU。

然后可以根据需要分析恢复的VHT数据符号。在本例中,显示了每个空间流恢复的VHT数据符号的均衡星座。

获得单流信道估计chanEstSSPilots=vhtSingleStreamChannelEstimate(解调VHTLTF、cfgVHTRx);%从波形中提取VHT数据样本vhtdata=rx(pktOffset+(idxVHTData(1):idxVHTData(2)),:;%估计VHT数据场中的噪声功率noiseVarVHT = vhtNoiseEstimate(vhtdata, chanEstSSPilots, cfgVHTRx);%使用检索的包参数和通道恢复PSDU位%估计从VHT-LTFdisp (“解码VHT数据域……”);[rxPSDU, rxSIGBCRC, eqDataSym] = wlanVHTDataRecover(vhtdata, chanEstVHTLTF, noiseVarVHT, cfgVHTRx);%为每个空间流绘制均衡星座图refConst=wlanReferenceSymbols(cfgVHTRx);[Nsd,Nsym,Nss]=大小(eqDataSym);eqDataSymPerSS=重塑(eqDataSym,Nsd*Nsym,Nss);iss = 1:Nss星座图{iss}。ReferenceConstellation = refConst;constellationDiagram{空间站}(eqDataSymPerSS (:, iss));结束%测量vht数据符号的EVM释放(维生素);维生素。ReferenceConstellation = refConst;rmsEVM =维生素(eqDataSym (:));流('VHT-Data EVM: %2.2f%% RMS\n',rmsEVM);
正在解码VHT数据字段。。。VHT数据EVM:4.68%RMS

然后将VHT数据中恢复的VHT- sig - b的CRC位与本地生成的参考进行比较,以确定VHT- sig - b和VHT数据服务位是否成功恢复。

%从VHT数据内的服务位测试VHT-SIG-B CRC%引用计算与VHT-SIG-B位如果~ isequal (refSIGBCRC rxSIGBCRC) disp ('** VHT-SIG-B CRC失败**');其他的disp (“VHT-SIG-B CRC通行证”);结束
VHT-SIG-B CRC通道

MAC帧中的FCS可以使用wlanMPDUDecode.当VHT格式帧被恢复时,PSDU包含一个a - mpdu。mpdu从A-MPDU中提取wlanAMPDUDeaggregate

mpduList = wlanAMPDUDeaggregate(rxPSDU, cfgVHTRx);流('A-MPDU中存在的MPDU数:%d\n'元素个数(mpduList));
A-MPDU中mpdu的个数:1

mpduList包含mpdu的反聚合列表。列表中的每个MPDU都被传递给wlanMPDUDecode验证FCS并对MPDU进行解码。

i=1:numel(mpduList)[macCfg,有效载荷,解码状态]=wlanMPDUDecode(mpduList{i},cfgVHTRx,“数据格式”“八位位组”);如果比较字符串(decodeStatus“FCSFailed”)fprintf(“**FCS无法进行MPDU-%d**\n”,我);其他的流('FCS通过MPDU-%d\n',我);结束结束
FCS通过MPDU-1

附录

这个例子使用了以下帮助函数:

选定的参考书目

  1. 信息技术IEEE标准。系统间电信和信息交换。局域网和城域网。特殊要求。第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范。修改件4:在6ghz以下的频段内实现高吞吐量的增强。