主要内容

802.11动态速率控制仿真

这个例子展示了通过改变在频率选择性多径衰落信道上传输的连续数据包的调制和编码方案(MCS)来动态速率控制。

简介

IEEE®802.11™标准支持基于底层无线电传播信道金宝app调整每个传输包的MCS值的动态速率控制。在由于多径衰落或周围物体的移动而随时间变化的传播通道中,最大化链路吞吐量需要MCS的动态变化。IEEE 802.11标准没有定义动态改变调制速率的标准速率控制算法(RCA)。RCA的实现留给WLAN设备制造商。本例使用闭环速率控制方案。用于传输包的推荐MCS在接收端计算,并且在发送端可用,没有任何反馈延迟。在实际系统中,该信息将通过控制帧交换来传递。MCS对每个后续数据包进行调整,以响应不断变化的信道条件,噪声功率随时间变化。

在本例中,IEEE 802.11ac™[1由单个VHT格式包组成的波形使用wlanWaveformGenerator函数。波形通过TGac通道传递,并添加噪声。报文被同步并解码以恢复PSDU。信噪比被估计,并与阈值进行比较,以确定哪个MCS适合下一个数据包的传输。该图显示了每个包的处理过程。

波形的配置

本例模拟IEEE 802.11ac VHT传输。VHT波形属性在a中指定wlanVHTConfig配置对象。在本例中,对象初始配置为40 MHz信道带宽、单发射天线和QPSK速率-1/2 (MCS 1)。后续数据包的MCS在整个模拟过程中由算法更改。

cfgVHT = wlanVHTConfig;cfgVHT。ChannelBandwidth =“CBW40”40 MHz的信道带宽cfgVHT。MCS = 1;% QPSK速率-1/2cfgVHT。APEPLength = 4096;% APEP长度,单位为字节为结果的可重复性设置随机流S = rng(21);

通道配置

在本例中,使用TGac N-LOS信道模型和延迟配置文件model - d。对于d模型,当发射机与接收机之间的距离大于或等于10米时,模型为NLOS。这将在中进一步描述wlanTGacChannel

tgacChannel = wlanTGacChannel;tgacChannel。DelayProfile =“模型”;tgacChannel。ChannelBandwidth = cfgVHT.ChannelBandwidth;tgacChannel。numtransmitantenna = 1;tgacChannel。numreceiveantenna = 1;tgacChannel。TransmitReceiveDistance = 20;%距离(以米为单位)tgacChannel。RandomStream =“mt19937ar with seed”;tgacChannel。Seed = 0;tgacChannel。NormalizeChannelOutputs = false;设置通道的采样率sr = wlanSampleRate(cfgVHT);tgacChannel。SampleRate = sr;

速率控制算法参数

通常rca使用信道质量或链路性能指标(如信噪比或包错误率)来选择速率。本例中给出的RCA用于估计接收数据包的信噪比。在接收时,将估计的信噪比与预定义的阈值进行比较。如果信噪比超过预定义的阈值,则选择一个新的MCS来传输下一个包。的rcaAttack而且rcaRelease控制平稳的利率变化,以避免过早地改变利率。信噪比必须大于阈值+rcaAttack值,以增加MCS和必须低于阈值-rcaRelease值降低MCS。在这个模拟中rcaAttack而且rcaRelease将保守地增加MCS,并积极地降低它。为阈值为本例中模拟的场景所选择的值,预计会出现少量的数据包错误。这些设置可能不适用于其他场景。

rcaAttack = 1;在MCS增加时控制灵敏度rcaRelease = 0;在MCS降低时控制灵敏度阈值= [11 14 19 20 25 28 30 31 35];snrUp = [threshold inf]+rcaAttack;snrDown = [-inf threshold]-rcaRelease;snrInd = cfgVHT.MCS;保存MCS的起始值

仿真参数

在这个模拟中numPackets数据包通过TGac通道传输,由固定的空闲时间分隔。在整个模拟过程中保持信道状态,因此信道随着时间的推移而缓慢地演变。这种演变缓慢地改变了在接收机处测量的最终信噪比。由于TGac信道随时间变化非常缓慢,在这里,在短模拟中可见的接收机的信噪比变化可以使用walkSNR修改噪声功率参数:

  1. 设置walkSNR为true时,通过在传输过程中随机设置每个包的噪声功率,产生不同的信噪比。信噪比在14-33 dB之间(使用振幅而且meanSNR变量)。

  2. 设置walkSNR对应用于接收波形的噪声功率进行错误修正,因此信道变化是接收机信噪比变化的主要来源。

numPackets = 100;%模拟过程中传输的报文数walkSNR = true;选择模拟的信噪比如果walkSNR meanSNR = 22;平均信噪比%振幅= 14;信噪比在平均信噪比周围的变化百分比为每个传输的数据包生成不同的信噪比值baseSNR = sin(linspace(1,10,numPackets))*振幅+meanSNR;snrWalk = baseSNR(1);%设置初始信噪比maxJump控制最大信噪比的差异%数据包和下一个maxJump = 0.5;其他的固定的平均信噪比为每个传输数据包。所有的可变性信噪比中的%来自随时间变化的无线电信道snrWalk = 22;% #好< UNRCH >结束为每个空间流集绘制均衡星座% displayConstellation为truedisplayConstellation = false;如果显示星座星座图= com .星座图;% #好< UNRCH >ConstellationDiagram。ShowGrid = true;ConstellationDiagram。Name =“均衡数据符号”结束定义模拟变量snrMeasured = 0 (1,numPackets);MCS = 0 (1,numPackets);ber = 0 (1,numPackets);packetLength = 0 (1,numPackets);

处理链

对每个数据包进行以下处理步骤:

  1. PSDU被创建和编码以创建单个数据包波形。

  2. 在连续报文之间增加固定的空闲时间。

  3. 波形通过一个演变的TGac通道传递。

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

  5. 这个局部函数processPacket将传输的波形通过TGac信道,执行接收机处理和信噪比估计。

  6. 从接收到的波形中提取VHT-LTF。对VHT-LTF进行OFDM解调,并进行信道估计。

  7. VHT数据字段是从同步接收的波形中提取的。

  8. 使用解调数据场导频和导频子载波上的单流信道估计进行噪声估计。

  9. 每个包的估计信噪比与阈值进行比较,比较用于调整下一个包的MCS。

  10. 使用提取的VHT-Data字段恢复PSDU。

为了简单起见,这个例子假设:

  1. 每个传输包的固定带宽和天线配置。

  2. 没有明确的反馈包来通知发送器下一个包的建议MCS设置。本例假设在发送后续数据包之前,发送方已经知道该信息。

  3. 固定空闲时间之间的数据包0.5毫秒。

numPkt = 1:numPackets如果walkSNR使用随机游走算法生成每个包的信噪比值%趋于平均信噪比snrWalk = 0.9*snrWalk+0.1*baseSNR(numPkt)+rand(1)*maxJump*2-maxJump;结束生成单个报文波形txPSDU = randi([0,1],8*cfgVHT。PSDULength 1“int8”);txWave = wlanWaveformGenerator(txPSDU,cfgVHT, wlanWaveformGenerator)“IdleTime”5的军医);接收处理,包括信噪比估计y = processPacket(txWave,snrWalk,tgacChannel,cfgVHT);绘制数据携带子载波的均衡符号如果displayConstellation && ~isempty(y.r estimatedsnr) release(ConstellationDiagram);ConstellationDiagram。ReferenceConstellation = wlanReferenceSymbols(cfgVHT);ConstellationDiagram。标题= [“包”int2str (numPkt)];ConstellationDiagram (y.EqDataSym (:));drawnow结束存储每个包的估计信噪比值如果isempty(y.r estimatedsnr) snrMeasured(1,numPkt) = NaN;其他的snrMeasured(1,numPkt) = y.估计snr;结束以秒为单位计算数据包的长度,包括空闲时间packetLength(numPkt) = y.RxWaveformLength/sr;计算包错误率(PER)如果isempty (y.RxPSDU)%设置未检测到报文的PER值为NaNber(numPkt) = NaN;其他的[~,ber(numPkt)] = biterr(y.RxPSDU,txPSDU);结束将估计的信噪比与阈值进行比较,并调整MCS值%用于下一个数据包MCS(numPkt) = cfgVHT.MCS;存储当前的MCS值(snrInd==0)+snrInd);(snrDown(snrInd==0)+snrInd);snrInd = snrInd+增加emcs -减少emcs;cfgVHT。MCS = snrInd-1;结束

