主要内容

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。估计SNR并与阈值进行比较,以确定哪些MCS适合于传输下一个数据包。该图显示了每个数据包的处理。

波形配置

本例模拟了IEEE 802.11ac VHT传输。VHT波形特性在awlanvhtconfig配置对象。在该示例中,对象最初配置为40MHz信道带宽,单个发送天线和QPSK率-1 / 2(MCS 1)。在整个模拟中,算法改变了后续数据包的MCS。

cfgvht = wlanvhtconfig;cfgvht.channelbandwidth ='CBW40';%40 MHz通道带宽cfgvht.mcs = 1;% QPSK rate-1/2cfgVHT。APEPLength = 4096;%APEP长度以字节为单位%设置随机流以保证结果的可重复性s = rng (21);

频道配置

在这个例子中,TGac N-LOS信道模型与延迟剖面模型- d一起使用。对于model - d,当发射器与接收器之间的距离大于或等于10m时,模型为NLOS。这将在后面进行描述wlanTGacChannel

tgacChannel = wlanTGacChannel;tgacChannel。DelayProfile =“模型”;TGACCHANNEL.CHANNELBANDWIDTH = CFGVHT.CHANNELBANDWIDTH;tgacchannel.numtransmitantennas = 1;tgacchannel.numreceiveantennas = 1;tgacchannel.transmitreceivedistance = 20;% NLOS的距离,单位为米tgacchannel.randomstream =.“与种子mt19937ar”;tgacChannel。种子= 0;%设置频道的采样率sr = wlanSampleRate (cfgVHT);tgacChannel。SampleRate =老;

速率控制算法参数

通常,RCAS使用信道质量或链路性能度量,例如SNR或数据包错误率,用于速率选择。在此示例中呈现的RCA估计收到的数据包的SNR。在接收时,将估计的SNR与预定义的阈值进行比较。如果SNR超过预定义的阈值,则选择新的MCS用于发送下一个数据包。这rcaAttackrcaRelease控制平滑的速率变化,以避免过早改变速率。SNR必须超过阈值+rcaAttack增加MCS的价值,必须在阈值-rcaRelease值减少MCS。在这个模拟中rcaAttackrcaRelease设定为保守地增加MCS并积极减少它。为了阈值为本示例中模拟的场景选择的值,预计会有少量的数据包错误。这些设置可能不适用于其他场景。

rcaAttack = 1;% MCS增加时,控制灵敏度rcarelease = 0;当MCS下降时,控制灵敏度阈值= [11 14 19 20 25 28 30 31 35];snrup = [threshold inf] + rcaattack;snrdown = [-inf阈值] -rcarelease;snrind = cfgvht.mcs;%存储启动MCS值

仿真参数

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

  1. 设置walksnr.true通过在传输过程中随机设置每个包的噪声功率来产生变化的信噪比。信噪比在14- 33db之间游走(使用振幅手段变量)。

  2. 设置walksnr.FALSE将施加到接收波形的噪声功率修复,因此信道变化是接收器处的SNR变化的主要源。

numPackets = 100;仿真期间传输的分组数walksnr = true;%选择SNR模拟如果walksnr手段= 22;%平均值SNR.幅度= 14;SNR围绕平均值SNR值的百分比变化%为每个发送的数据包生成不同的SNR值basesnr = sin(linspace(1,10,numpackets))*幅度+均值;snrwalk = basesnr(1);%初始信噪比%MAXJUMP控制一个人之间的最大SNR差异%数据包和下一个maxJump = 0.5;别的%每个发送包的平均信噪比固定值。所有的变化SNR中的%来自不同的无线电频道snrWalk = 22;% #好< UNRCH >结尾%绘制每个空间流集的均衡星座% displayConstellation为truedisplayConstellation = false;如果displayConstellation ConstellationDiagram = com .ConstellationDiagram;% #好< UNRCH >ConstellationDiagram.showgrid = true;constellationdiagram.name =“平衡的数据符号”;结尾%定义仿真变量numPackets snrMeasured = 0 (1);MCS = 0(1、numPackets);1 = 0(1、numPackets);numPackets packetLength = 0 (1);

