802.11ax包错误率仿真基于触发上行格式

此示例演示如何测量IEEE®802.11ax™高效(HE)上行触发(TB)格式的数据包错误率。

介绍

802.11 ax [1] HE基于触发器的(HE TB)格式允许在上行链路OFDMA或MU-MIMO传输。的HE TB传输由接入点(AP)完全控制。被提供用于传输所需的所有参数在触发帧以参与HE TB传输的所有STA。每个站(STA)同时发送的HE TB分组,当由所述AP如下面的图中触发。

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

接收器执行用于数据的均衡的最小均方误差为基础的有序连续干扰消除(MMSE-SIC)处理[2]。在消除级避免错误传播,对于所有STA的数据流以降序基于所述信道状态信息,并依次均衡顺序排序。该图示出了MMSE-SIC均衡的过程。

均衡方法

在这个例子中,可以指定均衡化方法为“MMSE”或“MMSE-SIC”。默认均衡器“MMSE-SIC”。

equalizationMethod =“mmse-sic”;

用户配置

在本例中,使用。配置多个上行STAs的分配信息和传输参数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-LTFnumRx = 8;接收(AP)天线的数目每个用户的参数如下所示allocInfo = ruInfo(cfgSys);NUMUSERS = allocInfo.NumUsers;%上行用户数量对于userIdx = 1:NUMUSERS cfgSys.User {userIdx} .NumTransmitAntennas = 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的对象的单元阵列被创建来描述四个用户的传输。

cfgTB = getUserConfig (cfgSys);

仿真参数

对于在每个SNR点(dB)的SNR生成若干个数据包,通过信道进行解调以确定数据包错误率。

信噪比= 20:2:24;%的抽样率和外地指标,为HE TB包是相同的%的用户。这里使用的是第一个用户的触发器配置%的样品率和现场指标的hetb PPDU。fs = wlanSampleRate (cfgTB {1});(%)不变为所有用户印第安纳州= wlanFieldIndices (cfgTB {1});(%)不变为所有用户

通道配置

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

tgaxBase = wlanTGaxChannel;tgaxBase.SampleRate = FS;tgaxBase.TransmissionDirection =“上行”;tgaxBase.TransmitReceiveDistance = 10;chanBW = cfgSys.ChannelBandwidth;tgaxBase.ChannelBandwidth = chanBW;tgaxBase.NumReceiveAntennas = numRx;

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

%A单元阵列存储频道对象,每个用户一个tgax =细胞(1,NUMUSERS位);对于userIdx = 1:numUsers tgax{userIdx} = clone(tgaxBase);tgax {userIdx}。NumTransmitAntennas = cfgSys.User {userIdx} .NumTransmitAntennas;tgax {userIdx}。UserIndex= userIdx;结束

处理SNR点

对于每个SNR点分组的数目进行测试并计算包错误率。的802.11ax预HE前导码是具有的802.11ac™向后兼容的,因此,在该示例波形用于同步一个VHT定时同步部件HE波形在接收机。对于每个用户,将发生以下的处理步骤以创建在包含所有四个用户的接收器的波形:

  1. 要创建HE TB波形,则创建一个PSDU和编码以用于基于预定义的用户参数的每个用户。

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

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

  4. AWGN被添加到所接收的波形OFDM解调为每个用户之后创建每个子载波的期望的平均SNR。comm.AWGNChannel被配置为提供正确的SNR。配置占由接收天线的数目,并且在未使用的副载波的噪声能量被OFDM解调过程中除去所述通道内正常化。

在接收端(AP),处理步骤如下:

  1. 检测到包。

  2. 细定时同步被建立。设置在L-STF,L-LTF和L-SIG样品细定时,以允许在L-STF的开始或结束包的检测。

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

  4. 解调后的HE-LTF被提取为每个RU并执行信道估计。

  5. 噪声估计是使用为每个RU的解调数据字段导频来执行。

  6. 数据字段提取和均衡用于RU内的所有用户,从解调后的数据字段。

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

parfor循环可用于并行处理信噪比点,因此为每个信噪比点创建一个AWGN通道并使用comm.AWGNChannel进行配置。要启用并行计算来提高速度,请注释掉“for”语句并取消下面的“parfor”语句的注释。

