主要内容

基于上行触发器格式的802.11ax报文错误率模拟

这个例子展示了如何测量IEEE®802.11ax™高效(HE)上行链路,基于触发器(TB)格式的数据包错误率。

简介

802.11ax [1基于HE触发器(HE TB)的格式允许上行链路中的OFDMA或MU-MIMO传输。HE结核病的传播完全由接入点(AP)控制。传输所需的所有参数都在触发帧中提供给参与HE TB传输的所有sta。如下图所示,当AP触发时,每个STA (STA)同时发送一个HE TB报文。

在本例中,使用端到端模拟来确定MU-MIMO配置中4个sta的HE TB链路的包错误率。在每个信噪比点,传输多个包,除了信道和噪声外,没有任何损害。对于每个STA,接收到的数据包进行解调并恢复psdu。将psdu与传输的psdu进行比较,以确定数据包错误的数量,从而确定所有用户的数据包错误率。数据包检测、定时同步和符号均衡由接收端执行。本例中不进行频偏校正。HE TB处理链的处理如下图所示。

接收端执行基于最小均方误差的有序连续干扰抵消(MMSE-SIC)过程以实现数据均衡[2].为了避免错误在取消阶段传播,所有sta的数据流按照信道状态信息降序排序,并按顺序均衡。该图显示了MMSE-SIC均衡的过程。

均衡方法

在本例中,您可以将均衡方法指定为'mmse'或'mmse-sic'。默认的均衡器是'mmse-sic'。

equalizationMethod =“mmse-sic”

用户配置

在本例中,多个上行链路sta的分配信息和传输参数使用heTBSystemConfig对象。

allocationIndex = 195;MU-MIMO配置中有4个上行用户cfgSys = heTBSystemConfig(allocationIndex);

在基于触发器的传输中,对于所有上行链路用户,有些参数是相同的,而有些参数可能不同。的用户的属性cfgSys包含用户配置的单元格数组。单元格数组的每个元素都是一个对象,可以对其进行配置以设置单个用户的参数。在本例中,所有用户具有相同的传输参数。

这些参数对于MU-MIMO系统中的所有用户都是相同的cfgSys。HELTFType = 4;HE-LTF压缩模式cfgSys。GuardInterval = 3.2;防护间隔类型cfgSys。SingleStreamPilots = 1;HE-LTF的单流先导传输numRx = 8;%接收(AP)天线数每个用户的参数如下所示allocInfo = ruInfo(cfgSys);numUsers = allocInfo.NumUsers;%上行用户数量userIdx = 1:numUsers cfgSys.User{userIdx}。numtransmitantenna = 1;cfgSys.User {userIdx}。NumSpaceTimeStreams = 1;cfgSys.User {userIdx}。SpatialMapping =“直接”;cfgSys.User {userIdx}。MCS = 7;cfgSys.User {userIdx}。APEPLength = 1e3;cfgSys.User {userIdx}。ChannelCoding =“方法”结束

用于系统内单个用户的基于触发器的传输使用wlanHETBConfig对象。使用该方法生成所有用户的传输配置getUserConfig.创建一个包含4个HE TB对象的cell数组来描述4个用户的传输。

cfgTB = getUserConfig(cfgSys);

仿真参数

的每个信噪比点(dB)信噪比生成若干矢量包,通过信道并解调以确定包错误率。

信噪比= 20:2:24;HE TB包的采样率和字段指标对所有包都是相同的%的用户。这里使用第一个用户的触发器配置来获取HE TB PPDU的采样率和现场指标。fs = wlanSampleRate(cfgTB{1});%所有用户相同ind = wlanFieldIndices(cfgTB{1});%所有用户相同

通道配置

在本例中,使用TGax NLOS室内信道模型和延迟剖面模型- b。当发射机和接收机之间的距离大于或等于5米时,模型b被认为是NLOS。这将在中进一步描述wlanTGaxChannel.在本例中,假定所有sta与AP的距离相同。

tgaxBase = wlanTGaxChannel;tgaxBase。SampleRate = fs;tgaxBase。TransmissionDirection =“上行”;tgaxBase。TransmitReceiveDistance = 10;chanBW = cfgSys.ChannelBandwidth;tgaxBase。ChannelBandwidth = chanBW;tgaxBase。numreceiveantenna = numRx;tgaxBase。NormalizeChannelOutputs = false;

为这四个用户分别创建一个单独的通道。每个频道都是克隆的tgaxBase,但有一个不同的UserIndex属性,并存储在单元格数组中tgax.的UserIndex属性设置为为每个用户提供唯一的通道。在本例中,随机信道实现用于每个包,通过随机改变UserIndex属性。

单元格数组存储通道对象,每个用户一个tgax = cell(1,numUsers);userIdx = 1:numUsers tgax{userIdx} =克隆(tgaxBase);tgax {userIdx}。numtransmitantenna = cfgSys.User{userIdx}. numtransmitantenna;tgax {userIdx}。UserIndex= userIdx;结束

处理信噪比点

对于每个信噪比点都要测试一些数据包,并计算数据包错误率。802.11ax的pre-HE导文向后兼容802.11ac™,因此在本例中,VHT波形的定时同步组件用于在接收机处同步HE波形。对于每个用户,执行以下处理步骤,在接收端创建包含所有四个用户的波形:

  1. 为了创建HE TB波形,根据预定义的用户参数为每个用户创建并编码一个PSDU。

  2. 每个用户的波形通过室内TGax通道模型传递。不同的信道实现为不同的用户和包建模,通过随机改变UserIndex通道的属性。这将导致所有用户具有相同的空间相关属性。

  3. 对所有HE TB用户的波形进行缩放和组合,以确保添加噪声后每个用户的信噪比相同。

  4. 将AWGN添加到接收的波形中,以在OFDM解调后创建每个有源子载波所需的平均信噪比。

在接收端(AP)发生以下处理步骤:

  1. 检测到报文。

  2. 建立了良好的定时同步。提供了L-STF、L-LTF和L-SIG样本,以便在L-STF的开始或结束时进行包检测。

  3. 从同步接收的波形中提取所有用户的HE-LTF和HE-Data字段。HE-LTF和HE-Data字段是OFDM解调的。

  4. 对每个RU提取解调的HE-LTF,并进行信道估计。

  5. 使用每个RU的解调数据场导频进行噪声估计。

  6. 从解调的数据字段中提取数据字段,并为一个RU内的所有用户进行均衡。

  7. 对于每个RU和RU内的用户,用户的空间流被解调和解码以恢复传输的PSDU。

parfor循环可用于并行化处理信噪比点。为了使用并行计算来提高速度,注释掉'for'语句并取消注释下面的'parfor'语句。

ofdmInfo = wlanHEOFDMInfo(“数据”、cfgSys.ChannelBandwidth cfgSys.GuardInterval);numSNR = numel(snr);信噪比百分比numPackets = 50;%要模拟的数据包数packetErrorRate = 0 (numUsers,numSNR);txPSDU = cell(numUsers);% parfor isnr = 1:numSNR %使用'parfor'加快模拟速度isnr = 1:numSNR创建用于接收处理的HE TB对象cfgHETB = wlanHETBConfig;cfgHETB。ChannelBandwidth = cfgSys.ChannelBandwidth;cfgHETB。HELTFType = cfgSys.HELTFType;cfgHETB。SingleStreamPilots = cfgSys.SingleStreamPilots;每次迭代设置随机子流索引,以确保每个子流的索引迭代使用一组可重复的随机数流= RandStream(“combRecursive”“种子”, 0);流。Substream = isnr;RandStream.setGlobalStream(流);% RU分配信息sysInfo = ruInfo(cfgSys);模拟多个数据包numPacketErrors = 0 (numUsers,1);pktIdx = 1:numPackets发送处理rx波形= 0;packetError = 0 (numUsers,1);txPSDU = cell(1,numUsers);为每个包随机生成信道实现通道的UserIndex属性。这里假设所有用户%拥有相同数量的发射天线。chPermutations = randperm(numUsers);userIdx = 1:numUsers每个用户的% HE TB配置对象cfgUser = cfgTB{userIdx};生成一个随机PSDU的报文txPSDU{userIdx} = randi([0 1],getPSDULength(cfgUser)*8,1,“int8”);%生成HE TB波形,包含单个用户的有效载荷txTrig = wlanWaveformGenerator(txPSDU{userIdx},cfgUser);%通过随机TGax通道传递波形channelIdx = chPermutations(userIdx);重置(tgax {channelIdx});%新渠道实现rxTrig = tgax{channelIdx}([txTrig;0(15、大小(txTrig 2))));在一个RU中,用户的发送功率。这是给%保证添加噪声后每个用户的信噪比相同。ruNum = cfgSys.User{userIdx}.RUNumber;SF = sqrt(1/sysInfo.NumUsersPerRU(ruNum))*sqrt(cfgUser.RUSize/(sum(sysinfo . rusize)));%将上行链路用户合并为一个波形rx波形= rx波形+SF*rxTrig;结束通过AWGN通道传递波形。考虑噪音%能量为零,因此信噪比是每个有源子载波定义的。packetSNR = snr(isnr)-10*log10(ofdinfo . fftlength /sum(sysinfo . rusize));rx波形= awgn(rx波形,packetSNR);接收处理百分比包检测和确定粗包偏移coarsePktOffset = wlanPacketDetect(rx波形,chanBW,0,0.05);如果isempty (coarsePktOffset)%如果为空,未检测到L-STF;包错误numPacketErrors = numPacketErrors+1;继续%转到下一次循环迭代结束提取非ht字段并确定细包偏移量nonhtfields = rx波形(coarsePktOffset+(ind.LSTF(1):ind.LSIG(2)),:);finePktOffset = wlanSymbolTimingEstimate(nonhtfields,chanBW);确定最终数据包偏移量pktOffset = coarsePktOffset+finePktOffset;%如果检测到数据包超出预期延迟范围%渠道建模;包错误如果pktOffset>50 numPacketErrors = numPacketErrors+1;继续%转到下一次循环迭代结束为所有RUs提取HE-LTF和HE-Data字段rxLTF = rx波形(pktOffset+(ind.HELTF(1):ind.HELTF(2)),:);rxData = rx波形(pktOffset+(ind.HEData(1):ind.HEData(2)),:);ruIdx = 1:allocInfo。NumRUs为感兴趣的RU解调HE-LTF和HE-Data字段ru = [allocinfo . ruszes (ruIdx) allocInfo.RUIndices(ruIdx)];demodHELTFRU = wlanHEDemodulate(rxLTF,“HE-LTF”, cfgSys.GuardInterval chanBW cfgSys.HELTFType,俄文);demodHEDataRU = wlanHEDemodulate(rxData,“数据”, cfgSys.GuardInterval chanBW俄文);在HE TB对象中配置相关属性cfgHETB。RUSize = allocinfo .RUSize (ruIdx);cfgHETB。RUIndex = allocInfo.RUIndices(ruIdx);cfgHETB。NumSpaceTimeStreams = allocInfo.NumSpaceTimeStreamsPerRU(ruIdx);%渠道估计[chanEst,ssPilotEst] = wlanHELTFChannelEstimate(demodHELTFRU,cfgHETB);获取RU内数据和导频的索引(不含null)ruOFDMInfo = wlanHEOFDMInfo(“数据”cfgSys.ChannelBandwidth cfgSys.GuardInterval,...[allocInfo.RUSizes (ruIdx) allocInfo.RUIndices (ruIdx)]);估计每个用户HE场的噪声功率nVarEst = heNoiseEstimate(demodHEDataRU(ruOFDMInfo.PilotIndices,:,:),ssPilotEst,cfgSys,ruIdx);丢弃先导子载波demodDataSym = demodHEDataRU(ruOFDMInfo.DataIndices,:,:);chanEstData = chanEst(ruOFDMInfo.DataIndices,:,:);%平衡如果strcmpi (equalizationMethod“mmse-sic”) [eqSym,csi] = heSuccessiveEqualize(demodDataSym,chanEstData,nVarEst,cfgSys,ruIdx);其他的[eqSym,csi] = heEqualizeCombine(demodDataSym,chanEstData,nVarEst,cfgSys);结束userIdx = 1:allocInfo.NumUsersPerRU(ruIdx)获取每个用户的TB配置对象userNum = cfgSys.RU{ruIdx}.UserNumbers(userIdx);cfgUser = cfgTB{userNum};获取当前用户的时空流索引stsIdx = cfgUser.StartingSpaceTimeStream-1+(1:cfgUser.NumSpaceTimeStreams);去映射和解码位rxPSDU = wlanHEDataBitRecover(eqSym(:,:,stsIdx),nVarEst,csi(:,stsIdx),cfgUser,“LDPCDecodingMethod”“norm-min-sum”);%每计算packetError(userNum) = any(biterr(txPSDU{userNum},rxPSDU));结束结束numPacketErrors = numPacketErrors+packetError;结束计算信噪比点的包错误率(PER)packetErrorRate (:, isnr) = numPacketErrors / numPackets;disp ([“信噪比”num2str(信噪比(isnr))...“完成”num2str (numUsers)“用户”]);结束
4个用户完成信噪比20信噪比22 4个用户完成信噪比24

图包错误率与信噪比

标记=“牛* sd ^ v > < ph值+牛* sd ^ v ';颜色=“bmcrgbrkymcrgbrkymc”;图;nSTA = 1:numUsers semilogy(snr,packetErrorRate(nSTA,:).',[“- - -”标记(nSTA)颜色(nSTA)]);持有结束网格;包含(“信噪比(dB)”);ylabel (“每”);dataStr = arrayfun(@(x)sprintf(STA - % d ', x), 1: numUsers,“UniformOutput”、假);传奇(dataStr);标题(上行802.11ax链路的PER);

每个信噪比点的测试包数由numPackets.对于有意义的结果,这个值应该大于本例中给出的值。下图是通过运行一个较长的模拟生成的numPackets: 1 e4和信噪比:20:2:28,显示MMSE均衡器和MMSE- sic均衡器的错误率。

附录

本例使用了以下helper函数和对象:

选定的参考书目

  1. IEEE标准802.11ax™-2021。IEEE信息技术标准。系统间的电信和信息交换。局域网和城域网。特殊要求。第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范。修改件1:高效WLAN的增强。

  2. 德巴先生,B.穆奎特,德·考维尔先生,M.穆克,S.西蒙斯和P.鲁巴顿。一种新型可调混合扩频OFDM系统的MMSE逐次干扰消除方案。IEEE第51届车辆技术会议论文集,第745-749页,第2卷,2000。