加工链

每个数据包都会出现以下处理步骤:

  1. 一个PSDU被创建和编码来创建一个单一的包波形。

  2. 在连续的数据包之间增加一个固定的空闲时间。

  3. 波形通过一个演进的TGac信道。

  4. 将AWGN添加到发射波形中,以创建每个子载波所需的平均信噪比。

  5. 这个本地函数processPacket将发射波形通过TGac信道,进行接收处理,并进行信噪比估计。

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

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

  8. 使用解调数据字段导频和导频子载波的单流信道估计来执行噪声估计。

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

  10. 使用提取的VHT数据字段恢复PSDU。

为简单起见,此示例假定:

  1. 针对每个传输分组的固定带宽和天线配置。

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

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

为了numpkt = 1:numpackets如果walksnr.使用随机步行算法偏置的%每分组生成SNR值%趋于平均信噪比snrWalk = 0.9 * snrWalk + 0.1 * baseSNR (numPkt) +兰德(1)* maxJump * 2-maxJump;结尾%生成单个分组波形txpsdu = randi([0,1],8 * cfgvht.psdulength,1,“int8”);txWave = wlanWaveformGenerator (txPSDU cfgVHT,“IdleTime”,5E-4);%接收处理,包括SNR估计Y = ProcessPacket(TXWAVE,SNRWALK,TGACCHANNEL,CFGVHT);%绘制数据携带子载波的数据均等化符号如果DisplayConstellation &&〜isempty(y.estimatedsnr)释放(constellationdiagram);ConstellationDiagram.referenceConstellation = WlanReferenceSymbols(CFGVHT);constellationdiagram.title = ['包'INT2STR(NUMPKT)];ConstellationDiagram(Y.eqDatasym(:));drawn结尾%存储每个数据包的估计SNR值如果isempty(y.h estimatedsnr) snrMeasured(1,numPkt) = NaN;别的SNRMEASUED(1,NUMPKT)= Y.ESTIMATEDSNR;结尾%以秒(包括空闲时间)计算数据包的长度packetlength(numpkt)= y.rxwaveformlength / sr;%计算数据包错误率(per)如果isempty(y.rxpsdu)%将未检测到的数据包设置为NANber (numPkt) =南;别的[~,误码率(numPkt)] = biterr (y.RxPSDU txPSDU);结尾%将估计的信噪比与阈值进行比较,调整MCS值%用于下一个包MCS (numPkt) = cfgVHT.MCS;%存储当前MCS值computemcs =(平均值(y.estimatedsnr)> snrup((snrind == 0)+ snrind)));decresemcs =(均值(y.estimatedsnr)<= snrown((snrind == 0)+ snrind)));snrind = snrind + computemcs-dealeaemcs;cfgvht.mcs = snrind-1;结尾

显示和绘图仿真结果

这个例子描绘了MCS、信噪比、误码率和数据吞吐量在模拟期间的变化。

  1. 绘制用于传输每个数据包的MCS。与估计的信噪比相比,你可以看到MCS的选择依赖于估计的信噪比。

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

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