ofdmInfo = wlanHEOFDMInfo('HE-数据',cfgSys.ChannelBandwidth,cfgSys.GuardInterval);numSNR = numel(SNR);信噪比点数量%numPackets = 50;要模拟的包数packetErrorRate = 0 (numUsers numSNR);txPSDU =细胞(numUsers);%PARFOR ISNR = 1:numSNR%使用 'PARFOR' 来加速仿真对于isnr = 1: numSNR每次迭代%设定随机子指数,以确保每个迭代使用一组可重复的随机数流= RandStream ('combRecursive',“种子”,0);流。Substream = isnr;RandStream.setGlobalStream(流);为每个模拟的信噪比点创建一个AWGN通道实例AWGN = comm.AWGNChannel;awgn.NoiseMethod =“信噪比”;摘要。SignalPower = 1 / numRx;sysInfo = ruInfo (cfgSys);模拟多个数据包numPacketErrors =零(NUMUSERS位,1);对于pktIdx = 1:numPackets%发送处理rxWaveform = 0;packetError = 0 (numUsers, 1);txPSDU =细胞(1、numUsers);%通过变化为每个包生成随机信道实现%的信道的属性UserIndex。这是假设所有用户%具有相同数量的发射天线。chPermutations = randperm (numUsers);对于userIdx = 1: numUsers为每个用户%HE TB配置对象cfgUser = cfgTB {userIdx};生成一个带有随机PSDU的包txPSDU {userIdx} =兰迪([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 /(总和(sysInfo.RUSizes)));将上行用户组合成一个波形rxWaveform = rxWaveform + SF * rxTrig;结束%将波形通过AWGN通道。占噪音%能量在零,所以信噪比是定义每个活跃的子载波。awgn.SNR = SNR(ISNR)-10 *日志10(ofdmInfo.FFTLength /总和(sysInfo.RUSizes));rxWaveform = AWGN(rxWaveform);%接收处理%的分组检测和确定粗分组偏移coarsePktOffset = wlanPacketDetect (rxWaveform chanBW 0, 0.05);如果的isEmpty(coarsePktOffset)%如果没有空L-STF检测;包错误numPacketErrors = numPacketErrors + 1;继续;%进入下一个循环迭代结束%提取非HT字段和确定细包偏移nonhtfields = rxWaveform (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 = rxWaveform(pktOffset +(ind.HELTF(1):ind.HELTF(2)),:);RXDATA = rxWaveform(pktOffset +(ind.HEData(1):ind.HEData(2)),:);对于ruIdx = 1: allocInfo.NumRUs%解调HE-LTF和HE-Data字段用于感兴趣的RURU = [allocInfo.RUSizes(ruIdx)allocInfo.RUIndices(ruIdx)];demodHELTFRU = wlanHEDemodulate(rxLTF,“HE-LTF”,chanBW,cfgSys.GuardInterval,cfgSys.HELTFType,RU);demodHEDataRU = wlanHEDemodulate(RXDATA,'HE-数据',cfgSys.GuardInterval chanBW俄文);%的信道估计(陈,ssPilotEst) = heLTFChannelEstimate (demodHELTFRU、cfgSys ruIdx);%获取内RU数据和飞行员(不空)的指数ruOFDMInfo = wlanHEOFDMInfo('HE-数据'cfgSys.ChannelBandwidth cfgSys.GuardInterval,[allocInfo.RUSizes(ruIdx)allocInfo.RUIndices(ruIdx)]);估计每个用户字段中的噪声功率据nvar = 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,据nvar, 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),据nvar, csi (:, stsIdx) cfgUser,“LDPCDecodingMethod”,“layered-bp”);%PER计算任何(biterr packetError (userNum) = (txPSDU {userNum}, rxPSDU));结束结束numPacketErrors = numPacketErrors + packetError;结束%计算的分组错误率(PER)在SNR点packetErrorRate (:, isnr) = numPacketErrors / numPackets;disp ([“信噪比”num2str(信噪比(isnr))“已完成”num2str (numUsers)“用户”]);结束
snr20为4个用户完成,snr22为4个用户完成,snr24为4个用户完成

图包错误率与信噪比

标记='牛* SD ^ V> ;颜色=“bmcrgbrkymcrgbrkymc”;图;对于NSTA = 1:NUMUSERS semilogy(SNR,packetErrorRate(NSTA,:)',[。“- - -”标记(NSTA)颜色(NSTA)]);保持;结束;xlabel('SNR(dB)的');ylabel ('每');dataStr = arrayfun(@(X)的sprintf('STA-%d',x), 1: numUsers,“UniformOutput”、假);传奇(dataStr);标题(“PER用于上行链路802.11ax”);

在每个信噪比点上测试的包的数量由numPackets。为有意义的结果,此值应大于那些在本例中呈现大。下图是通过运行带有较长的模拟创建numPackets:1E4和SNR:20:2:28,其示出了两个MMSE均衡器和MMSE-SIC均衡器的分组错误率。

附录

这个例子使用了以下的帮助函数和对象:

选择的参考书目

  1. IEEE P802.11ax™/ D4.1信息技术标准草案——电信和信息交换系统之间-本地和市区网络特定需求-第11部分:无线局域网介质访问控制(MAC)和物理层(体育)规范-第六修正案:高效WLAN的增强。

  2. M. Debbah,B. Muquet,M.德库维尔,M.淤泥,S. Simoens和P. Loubaton。新可调整混合扩频OFDM系统中MMSE连续干扰抵消方案。IEEE第51届车辆技术会议录,第745-749卷。2,2000。