显示和绘图模拟结果

这个示例绘制了MCS、SNR、BER和数据吞吐量在模拟持续时间内的变化。

  1. 用于传输每个包的MCS被绘制出来。当与估计的信噪比比较时,你可以看到MCS选择依赖于估计的信噪比。

  2. 每个包的误码率取决于信道条件、信噪比和用于传输的MCS。

  3. 通过根据信道条件改变MCS,可以使吞吐量最大化。吞吐量是使用三个包的滑动窗口计算的。对于绘制的每个点,吞吐量是在三个数据包的持续时间内成功恢复的数据位的数量。滑动窗口的长度可以增加,以进一步平滑吞吐量。当MCS降低或发生包错误时,您可以看到吞吐量下降。

显示和绘图模拟结果disp ([“总体数据速率:”num2str (8 * cfgVHT.APEPLength * (numPackets-numel(找到(ber))) / (packetLength) / 1和e6)“Mbps”]);disp ([“整体数据包错误率:”num2str(元素个数(找到(ber)) / numPackets)]);MCS, plotResults (ber, packetLength snrMeasured cfgVHT);恢复默认流rng(年代);
总体数据率:20.631 Mbps总体分组错误率:0.03

结论及进一步探索

本例使用了一个闭环速率控制方案,其中用于后续数据包传输的MCS的知识被假定为发射机可用。

