802.11ax压缩波束形成包错误率模拟
本示例展示了如何测量具有不同波束形成反馈量化级别的IEEE®802.11ax™高效单用户(HE SU)格式链路的分组错误率。
简介
发射波束形成将能量集中到接收机上,以提高链路的信噪比。在这种方案中,发射机称为波束形成器,接收机称为波束形成器。波束形成器使用转向矩阵将能量引导到波束发生器。利用信道测量得到的信道状态信息计算转向矩阵。这些测量是通过探测波束形成器和波束反射器之间的通道来获得的。为了探测信道,波束形成器向波束形成器发送一个空数据包(NDP)。波束测量器在探测过程中测量信道信息以计算反馈矩阵。该矩阵以量子化角度(phi和psi)的形式压缩,并反馈给波束形成器。然后,波束形成器可以从量子化角度计算反馈矩阵,以创建转向矩阵并将波束形式传输到波束形成器。转向矩阵形成过程如图所示802.11ac传输波束形成.
这个例子测量了802.11ax的数据包错误率(PER)。1单用户(SU)链路,在具有两个时空流的发射机和接收机之间包含一个4x2 MIMO配置。该链路利用压缩波束形成反馈量化不同的量化水平和选择信噪比点。本例没有考虑子载波的分组(参见[的第9.4.1.65节])。1])。
波形的配置
HE SU报文是对单个用户的全频带传输。配置HE SU格式的传输参数wlanHESUConfig
对象。配置对象为20 MHz信道带宽,4个发射天线,2个空时流,16-QAM速率-1/2 (MCS 3)和4倍HE-LTF压缩模式。这个例子没有模拟子载波波束形成平滑。要测试所有子载波并估计该传输配置的无插值信道,请使用4x HE-LTF压缩模式。
NumTxAnts = 4;%发射天线个数NumSTS = 2;%时空流个数NumRxAnts = 2;%接收天线个数cfgHEBase = wlanHESUConfig;cfgHEBase。ChannelBandwidth =“CBW20”;通道带宽%cfgHEBase。NumSpaceTimeStreams = NumSTS;%时空流个数cfgHEBase。numtransmitantenna = NumTxAnts;%发射天线个数cfgHEBase。APEPLength = 1e3;负载长度(以字节为单位)cfgHEBase。ExtendedRange = false;不要使用扩展范围格式cfgHEBase。Upper106ToneRU = false;不使用106调以上的俄服cfgHEBase。PreHESpatialMapping = false;pre-HE字段的空间映射cfgHEBase。GuardInterval = 3.2;防护间隔时间%cfgHEBase。HELTFType = 4;HE-LTF压缩模式cfgHEBase。ChannelCoding =“方法”;%信道编码cfgHEBase。MCS = 3;调制和编码方案cfgHEBase。SpatialMapping =“自定义”;%自定义波束形成
NDP (Null Data Packet)配置
配置NDP传输数据长度为0。由于NDP用于获取信道状态信息,所以将时空流的个数设置为发射天线的个数,然后将每个时空流直接映射到一个发射天线上。
cfgNDP = cfgHEBase;cfgNDP。APEPLength = 0;% NDP没有数据cfgNDP。NumSpaceTimeStreams = NumTxAnts;用于反馈矩阵计算cfgNDP。SpatialMapping =“直接”;每个TxAnt携带一个STS
通道配置
本例使用了TGax NLOS室内信道模型,该模型具有延迟配置文件model - b。当发射机和接收机之间的距离大于或等于5米时,模型b剖面被认为是NLOS。有关更多信息,请参见wlanTGaxChannel
.
创建和配置TGax通道chanBW = cfgHEBase.ChannelBandwidth;tgaxChannel = wlanTGaxChannel;tgaxChannel。DelayProfile =“b型”;tgaxChannel。numtransmitantenna = NumTxAnts;tgaxChannel。numreceiveantenna = NumRxAnts;tgaxChannel。TransmitReceiveDistance = 5;%距离(以米为单位)tgaxChannel。ChannelBandwidth = chanBW;tgaxChannel。LargeScaleFadingEffect =“没有”;tgaxChannel。NormalizeChannelOutputs = false;fs = wlanSampleRate(cfgHEBase);tgaxChannel。SampleRate = fs;
仿真参数
本例比较了两种不同压缩量化分辨率和不压缩时波束形成的性能。金宝搏官方网站对于每个量化分辨率,使用不同的信噪比值执行端到端模拟,以确定PER。802.11ax仅为单用户波束形成指定了两组量化分辨率(表9-29a在[1])。设置的值codeBookSize
在此模拟中选择用于量化波束形成反馈角(phi和psi)的比特数。禁用压缩集codeBookSize
来正
.的每个值的量化级别codeBookSize
:
codeBookSize压缩配置 -------------------------------------------------------- 0 NumBitsphi = 4;NumBitspsi = 2 1 NumBitsphi = 6;NumBitspsi = 4正不压缩 --------------------------------------------------------
codeBookSize = [0 1 Inf];
将信噪比设置为以dB为单位模拟。
信噪比= 10:2:18;
限制在每个信噪比点测试的包数为maxNumErrors
或maxNumPackets
,地点:
maxNumErrors
为每个信噪比点模拟的最大包错误数。当报文错误数达到该限制值时,该信噪比点的模拟结束。maxNumPackets
是在每个信噪比点上模拟的最大数据包数,如果没有达到数据包错误限制,则限制模拟的长度。
在这个例子中选择的数字导致一个非常短的模拟。为了获得统计上有意义的结果,增加这些数字。
maxNumErrors = 10;在一个信噪比点上的最大错误包数maxNumPackets = 100;一个信噪比点的最大包数
处理信噪比点
对于每个信噪比点,测试数据包并计算PER。对于每个包,执行这些步骤。
获得转向矩阵,创建反馈矩阵:
通过室内TGax信道模型传输NDP波形。为不同的包建模不同的通道实现。
将AWGN添加到接收的波形中,以创建OFDM解调后每个有源子载波所需的平均信噪比。
在波束处检测数据包。
估计并校正粗载波频偏(CFO)。
建立良好的定时同步。
估算并修正优秀CFO。
从同步接收的波形中提取HE-LTF。OFDM解调HE-LTF并进行信道估计。
对估计信道进行奇异值分解,计算波束形成反馈矩阵V。
压缩并量化反馈矩阵V,以创建标准中指定的一组角度。
使用恢复的转向矩阵传输一个数据包,并解码波束形成的数据传输以恢复PSDU:
如果建模压缩,将量化的角度转换回波束形成反馈矩阵V,否则,使用由beamformee计算的V矩阵。假设没有波束形成反馈延迟。
创建并编码一个PSDU,以创建一个单包波形,将转向矩阵设置为波束形成反馈矩阵V。
将波形通过与NDP传输相同的室内TGax信道实现。
在接收波形中添加AWGN。
与NDP一样,执行同步和HE信道估计。
从同步接收波形中提取数据场并进行OFDM解调。
执行常见相位误差导频跟踪以跟踪任何剩余载波频率偏移。
利用解调数据场导频和导频子载波上的单流信道估计噪声功率。
使相位校正OFDM符号与信道估计相等。
解调和解码均衡符号恢复PSDU。
要并行处理信噪比点,可以使用parfor
循环。为了使用并行计算来提高速度,注释掉'for'语句并取消注释下面的'parfor'语句。
numQuant = numel(codeBookSize);numSNR = numel(snr);信噪比百分比packetErrorRate = 0 (numQuant,numSNR);获取占用子载波指数和OFDM参数ofdmInfo = wlanHEOFDMInfo(“数据”, cfgHEBase);%索引从PPDU中提取字段ind = wlanFieldIndices(cfgHEBase);indSound = wlanFieldIndices(cfgNDP);为ibf = 1:numQuant开关codeBookSize (ibf)参见P802.11ax/D4.1章节9.4.1.64情况下0 NumBitsPsi = 2;% psi的位数NumBitsPhi = 4;的比特数disp (带压缩波束形成量化的端到端模拟);disp ([=的比特数num2str (NumBitsPhi)...'和psi = '的位数num2str (NumBitsPsi)]);情况下1 NumBitsPsi = 4;% psi的位数NumBitsPhi = 6;的比特数disp (带压缩波束形成量化的端到端模拟);disp ([=的比特数num2str (NumBitsPhi)...'和psi = '的位数num2str (NumBitsPsi)]);否则disp (采用非压缩波束形成的端到端模拟);结束%parfor isnr = 1:numSNR %使用'parfor'加快模拟速度为isnr = 1:numSNR每次迭代设置随机子流索引,以确保每个子流的索引迭代使用一组可重复的随机数流= RandStream(“combRecursive”,“种子”, 100);流。Substream = isnr;RandStream.setGlobalStream(流);%考虑噪声能量为空,因此信噪比定义为有源子载波百分比packetSNR = snr(isnr)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);为每个信噪比点创建一个HE配置对象实例%的模拟。这将允许使用parforcfgHE = cfgHEBase;%循环模拟多个数据包numPacketErrors = 0;numPkt = 1;%发送的报文索引而numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets%空数据包传输tx = wlanWaveformGenerator([],cfgNDP);添加尾随零以允许信道延迟txPad = [tx;0 (50, cfgNDP.NumTransmitAntennas)];通过一个衰落的室内TGax通道重置(tgaxChannel);为不同的实现重置通道rx = txxchannel (txPad);通过AWGN通道传递波形rx = awgn(rx,packetSNR);计算波束范围内的转向矩阵V = heUserBeamformingFeedback(rx,cfgNDP,true);如果isempty (V)%用户反馈失败,数据包错误numPacketErrors = numPacketErrors+1;numPkt = numPkt+1;继续;%转到下一次循环迭代结束如果~ isinf (codeBookSize (ibf))求波束形成反馈矩阵的量子化角度angidx = bfCompressQuantize(V(:,1:NumSTS,:),NumBitsPhi,NumBitsPsi);从的量子化角度计算转向矩阵% beamformer:%假设传输量子化角度的延迟为零%从波束发生器到波束形成器,转向矩阵为%由量子化角度计算,用于%波束形成器的数据传输。[~,Nc,Nr] = size(V(1,1:NumSTS,:));V = bfDecompress(angidx,Nr,Nc,NumBitsPhi,NumBitsPsi);结束steeringMat = V(:,1:NumSTS,:);%波束形成的数据传输psduLength = getPSDULength(cfgHE);% PSDU长度,单位为字节txPSDU = randi([0 1],psduLength*8,1);%生成随机PSDUcfgHE。SpatialMappingMatrix = steeringMat;tx = wlanWaveformGenerator(txPSDU,cfgHE);添加尾随零以允许信道延迟txPad = [tx;0 (50, cfgHE.NumTransmitAntennas)];通过一个衰落的室内TGax通道rx = txxchannel (txPad);通过AWGN通道传递波形rx = awgn(rx,packetSNR);包检测和确定粗包偏移coarsePktOffset = wlanPacketDetect(rx,chanBW);如果isempty (coarsePktOffset)%如果为空,未检测到L-STF;包错误numPacketErrors = numPacketErrors+1;numPkt = numPkt+1;继续;%转到下一次循环迭代结束提取L-STF并进行粗频偏校正lstf = rx(coarsePktOffset+(ind.LSTF(1):ind.LSTF(2)),:);粗freqoff = wlan粗secfoestimate (lstf,chanBW);rx = frequencyOffset(rx,fs,-粗freqoff);提取非ht字段并确定细包偏移量nonhtfields = rx(coarsePktOffset+(ind.LSTF(1):ind.LSIG(2)),:);finePktOffset = wlanSymbolTimingEstimate(nonhtfields,chanBW);确定最终数据包偏移量pktOffset = coarsePktOffset+finePktOffset;%如果检测到的数据包超出预期延迟范围%渠道建模;包错误如果pktOffset>50 numPacketErrors = numPacketErrors+1;numPkt = numPkt+1;继续;%转到下一次循环迭代结束提取L-LTF并执行精细的频偏校正rxLLTF = rx (pktOffset + (ind.LLTF (1): ind.LLTF (2)),:);fineFreqOff = wlanFineCFOEstimate(rxLLTF,chanBW);rx = frequencyOffset(rx,fs,-fineFreqOff);HE-LTF解调和信道估计rxHELTF = rx(pktOffset+(ind.HELTF(1):ind.HELTF(2)),:);heltfDemod = wlanHEDemodulate(rxHELTF,“HE-LTF”, cfgHE);[chanEst,pilotEst] = heLTFChannelEstimate(heltfDemod,cfgHE);数据解调rxData = rx(pktOffset+(ind.HEData(1):ind.HEData(2)),:);demodSym = wlanHEDemodulate(rxData,“数据”, cfgHE);导频相位跟踪对符号的平均单流导频估计(第2维)pilotEstTrack = mean(pilotEst,2);demodSym = wlanHETrackPilotError(demodSym,pilotEstTrack,cfgHE,“数据”);估计HE场的噪声功率nVarEst = heNoiseEstimate(demodSym(ofdmInfo.PilotIndices,:,:),pilotEstTrack,cfgHE);从解调的符号和信道中提取数据子载波%的估计demodDataSym = demodSym(ofdinfo . dataindices,:,:);chanEstData = chanEst(ofdinfo . dataindices,:,:);%平衡和STBC结合[eqDataSym,csi] = heEqualizeCombine(demodDataSym,chanEstData,nVarEst,cfgHE);%恢复数据rxPSDU = wlanHEDataBitRecover(eqDataSym,nVarEst,csi,cfgHE,“LDPCDecodingMethod”,“norm-min-sum”);确定是否有任何位错误,即数据包错误。packetError = ~isequal(txPSDU,rxPSDU);numPacketErrors = numPacketErrors+packetError;numPkt = numPkt+1;结束计算信噪比点的包错误率(PER)packeterrors (ibf,isnr) = numPacketErrors/(numPkt-1);disp ([“主持人”num2str (cfgHE.MCS)”、“...“信噪比”num2str(信噪比(isnr))...“完成后”num2str (numPkt-1)“包”,...“每:”num2str (packetErrorRate (ibf, isnr))));结束disp(换行符);结束
端到端模拟压缩波束形成量化,比特数为phi = 4,比特数为psi = 2 MCS 3, 13包后完成信噪比10,PER:0.84615 MCS 3, 44包后完成信噪比12,PER:0.25 MCS 3, 91包后完成信噪比14,PER:0.12088 MCS 3, 100包后完成信噪比16,PER:0.05 MCS 3, 100包后完成信噪比18,每:0的端到端模拟与压缩波束形成量化位数φ= 6和ψ= 4 MCS 3位数,信噪比10完成后15包,每:0.73333 MCS 3,信噪比12完成46包后,每:0.23913 MCS 3,信噪比14 100包完成后,每:0.1 MCS 3,信噪比16 100包完成后,每:0.05 MCS 3,信噪比18 100包完成后,每:0与未压缩的端到端模拟波束形成MCS 3,信噪比10完成后15包,PER:0.73333 MCS 3, 46包后完成信噪比12,PER:0.23913 MCS 3, 92包后完成信噪比14,PER:0.11957 MCS 3, 100包后完成信噪比16,PER:0.04 MCS 3, 100包后完成信噪比18,PER:0
图包错误率与信噪比
图;lineTypes = [“k o”“台球”“r - *”];semilogy(信噪比、packetErrorRate(1:),线型(1));持有在;网格在;包含(“信噪比(dB)”);ylabel (“每”);为ibf = 2:numQuant semilogy(snr,packetErrorRate(ibf,:),lineTypes(ibf));结束dataStr = [string([“压缩波束形成”换行符...' numbitspi = 4, NumBitsPsi = 2'换行符)...字符串([“压缩波束形成”换行符...' numbitspi = 6, NumBitsPsi = 4'换行符)...“没有波束形成”];传奇(dataStr);标题(sprintf (用于信道%s, %s, %s的802.11ax波束形成PER ', cfgHEBase.ChannelBandwidth tgaxChannel.DelayProfile cfgHEBase.ChannelCoding));
在每个信噪比点上测试的包数由两个参数控制:maxNumErrors
而且maxNumPackets
.为了得到有意义的结果,增加本例中使用的值。下图是通过运行一个较长的模拟生成的maxNumErrors
: 1 e3和maxNumPackets
: 1 e4。
进一步的探索
使用4x HE-LTF压缩模式进行NDP和数据包传输,可以探测所有子载波并估计信道。当采用2x HE-LTF压缩模式时,在信道估计过程中进行线性插值。本例不执行子载波波束形成平滑。因此,如果将模拟配置为使用2倍HE-LTF压缩,在信道估计期间执行的插值将不能正确估计所有子载波的波束形成矩阵,并且PER将增加。
选定的参考书目
IEEE标准802.11ax™-2021。IEEE信息技术标准。系统间的电信和信息交换。局域网和城域网。特殊要求。第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范。修改件1:高效WLAN的增强。