这个例子展示了如何使用带衰落TGac信道模型和加性高斯白噪声的端到端仿真来测量IEEE®802.11ac™VHT链路的包错误率。
在此示例中,端到端模拟用于确定802.11ac的数据包错误率[1在选定的信噪比点上使用衰落信道的VHT链路。在每个信噪比点,多个包通过信道传输,解调和PSDUs恢复。将PSDUs与传输的PSDUs进行比较,以确定包错误率和包错误率。包检测、定时同步、载波频偏校正和相位跟踪由接收机完成。对每个包的处理总结如下
这个例子还展示了如何议案
循环可以使用而不是为了
循环在模拟每个SNR点以加速模拟时。这议案
函数,作为并行计算工具箱™的一部分,并行对每个SNR执行处理,以减少总仿真时间。
在此示例中模拟了802.11ac的VHT传输。VHT格式配置对象,wlanVHTConfig
,包含传输的格式特定配置。对象的属性包含配置。在该示例中,对象被配置为80MHz信道带宽,8个发送天线,8个时空流,没有空间时间块编码和256-QAM速率-5 / 6(MCS 9)。
%为8Y-8 VHT传输创建格式配置对象cfgvht = wlanvhtconfig;cfgvht.channelbandwidth =“CBW80”;%80 MHz通道带宽cfgvht.numtransmitantennas = 8;%8发射天线cfgvht.numspacetimestreams = 8;% 8时空流cfgvht.apeplength = 3000;% APEP长度,以字节为单位cfgvht.mcs = 9;% 256 - qam rate-5/6
在该示例中,TGAC N-LOS频道模型用于延迟配置文件Model-D。对于Model-D时,发射器和接收器之间的距离大于或等于10米,模型是NLO。这进一步描述了wlanTGacChannel
.本例中模拟了一个8x8的MIMO信道,因此指定了8个接收天线。
%创建并配置通道TGACCHANNEL = WLANTGACCHANNEL;tgacchannel.delayprofile ='Model-D';tgacchannel.numreceiveantennas = 8;tgacchannel.transmitreceivedistance = 10;对于nlos的百分米距离TGACCHANNEL.CHANNELBANDWIDTH = CFGVHT.CHANNELBANDWIDTH;tgacchannel.numtransmitantennas = cfgvht.numtransmitantennas;TGACCHANNEL.LARGESCALEFADEDEFFECT =“没有”;
对于向量中的每个信噪比点信噪比
产生若干数据包,通过一个通道并解调以确定数据包错误率。
信噪比= 40:5:50;
在每个SNR点测试的数据包数由两个参数控制:
maxNumErrors
是每个SNR点模拟的最大分组错误数。当数据包错误的数量达到此限制时,此SNR点处的仿真完成。
maxnumpackets.
是在每个SNR点处模拟的最大数据包数,并限制模拟的长度如果未达到数据包错误限制。
在此示例中选择的数字将导致仿真非常短。有意义的结果,我们建议增加数字。
maxnumerrors = 10;%SNR点的最大分组错误数maxnumpackets = 100;SNR点处的最大数据包数
设置模拟的剩余变量。
%获取基带采样率FS = WLANSAMPLEDE(CFGVHT);%获取OFDM信息OFDMINFO = WLANVHTOFDMINFO('vht-data', cfgVHT);%设置通道采样率tgacchannel.samplere = fs;%索引用于访问时域数据包中的每个字段印第安纳州= wlanFieldIndices (cfgVHT);
对于每个SNR点,测试了许多数据包,并计算数据包错误率。
对于每个数据包,发生以下处理步骤:
一个PSDU被创建并被编码以创建单个数据包波形。
波形通过TGac信道模型的不同实现来传递。
在OFDM解调后,将AWGN加入到接收波形中,以产生所需的每子载波平均信噪比。这comm.awgnchannel.
对象配置为提供正确的SNR。该配置通过在OFDM解调期间除去的未使用子载波中的接收天线数和未使用的子载波中的噪声能量来进行归一化。
检测到报文。
估计和校正粗载波频率偏移。
确定精细的时序同步。提供L-STF,L-LTF和L-SIG样本用于精细定时,以允许在L-STF的开始或结尾处进行分组检测。
估计和校正细载波频率偏移。
从同步接收波形中提取VHT-LTF。对VHT-LTF进行OFDM解调并进行信道估计。
VHT数据场从同步接收波形中提取。利用提取的域和信道估计恢复PSDU。
一种议案
环路可用于并行处理信噪比点,因此对每个信噪比点创建一个AWGN信道并配置comm.awgnchannel.
目的。能够使用并行计算以增加速度评论为了
语句并取消注释议案
下面的语句。
s = numel(SNR);packeterrorrate =零(s,1);%parfor i = 1:S %使用parfor加速模拟为了我= 1:s%使用“for”调试模拟%迭代设置随机子流索引,以确保每个%迭代使用可重复的随机数Stream = RANDSTREAM(“combRecursive”那'种子', 0);流。Substream =我;RandStream.setGlobalStream(流);%模拟了每个SNR点创建AWGN通道的实例Awgnchannel = comm.awgnchannel;awgnchannel.noisemethod ='信噪比(SNR)';%归一化awgnChannel。SignalPower = 1 / tgacChannel.NumReceiveAntennas;%表示能量为零awgnchannel.snr = snr(i)-10 * log10(Ofdminfo.fftlength / ofdminfo.numtones);%循环以模拟多个数据包numpacketerrors = 0;numpkt = 1;传输的数据包%索引尽管numpacketerrors <= maxnumerrors && numpkt <= maxnumpackets%生成报文波形txpsdu = randi([0 1],cfgvht.psdulength * 8,1);% PSDULength(字节)tx = wlanWaveformGenerator (txPSDU cfgVHT);%添加尾随零以允许通道延迟tx = [tx;0 (50, cfgVHT.NumTransmitAntennas)];% #好< AGROW >将波形通过衰落信道模型重置(tgacChannel);用于不同实现的%重置通道Rx = TGACCHANNEL(TX);%添加噪声rx = awgnchannel(rx);%数据包检测并确定粗分组偏移量coarsepktoffset = wlanpacketdetect(rx,cfgvht.channelbandwidth);如果isempty (coarsePktOffset)%如果为空没有检测到L-STF;包错误numPacketErrors = numPacketErrors + 1;numpkt = numpkt + 1;继续;%转到下一个循环迭代结束%提取L-STF并执行粗略频率偏移校正lstf = rx(coarsepktoffset +(ind.lstf(1):Ind.lstf(2)),:);coarsefreqoff = wlancoarsecfoestimate(lstf,cfgvht.channelbandwidth);rx = helperfrequencyOffset(RX,FS,-CoarseFreqoff);%提取非HT字段并确定精细数据包偏移量nonhtfields = rx (coarsePktOffset + (ind.LSTF (1): ind.LSIG (2)),:);finePktOffset = wlanSymbolTimingEstimate (nonhtfields,......cfgVHT.ChannelBandwidth);%确定最终数据包偏移量pktOffset = coarsePktOffset + finePktOffset;%如果数据包检测到否则预期延迟范围%信道建模;包错误如果pktOffset>50 numPacketErrors = numPacketErrors+1;numpkt = numpkt + 1;继续;%转到下一个循环迭代结束%提取L-LTF并执行细频偏移校正lltf = rx(pktoffset +(ind.lltf(1):Ind.lltf(2)),:);finefreqoff = wlanfinecfoestimate(lltf,cfgvht.channelbandwidth);rx = helperfrequencyOffset(Rx,FS,-Finefreqoff);%从波形中提取VHT-LTF样本,解调和执行%信道估计数vhtltf = rx(pktoffset +(ind.vhtltf(1):Ind.vhtltf(2)),:);vhtltfdemod = wlanvhtltfdemodulate(vhtltf,cfgvht);获得单流信道估计chanestsspilots = vhtsinglestreamChanneLestimate(VHTLTFDEMOD,CFGVHT);%信道估计chanest = wlanvhtltfchannelestimate(vhtltfdemod,cfgvht);%从波形中提取VHT数据样本vhtdata = rx(pktoffset +(ind.vhtdata(1):Ind.Vhtdata(2)),:);%估计VHT数据字段中的噪声功率nvarvht = vhtnoiseestimate(vhtdata,chanestsspilots,cfgvht);%恢复VHT数据中传输的PSDUrxpsdu = wlanvhtdatarecover(vhtdata,chanest,nvarvht,cfgvht);%确定是否有错误,即数据包错误Packeterror =任何(Biterr(TXPSDU,RXPSDU));numpacketerrors = numpacketerrors + packeterror;numpkt = numpkt + 1;结束%计算信噪比点的包错误率packetErrorRate (i) = numPacketErrors / (numPkt-1);disp (['snr'num2str(snr(i))'完成后'......num2str(numpkt-1)'包,PER: '......num2str(packeterrorrate(i))]);结束
11包后完成SNR 40, PER: 1, 15包后完成SNR 45, PER: 0.73333, 100包后完成SNR 50, PER: 0.04
图半径(SNR,Packeterrorrate,'-ob');网格在;包含(“信噪比(dB)”);ylabel(“每”);标题('802.11ac 80MHz,MCS9,直接映射,8x8通道模型D-NLOS');
在每个SNR点测试的数据包数由两个参数控制;maxNumErrors
和maxnumpackets.
.对于有意义的结果,建议这些值应该大于本例中给出的值。通过增加模拟数据包的数量,可以比较不同场景下的PER。尝试改变传输和接收配置,并比较包错误率。作为一个示例,下面的图是通过运行示例创建的maxNumErrors
:1000和maxnumpackets.
: 10000。
这个例子使用了以下帮助函数:
IEEE STD 802.11AC™-2013信息技术的IEEE标准 - 系统之间的电信和信息交流 - 本地和大都市区域网络 - 特定要求 - 第11部分:无线LAN介质访问控制(MAC)和物理层(PHY)规格 - 修正4:在6 GHz低于6 GHz的频段中操作的高吞吐量的增强功能。