%显示和绘图模拟结果disp ([“总体数据率:”num2str(8 * cfgvht.apeplength *(numpackets-numel(find(ber))/ sum(packetlength)/ 1e6)'Mbps']);disp (['整体数据包错误率:'num2str(元素个数(找到(ber)) / numPackets)]);MCS, plotResults (ber, packetLength snrMeasured cfgVHT);%恢复默认流RNG;
总体数据速率:20.631 Mbps总体包错误率:0.03

结论与进一步探索

该示例使用闭环速率控制方案,假设用于后续分组传输的MCS的知识可用于发射机。

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

尝试设置displayconstellation.为true才能绘制每个收到的数据包的均衡符号,您可以看到调制方案随时间变化。还要尝试设置walksnr.false,以便可视化每个包的MCS变化。在这里,信噪比的变化只是由无线电信道引起的,而不是信道和随机游走的组合。

进一步的探索包括使用替代RCA方案,更现实的MCS变化,包括改变空间时间流的数量,分组大小并使STBC用于后续发送的分组。

附录

此示例使用以下辅助功能:

选定的书目

  1. IEEE STD 802.11AC™-2013信息技术的IEEE标准 - 系统之间的电信和信息交流 - 本地和大都市区域网络 - 特定要求 - 第11部分:无线LAN介质访问控制(MAC)和物理层(PHY)规格 - 修正4:在6 GHz低于6 GHz的频段中操作的高吞吐量的增强功能。

本地功能

在此示例中使用以下本地功能:

  • processPacket:添加频道障碍和解码接收数据包

  • Plotesults.:绘制模拟结果

功能tgacChannel, Y = processPacket (txWave snrWalk cfgVHT)%通过通道传递传输的波形,执行%接收机处理,信噪比估计。chanBW = cfgVHT.ChannelBandwidth;% 信道带宽%对于未检测到的数据包,将以下参数设置为空估计= [];eqdatasym = [];noisevarvht = [];rxpsdu = [];%获取OFDM信息ofdmInfo = wlanVHTOFDMInfo (“VHT-Data”, cfgVHT);%使波形通过衰落信道模型rxwave = tgacchannel(txwave);%为每个发送的数据包创建AWGN通道的实例Awgnchannel = comm.awgnchannel;awgnchannel.noisemethod =“信噪比(SNR)”;%归一化AWGNCHANNEL.SIGNALPOWER = 1 / TGACCHANNEL.NUMRECEIVEANNAS;%占NULL中的能量awgnchannel.snr = snrwalk-10 * log10(Ofdminfo.fftlength / ofdminfo.numtones);%添加噪声rxwave = awgnchannel(rxwave);rxwaveformlength = size(rxwave,1);收到波形的%长度%恢复数据包IND = WLANFIELDINDIDICES(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 = wlanvhtltfdemoduly(vhtltf,cfgvht);chanestvhtltf = wlanvhtltfchannelestimate(demodvhtltf,cfgvht);%获得单流通道估算chanestsspilots = vhtsinglestreamChanneLestimate(Demodvhtltf,cfgvht);%提取VHT数据字段vhtdata = rxWave (pktOffset + (ind.VHTData (1): ind.VHTData (2)),:);%估计VHT数据场的噪声功率noisevarvht = vhtnoiseestimate(vhtdata,chanestsspilots,cfgvht);%恢复数据携带子载波的均等符号VHT-LTF的%信道估计[rxPSDU ~, eqDataSym] = wlanVHTDataRecover (vhtdata、chanEstVHTLTF noiseVarVHT, cfgVHT);每次接收天线%SNR估计powVHTLTF =意味着(VHTLTF。*连词(VHTLTF));estSigPower = powVHTLTF-noiseVarVHT;estimatedSNR = 10 * log10(意味着(estSigPower. / noiseVarVHT));结尾结尾%设置输出Y =结构(...“RxPSDU”,rxpsdu,...“EqDataSym”eqDataSym,...“RxWaveformLength”rxWaveformLength,...'noisevar'noiseVarVHT,...“EstimatedSNR”,估计是谁);结尾功能PlotResults(BER,PacketLength,SNRMeasured,MCS,CFGVHT)%可视化仿真结果数字('offormosition',[50 50 900 700])子图(4,1,1);绘图(MCS);Xlabel('包号')ylabel('MCS')标题(“选择MCS进行传输”)次要情节(4、1、2);情节(snrMeasured);Xlabel('包号')ylabel('snr')标题(估计信噪比的)次要情节(4 1 3);情节(找到(数量= = 0),误码率(ber = = 0),'X') 抓住;茎(找到(ber > 0),误码率(ber > 0),'或者'如果任何(BER)传说('成功解码''不成功的解码'别的传奇('成功解码'结尾Xlabel('包号')ylabel('BER')标题('每个数据包的瞬时误码率')次要情节(4,4);windowLength = 3;%平均窗口长度movDataRate = movsum (8 * cfgVHT.APEPLength。*(数量= = 0),windowLength)。/ movsum (packetLength windowLength) / 1 e6;情节(movDataRate)包含('包号')ylabel(“Mbps”)标题(Sprintf('最近%d个数据包的吞吐量', windowLength))结尾