在本例中,由于接收信噪比而引起的MCS随时间的变化由阈值rcaAttack而且rcaRelease参数。的rcaAttack而且rcaRelease用作平滑利率变化的控制,这是为了避免过早地改变利率。试着改变rcaRelease控制到2。在这种情况下,当信道条件不好时,MCS的降低反应较慢,从而导致较高的误码率。

试着设置displayConstellation为true以绘制每个接收包的均衡符号,您可以看到调制方案随着时间的变化。还可以尝试设置walkSNR为false,以便可视化每个包的MCS变化。这里信噪比的变化仅仅是由无线电信道引起的,而不是信道和随机游走的组合。

进一步的探索包括使用替代RCA方案,更现实的MCS变化,包括改变时空流的数量,数据包大小和为后续传输的数据包启用STBC。

附录

本例使用了以下helper函数:

选定的参考书目

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

本地函数

本例中使用了以下本地函数:

  • processPacket:增加信道损伤,解码接收报文

  • plotResults:绘制模拟结果图

函数Y = processPacket(txWave,snrWalk,tgacChannel,cfgVHT)将传输的波形通过通道,执行%接收机处理,信噪比估计。chanBW = cfgVHT.ChannelBandwidth;通道带宽%%对于未检测到的报文,将以下参数设置为空estimatedSNR = [];eqDataSym = [];noisevvht = [];rxPSDU = [];获取OFDM信息ofdmInfo = wlanVHTOFDMInfo(“VHT-Data”, cfgVHT);通过衰落信道模型传递波形rxWave = tgacChannel(txWave);%考虑噪声能量为空,因此信噪比定义为有源子载波百分比packetSNR = snrWalk-10*log10(ofdinfo . fftlength / ofdinfo . numtones);%添加噪音rxWave = awgn(rxWave,packetSNR);rxWaveformLength = size(rxWave,1);%接收波形的长度%恢复数据包ind = wlanFieldIndices(cfgVHT);获取字段索引pktOffset = wlanPacketDetect(rxWave,chanBW);检测报文如果~ isempty (pktOffset)%如果检测到数据包提取L-LTF字段以实现良好的定时同步LLTFSearchBuffer = rxWave(pktOffset+(ind.LSTF(1):ind.LSIG(2)),:);L-LTF字段的起始索引finePktOffset = wlanSymbolTimingEstimate(LLTFSearchBuffer,chanBW);确定最终数据包偏移量pktOffset = pktOffset+finePktOffset;如果pktOffset < 15%如果同步成功从波形中提取VHT-LTF样本,解调和%执行信道估计VHTLTF = rxWave(pktOffset+(ind.VHTLTF(1):ind.VHTLTF(2)),:);demodVHTLTF = wlanVHTLTFDemodulate(VHTLTF,cfgVHT);chanEstVHTLTF = wlanVHTLTFChannelEstimate(demodVHTLTF,cfgVHT);获得单个流通道估计chanEstSSPilots = vhtSingleStreamChannelEstimate(demodVHTLTF,cfgVHT);提取VHT数据字段vhtdata = rxWave(pktOffset+(ind.VHTData(1):ind.VHTData(2)),:);估计VHT数据场的噪声功率noisevvht = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT);使用恢复数据携带子载波上的均衡符号% VHT-LTF通道估计[rxPSDU,~,eqDataSym] = wlanVHTDataRecover(vhtdata,chanEstVHTLTF,noiseVarVHT,cfgVHT);每个接收天线的信噪比估计%powVHTLTF = mean(VHTLTF.*conj(VHTLTF));estSigPower = powvhtltf - noisevvht;估计信噪比= 10*log10(mean(estSigPower./ noisevvht));结束结束%设置输出Y = struct(...“RxPSDU”rxPSDU,...“EqDataSym”eqDataSym,...“RxWaveformLength”rxWaveformLength,...“NoiseVar”noiseVarVHT,...“EstimatedSNR”, estimatedSNR);结束函数MCS, plotResults (ber, packetLength snrMeasured cfgVHT)可视化仿真结果图(“Outerposition”,[50 50 900 700]) subplot(4,1,1);情节(MCS);包含(“包数”) ylabel (“主持人”)标题(“选择MCS进行传输”)次要情节(4、1、2);情节(snrMeasured);包含(“包数”) ylabel (“信噪比”)标题(估计信噪比的)次要情节(4 1 3);情节(找到(数量= = 0),误码率(ber = = 0),“x”)举行;茎(找到(ber > 0),误码率(ber > 0),”或“如果任何(ber)传说(“成功解码”“成功解码”其他的传奇(“成功解码”结束包含(“包数”) ylabel (“方方面面”)标题(“每包瞬时误码率”)次要情节(4,4);windowLength = 3;平均窗口的长度movDataRate = movsum(8*cfgVHT.APEPLength.*(ber==0),windowLength)./movsum(packetLength,windowLength)/1e6;情节(movDataRate)包含(“包数”) ylabel (“Mbps”)标题(sprintf ('最近%d个包的吞吐量', windowLength))结束