主要内容

发布14 V2X侧链PSCCH和PSSCH吞吐量

这个例子演示了如何在频率选择性衰落和加性高斯白噪声(AWGN)下测量物理侧链共享信道(PSSCH)和物理侧链控制信道(PSCCH)的吞吐量性能。

简介

3GPP第14版引入了对LTE V2X(车到一切)的支持,以实现车载互联服务,旨在提供更安全、更清洁、更快和更高效的交通运输。V2X提供了多种操作模式,包括车对车(V2V)、车对基础设施(V2I)和车对人(V2P)直接通信,而不必依赖网络参与调度。V2X相对于Release 12的设备对设备侧链的一些区别在于:

  • 低时延、高可靠性要求

  • 由于相对速度高,多普勒频移大

  • 节点数量非常多,节点密度很高

  • 同步的挑战,特别是在超出覆盖范围时

这个例子测量了Release 14 V2X侧链共享和一些SNR点的控制通道吞吐量。有关如何建模Release 12侧链设备对设备(D2D)接口(主要旨在允许LTE支持公共安全通信系统)的信息,请参阅发布12侧链PSCCH和PSSCH吞吐量的例子。

对每个信噪比点逐子帧操作,吞吐量和BLER计算执行以下步骤:

  • 生成一个由PSCCH和/或PSSCH填充的资源网格,并对OFDM进行调制以创建要传输的基带波形

  • 该波形通过一个噪声衰落信道

  • 接收操作(SC-FDMA解调、信道估计和均衡)被执行

  • 对均衡后的符号进行解码,得到块CRC

  • PSCCH和/或PSSCH的性能由信道译码器输出的块CRC结果决定

模拟配置

默认情况下,该示例运行使用在信噪比点范围内四帧的模拟长度。要产生有意义的吞吐量结果,请使用较大的值NFrames.您可以指定SNRIn作为值的数组或标量。

设置要模拟的帧数NFrames = 4;设置一个SNR点范围,以涵盖高和低BLER操作%的条件SNRIn = [-5 0 5];

传输配置

最初指定一组顶级参数,其中包括带宽、循环前缀、调制方案和分配的资源块集。基线配置取自TS 36.101定义的“发射机特性参考测量通道”表A.8.3-1 [2].为了模拟更真实的V2X传输,本例中引入了多个HARQ过程和HARQ重传输。数据速率是根据子帧间隙定义的sfGap和传输时间间隔创科实业

sfGap = 8;初始和重传之间子帧的时间%创科实业= 4;不同HARQ进程之间子帧的时间%如果tti > sfGap错误('tti不能大于sfGap');结束已分配资源块(NPRB)和传输块大小(TBS)的百分比表A.8.3-1。注意,必须选择TBS%根据TS 36.213第14.1.1节和NPRB根据TS 36.213% 14.1.1.4C节。如果指定了无效的TBS/NPRB,则传输的% ModCoding值在SCI消息将是不正确的,这可能%导致SL-SCH解码失败。也可能导致无效的NPRB在SCI消息和相应的PSSCH传输中%已分配资源与这里指定的NPRB不同。NPRB = 48;已分配资源块的百分比(NPRB)TBS = 3496;%传输块大小为资源分配定义起始RB。最初的和后续传输可以有不同的分配。rbStart = [0 0];定义终端配置参数ueConfig =结构(“SidelinkMode”“V2X”);%释放14 V2X模式ueConfig。NSLRB = 50;% 10 mhz带宽ueConfig。DuplexMode =“FDD”%双工模式ueConfig。CyclicPrefixSL =“正常”%循环前缀长度ueConfig。调制=“正交相移编码”符号调制('QPSK','16QAM')

传播通道配置

结构通道包含通道模型配置参数。

频道=结构;通道配置结构通道。种子= 6;%通道种子通道。NRxAnts = 2;%接收天线数通道。DelayProfile =“爱娃”%延迟概要通道。DopplerFreq = 500;%多普勒频率,单位为Hz通道。MIMOCorrelation =“低”% Multi-antenna相关性通道。NTerms = 16;在衰落模型中使用的振荡器通道。ModelType =“GMEDS”瑞利衰落模型类型通道。InitPhase =“随机”%随机初相通道。NormalizePathGains =“上”规范化延迟配置文件功率通道。NormalizeTxAnts =“上”%发射天线归一化信道采样率取决于OFDM中使用的FFT大小%调制器。这可以使用函数lteSLSCFDMAInfo来获得。ofdmInfo = lteSLSCFDMAInfo (ueConfig);通道。SamplingRate = ofdmInfo.SamplingRate;

信道估计配置

的变量perfectChanEstimator控制信道估计器行为。有效的值真正的.当设置为真正的,则采用完全信道响应作为估计值,否则根据接收到的DM-RS信号值得到不完全估计值。如果perfectChanEstimator配置结构是否设置为falsecec需要将信道估计器参数化。

完美信道估计器标志perfectChanEstimator = false;定义实际的信道估计器配置结构。请注意,%,取决于信道延迟轮廓和多普勒频率运行信噪比%,PSSCH调制顺序和分配的数量%的资源块,不同的信道估计参数可能给出更好的结果%的性能。cec =结构;通道估计配置结构cec。PilotAverage =“UserDefined”导频符号平均的类型cec。FreqWindow = 27个;%频率窗口大小cec。TimeWindow = 1;%时间窗口大小cec。InterpType =“立方”% 2D插值类型

配置吞吐量测量

逻辑变量measureBLERForSCI而且measureTputForSLSCH允许分别禁用SCI和SL-SCH的吞吐量测量和所有相关接收器处理。这允许将模拟配置为仅测量其中一个通道的吞吐量。禁用其他通道的接收器处理可以提高执行速度。

measureBLERForSCI = true;measureTputForSLSCH = true;

选择“当SCI解码失败时接收方行为”

逻辑变量sciAssumed根据控制信道译码对共享信道译码的影响控制仿真行为。如果sciAssumed为true时,接收方将假定SCI消息在尝试共享通道接收时已被正确解码。这使得共享信道接收的性能可以独立于控制信道接收的性能进行测量。如果sciAssumed为false时,控制信道解码失败意味着共享信道解码失败。请注意,如果上面禁用了SCI的吞吐量测量(measureBLERForSCI = false),并启用SL-SCH的吞吐量测量(measureTputForSLSCH = true),接收方在测量SL-SCH吞吐量时将假定SCI消息被正确解码,而不管设置为sciAssumed在这里。

sciAssumed = false;

显示模拟信息

的变量displaySimulationInformation控制模拟信息的显示,例如所使用的HARQ进程ID和每个子帧的资源分配图。对于长时间的模拟,建议关闭显示器,因为它增加了模拟时间。

displaySimulationInformation = true;

显示V2X侧链通信资源池

侧链直接通信的传输和接收机会与一组称为资源池的周期性出现的时域周期相关联。一个终端可以配置多个消息,因此可以配置多个资源池用于发送和接收消息。单个资源池包含共享和控制子帧和资源池,具体的传输由半静态RRC参数和动态DCI/SCI参数的组合定义。与PSSCH相关联的PSCCH在同一子帧中发送,在相邻的或非相邻的PRB上。为了说明V2X资源池的结构,本例中使用了类V2XSidelinkResourcePool,它对资源池建模,并提供定义特定传输的参数和方法。该方法V2XSidelinkResourcePool.displayPeriod创建一个图形,显示资源池中的控制资源池(深蓝色)和共享资源池(黄色)的位置。

resourcePool = V2XSidelinkResourcePool;resourcePool.Config.NSLRB = ueConfig.NSLRB;resourcePool.Config.DuplexMode = ueConfig.DuplexMode;如果displaySimulationInformation resourcePool.displayPeriod;drawnow;结束

处理链

为了确定每个信噪比点的吞吐量,子帧逐子帧处理链包括:

  • 更新当前HARQ流程的配置-UE要么携带新的传输数据,要么重传先前发送的具有不同冗余版本的PSSCH传输数据。所有这些都由HARQ调度器处理。HARQ缓冲区decState存储软组合的解码器状态。

  • 创建并编码SCI消息-SCI消息携带侧链调度信息。SCI参数为:优先级表示散文每包优先级,ResourceReservation由更高的层设置,为传输块的下一次传输预留资源,RIV携带配置信息,TimeGap发送初始传输和重传输之间子帧时间间隔的信号,ModCoding信令调制方案用于PSSCH接收和RetransmissionIdx指示传输是第一次还是第二次(重传)。然后对SCI消息进行编码并映射到PSCCH上进行传输。SCI消息的CRC是PSSCH的置乱标识。

  • 绘制已分配资源-,则绘制第一个HARQ进程的资源分配displaySimulationInformation国旗是启用的。所有HARQ进程都有相同的PSSCH(橙色)和PSCCH(绿色)资源块分配。PSCCH和PSSCH可以在相邻或不相邻的资源块上传输。

  • 〇创建发射波形将由UE产生的数据传递到物理层处理阶段,产生SC-FDMA调制波形,包含PSCCH和PSSCH物理通道和DRS信号。

  • 噪声信道建模-将波形通过衰落通道并添加噪声(AWGN)。

  • 对PSCCH -进行盲检测在子帧的发送器中使用的PSCCH资源和循环移位是未知的,因此对PSCCH资源块池(由V2XSidelinkResourcePool。PSCCHResourceBlockPool直到SCI成功解码或搜索整个资源池。用最强峰值的DM-RS相关的定时偏移量进行同步。

  • 执行PSCCH信道估计: PSCCH信道估计使用lteSLChannelEstimatePSCCH.信道估计器还产生噪声功率的估计值,可用于MMSE均衡。

  • 提取PSCCH符号和信道估计:从子帧资源网格中提取接收到的PSCCH符号,使用提取相应的信道估计lteExtractResources和提供的指数ltePSCCHIndices

  • 执行PSCCH均衡: PSCCH符号是MMSE均衡使用lteEqualizeMMSE利用上述得到的信道估计和噪声估计。

  • 执行PSCCH解调:对均衡后的PSCCH符号进行解调ltePSCCHDecode.该函数执行发射器调制步骤的逆(SC-FDMA转换解编码,QPSK符号解调和解乱)。

  • 执行SCI解码:正在尝试使用SCI解码lteSCIDecode.SCI消息中的原始信息位数由lteSCIInfo.如果已解码的CRC为零,且恢复的CRC掩码为期望值,则认为SCI解码成功,并将已解码的消息位转换为使用的相应消息结构lteSCI.CRC掩码值提供PSSCH置乱标识,NXID

对于失败的SCI解码,共享通道解码的行为由变量控制sciAssumed.如果sciAssumed为false,则SCI解码失败立即意味着SL-SCH解码失败,并且不对当前子帧进行进一步处理。如果sciAssumed为真,则假定接收方知道所传输的SCI消息,并将用来代替所接收的SCI消息。如果sciAssumed为真,或者如果SCI解码成功,接收端继续进行SL-SCH解码。请注意,如果SCI BLER测量被禁用,但是SL-SCH吞吐量测量被启用,那么传输的SCI消息被假定为接收方已知。

SL-SCH解码:

  • 获取PSSCH资源分配-然后对从恢复的SCI消息获得的RIV进行解码,以获得为该传输分配的子通道的数量和起始子通道。结合PSCCH邻接关系,每个子通道的大小和第一个分配的资源块提供了已分配的PSSCH RBs集合PRBSet

  • 同步和SC-FDMA解调子帧携带PSSCH:使用同步波形的适当子帧lteSLFrameOffsetPSSCH.同步波形采用SC-FDMA解调lteSLSCFDMADemodulate.注意,尽管控制和共享通道在同一子帧中传输,但仅对PSCCH执行同步和SC-FDMA解调就足够了。然而,在本例中,由于共享通道和控制通道可以独立接收,所以执行PSSCH同步和SC-FDMA解调。这是为了在禁用PSCCH接收时启用PSSCH接收。

  • 执行PSSCH信道估计: PSSCH信道估计使用lteSLChannelEstimatePSSCH.信道估计器还产生噪声功率的估计值,可用于MMSE均衡。

  • 提取PSSCH符号和信道估计:从子帧资源网格中提取接收到的PSSCH符号,并使用提取相应的信道估计lteExtractResources和提供的指数ltePSSCHIndices

  • 执行PSSCH均衡: PSSCH符号是MMSE均衡使用lteEqualizeMMSE利用上述得到的信道估计和噪声估计。

  • 执行PSSCH解调:对均衡后的PSSCH符号进行解调ltePSSCHDecode.该函数执行发射器调制步骤的逆(SC-FDMA转换解编码,QPSK或16QAM符号解调和解乱)。解码器使用从SCI解码阶段获得的PSCCH CRC。

  • 终端侧链共享通道(SL-SCH)解码和块CRC错误存储将已解码软位的向量传递给lteSLSCHDecode,它解码码字并返回用于确定系统吞吐量的块CRC错误。新的软缓冲的内容,harqProcesses .decState (harqID),在此函数的输出处可用,以便在解码下一个子帧时使用。

初始化模拟和分析中使用的变量。maxThroughputSLSCH = 0(长度(SNRIn), 1);simThroughputSLSCH = 0(长度(SNRIn), 1);simBLERSCI = 0(长度(SNRIn), 1);获取所需HARQ进程的数量nHARQProcesses =地板(sfGap /创科实业);计算每个发送子帧的HARQ ID序列harqProcessSequence = 0 (1, NFrames * 10);harqProcessSequence(1+tti*(h-1):sfGap:NFrames*10) = h;结束使用固定值的参数创建部分SCI消息%用于模拟。其他具有可变值的参数将为%设置在模拟循环的更下方sciMessage =结构(“SCIFormat”“Format1”);sciMessage。TimeGap= sfGap;根据TBS和调制方案设置PSSCH MCS[胫,modn] = lteMCS (0:28,“PUSCH”);根据TS 36.213章节14.1.1,对于IMCS(0到28),调制% order设置为Q' = min(4,Qm'),其中Qm'可以为2、4或6。所以改变Qm' = 6 ('64QAM')到Qm' = 4 ('16QAM')的%情况modn (strcmpi (modn,64 qam)) = {16 qam的};根据所使用的调制方案过滤有效的传输块大小possibleTBS = lteTBS (NPRB、髂胫);possibleTBS (~ strcmpi (modn ueConfig.Modulation)) = 0;现在根据TBS设置MCS索引sciMessage。ModCoding= find(possibleTBS==TBS,1) - 1;如果需要,创建新的图来显示资源分配如果displaySimulationInformation图;结束如果没有测量SCI BLER,则必须设置“sciassume”,以便使%接收者可以假定SCI的知识如果(~measureBLERForSCI) sciassumption = true;结束rng (“默认”);snrIdx = 1:元素个数(SNRIn)根据循环变量设置随机数生成器种子%以确保独立的随机流rng (snrIdx);初始化所有HARQ缓冲区的状态harqProcess =结构(“RVIdx”, 1“数据”[],“decState”[]);harqProcesses (1: nHARQProcesses) = harqProcess;RVSeq = [0 2];% RV用于初始传输和重传输为主循环设置变量lastOffset = 0;初始化整体帧定时偏移量frameOffset = 0;初始化帧定时偏移量sharedbitTput = [];每子帧成功接收的比特数txedTrBlkSizes = [];每子帧传输的比特数controlErrors = [];SCI块错误的百分比subframe = 0:(NFrames*10-1) harqID = harqProcessSequence(subframe +1);如果harqID = = 0%如果当前没有HARQ进程传输%子帧,继续到下一个继续结束使用新的传输数据更新当前HARQ进程,并重置%接收缓冲区,如果是初始传输。PSSCH是%传输两次,间隙为“sfGap”子帧第一次传输成功如果harqProcesses (harqID)。RVIdx == 1 harqProcesses(harqID)。data = randi([0 1], TBS, 1);harqProcesses (harqID) .decState = [];结束%设置RVueConfig。房车= RVSeq (harqProcesses (harqID) .RVIdx);设置子帧号ueConfig。NSubframePSSCH = subframeNo;显示运行时信息如果displaySimulationInformation流(“子帧:% d。HARQ进程索引:%d。冗余版本:% d \ n ', harqID subframeNo ueConfig.RV)结束当前子帧的通道时间通道。InitTime = subframeNo / 1000;%创建一个空的资源网格slgrid = lteSLResourceGrid (ueConfig);使用启动RB更新传输配置startingRB = rbStart (harqProcesses (harqID) .RVIdx);resourcePool.Config。startRB_Subchannel_r14 = startingRB;从已分配的子通道和的数量计算RIV%起始子通道ueConfig。FirstSubchannelIdx = 0;β= 0;如果strcmpi (resourcePool.Config.adjacencyPSCCH_PSSCH_r14“上”β = 2;结束lsubCH =装天花板((NPRB +β)/ resourcePool.Config.sizeSubchannel_r14);sciMessage。RIV= resourcePool.encodeRIV(lsubCH,ueConfig.FirstSubchannelIdx);设置重传索引sciMessage。RetransmissionIdx = harqProcesses (harqID)。RVIdx - 1;创建SCI和消息位sciConfig = ueConfig;sciConfig。PSSCHNSubchannels = resourcePool.Config.numSubchannel_r14;[sciMessage, sciBits] = lteSCI(sciConfig,sciMessage);%执行SCI编码[cw,crc] = lteSCIEncode(sciConfig, sciBits);NXID是与PSCCH SCI授权相关联的16位CRC%用作PSSCH置乱标识ueConfig。NXID= crc;%将NXID值存储在'expectedNXID'中,这样接收端就不会%根本无法访问'sciMessage'expectedNXID = ueConfig.NXID;显示用于传输的子帧和资源块。请注意%说明所有HARQ进程的分配是相同的图中没有显示HARQ进程的子帧偏移量%除1外如果(displaySimulationInformation) & & (harqID = = 1)指定资源所需的附加参数%池显示sciMessage。FirstSubchannelIdx = ueConfig.FirstSubchannelIdx;sciMessage。SLIndex = 0;resourcePool.displayPeriod (sciMessage 10);drawnow;结束创建PSCCH码字pscchSymbols = ltePSCCH (cw);获取PSCCH的资源分配[pscchsf, pscchrb] = resourcePool.getPSCCHResources (setfield (sciMessage,“FirstSubchannelIdx”ueConfig.FirstSubchannelIdx));% #好< SFLD >选择此传输的资源sciConfig。PRBSet= pscchrb(:,harqProcesses(harqID).RVIdx);获取PSCCH符号索引pscchIndices = ltePSCCHIndices (sciConfig);将PSCCH符号映射到网格上slgrid (pscchIndices) = pscchSymbols;从集合{0,3,6,9}为每个定义一个随机循环移位% PSCCH传输sciConfig。CyclicShift = randi([0 3])*3;创建DM-RS符号和索引pscchdrssymbols = ltePSCCHDRS (sciConfig);pscchdrsindices = ltePSCCHDRSIndices (sciConfig);将PSCCH DRS符号映射到网格上slgrid (pscchdrsindices) = pscchdrssymbols;获取两个传输的资源分配。[psschsf, psschrb] = resourcePool.getPSSCHResources (setfield (sciMessage,“FirstSubchannelIdx”ueConfig.FirstSubchannelIdx));% #好< SFLD >%现在选择此传输的资源ueConfig。PRBSet= psschrb(:,harqProcesses(harqID).RVIdx);计算PSSCH资源索引[psschIndices, psschinfo] = ltePSSCHIndices (ueConfig);% SL-SCH和PSSCH连续波= lteSLSCH (ueConfig、psschinfo.G harqProcesses (harqID) . data);psschSymbols = ltePSSCH (ueConfig, cw);slgrid (psschIndices) = psschSymbols;% PSSCH DRS和DRS索引psschdrssymbols = ltePSSCHDRS (ueConfig);psschdrsindices = ltePSSCHDRSIndices (ueConfig);slgrid (psschdrsindices) = psschdrssymbols;SC-FDMA调制将不使用窗口,因为%波形结构的分段性质窗口= 0;%执行侧链SC-FDMA调制[txWaveform, scfdmaInfo] = lteSLSCFDMAModulate (ueConfig slgrid,窗口);添加25个样本填充。这是为了涵盖延迟的范围%期望从通道建模(的组合%实现延迟和通道延迟扩散)ntxants =大小(txWaveform, 2);txWaveform = [txWaveform;ntxants 0(25日)];% #好< AGROW >通过通道模型传递数据rxNoiselessWaveform = lteFadingChannel(通道、txWaveform);计算噪声增益信噪比= 10 ^ (SNRIn (snrIdx)) / 20);将采样率归一化噪声功率,%,这是OFDM中使用的IFFT大小的函数%调制,和天线数量N0 = 1 /(√(2.0 * ntxants *双(ofdmInfo.Nfft)) *信噪比);%建立情况噪音= N0 *复杂(randn(大小(rxNoiselessWaveform)),...randn(大小(rxNoiselessWaveform)));在接收的时域波形中添加AWGNrx波形= rxnoiseless波形+噪声;%------------------------------------------------------------------%接收%------------------------------------------------------------------定义接收方顶层配置rxConfig = [];rxConfig。SidelinkMode = ueConfig.SidelinkMode;rxConfig。CyclicPrefixSL = ueConfig.CyclicPrefixSL;rxConfig。FirstSubchannelIdx = ueConfig.FirstSubchannelIdx;rxConfig。NSLRB = resourcePool.Config.NSLRB;rxConfig。DuplexMode = resourcePool.Config.DuplexMode; rxConfig.TDDConfig = resourcePool.Config.TDDConfig; rxConfig.PSSCHNSubchannels = resourcePool.Config.numSubchannel_r14; rxConfig.PSSCHSubchannelSize = resourcePool.Config.sizeSubchannel_r14; rxConfig.PSSCHAdjacency = resourcePool.Config.adjacencyPSCCH_PSSCH_r14; rxConfig.PSSCHSubchannelPRBStart = resourcePool.Config.startRB_Subchannel_r14; rxConfig.NSubframePSSCH = subframeNo;设置子帧号%如果配置了SCI BLER测量:sciDecoded = false;如果measureBLERForSCI控制通道的盲解码我们知道当前子帧包含控件和数据,%但不知道位置。检查SCI消息%为所有循环移位的资源池,直到找到它或%表示搜索整个资源池pscchPool = resourcePool.PSCCHResourceBlockPool;重新安排资源到可能的PRB对pscchPool =重塑(pscchPool 2元素个数(pscchPool) / 2);p = 1;p <= size(pscchPool,2) && ~sciDecodedV2X的PSCCH DRS在两个连续的RBs上传输rxConfig。PRBSet= pscchPool(:,p);cs = [0 3 6 9] rxConfig. cs = [0 3 6 9]CyclicShift = c;(frameOffset, corr) = lteSLFrameOffsetPSCCH (rxConfig rxWaveform);执行子帧同步如果(frameOffset > 25) || (frameOffset < 0) frameOffset = lastOffset;结束lastOffset = frameOffset;对接收到的数据进行SC-FDMA解调获取%资源网格rxSubframe = lteSLSCFDMADemodulate (rxConfig rxWaveform (1 + frameOffset:最终,));%执行通道估计如果(perfectChanEstimator) [est,nest] = perfectChannelEstimate(rxConfig,channel,noise,frameOffset);其他的[命令,巢]= lteSLChannelEstimatePSCCH (cec, rxConfig rxSubframe);结束获取当前PRBSet的PSCCH候选者,%提取相应的接收符号和%通道估计和执行均衡pscchCandidate = ltePSCCHIndices (rxConfig);[pscchRx, pscchHest] = lteExtractResources (pscchCandidate rxSubframe,命令);pscchSymbols = lteEqualizeMMSE (pscchRx pscchHest,巢);解调PSCCHcodedsciBits = ltePSCCHDecode (pscchSymbols);获取版本14 V2X SCI消息的有效载荷大小scilengthinfo = lteSCIInfo (rxConfig);解码SCI并恢复消息[rxinfo, rxSCIErr rxcrc] = lteSCIDecode (scilengthinfo.Format1 codedsciBits);如果~rxSCIErr && (rxcrc==expectedNXID) sciMessageRx = lteSCI(rxConfig,rxinfo);rxConfig。NXID= rxcrc; sciDecoded = true;如果(displaySimulationInformation)流(“SCI解码\ n”);结束打破结束结束增加池索引p = p + 1;结束如果~ sciDecoded如果(displaySimulationInformation)流(“SCI解码失败\n”);结束结束计算BLER所需的存储值controlErrors = [controlErrors ~sciDecoded];% #好< AGROW >结束%如果SCI解码失败,并且假定SCI为SL-SCH%解码,设置已解码的SCI消息等于所传输的% SCI消息。同时将NXID设置为期望的值如果(~sciDecoded) && (sciassume) sciMessageRx = sciMessage;rxConfig。NXID= expectedNXID;结束%如果配置了SL-SCH吞吐量测量,如果SCI是%成功解码或假设SCI解码成功,%执行PSSCH接收和SL-SCH解码如果measureTputForSLSCH如果(sciDecoded | | sciAssumed)从已解码的SCI中获取PSSCH资源分配消息和池配置rxConfig。PRBSet= lteSCIResourceAllocation(rxConfig,sciMessageRx);执行子帧同步frameOffset = lteSLFrameOffsetPSSCH (rxConfig rxWaveform);如果(frameOffset > 25) || (frameOffset < 0) frameOffset = lastOffset;结束lastOffset = frameOffset;对接收到的数据进行SC-FDMA解调获取%资源网格rxSubframe = lteSLSCFDMADemodulate (rxConfig rxWaveform (1 + frameOffset:最终,));执行信道估计,提取收到的PSSCH%符号和相应的信道估计,和%进行均衡如果(perfectChanEstimator) [est,nest] = perfectChannelEstimate(rxConfig,channel,noise,frameOffset);其他的[命令,巢]= lteSLChannelEstimatePSSCH (cec, rxConfig rxSubframe);结束[psschRx, psschHest] = lteExtractResources (psschIndices rxSubframe,命令);psschSymbols = lteEqualizeMMSE (psschRx psschHest,巢);解调PSSCH[~, rxConfig。调制)= lteMCS (sciMessageRx。ModCoding,“PUSCH”);如果(strcmpi (rxConfig。调制,64 qamrxConfig))。调制=16 qam的结束codedSlschBits = ltePSSCHDecode (rxConfig psschSymbols);解码的SL-SCH,包括软组合成%接收缓冲区,并检查CRCrxConfig。NTurboDecIts = 5;% Turbo译码器迭代rxConfig。房车= RVSeq (harqProcesses (harqID) .RVIdx);[~, slschCRC harqProcesses (harqID) .decState] =...codedSlschBits lteSLSCHDecode (rxConfig TBS,...harqProcesses (harqID) .decState);slschDecoded = ~ slschCRC;其他的%如果SCI解码失败,SL-SCH解码也失败slschDecoded = false;结束计算吞吐量所需的存储值sharedbitTput = [sharedbitTput TBS*slschDecoded];% #好< AGROW >txedTrBlkSizes = [txedTrBlkSizes TBS];% #好< AGROW >如果(displaySimulationInformation)如果slschDecoded流(“SL-SCH解码\ n”);其他的流(' SL-SCH解码失败\n');结束结束结束为下一次传输更新RV序列索引harqProcesses (harqID)。RVIdx =国防部(harqProcesses harqID .RVIdx,大小(RVSeq, 2)) + 1;结束如果measureBLERForSCI计算SCI BLERsimBLERSCI (snrIdx) = 100 *意味着(controlErrors, 2);在命令窗口中动态显示结果流(' \ nSNR = %。2 f dB。SCI BLER(%%) for %d帧(s) = %4 f % % \ n”...SNRIn (snrIdx)、NFrames simBLERSCI (snrIdx));结束如果measureTputForSLSCH计算最大吞吐量和模拟吞吐量maxThroughputSLSCH (snrIdx) =总和(txedTrBlkSizes);%最大可能吞吐量simThroughputSLSCH (snrIdx) =总和(sharedbitTput);%模拟吞吐量在命令窗口中动态显示结果流(' \ nSNR = %。2 f dB。SL-SCH吞吐量为%d帧(s) = %。4 f Mbps \ n”...SNRIn (snrIdx) NFrames 1 e-6 * simThroughputSLSCH (snrIdx) / (NFrames * 10 e - 3));流('信噪比= %。2 f dB。SL-SCH吞吐量(%%)为%d帧(s) = %。4 f % % \ n”...SNRIn (snrIdx)、NFrames simThroughputSLSCH (snrIdx) * 100 / maxThroughputSLSCH (snrIdx));结束结束
子帧:0。HARQ进程索引:冗余版本:0 SCI解码失败SL-SCH解码失败子帧:4。HARQ进程索引:2。冗余版本:0 SCI解码SL-SCH解码失败子帧:8。HARQ进程索引:冗余版本:2个SCI解码SL-SCH解码失败子帧:12。HARQ进程索引:2。冗余版本:2个SCI解码SL-SCH解码子帧:16个。HARQ进程索引: Redundancy version: 0 SCI decoded SL-SCH decoding failed Subframe: 20. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoding failed Subframe: 24. HARQ process index: 1. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 28. HARQ process index: 2. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 32. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoding failed Subframe: 36. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoding failed SNR = -5.00 dB. SCI BLER(%) for 4 Frame(s) = 10.0000 % SNR = -5.00 dB. SL-SCH Throughput for 4 Frame(s) = 0.2622 Mbps SNR = -5.00 dB. SL-SCH Throughput(%) for 4 Frame(s) = 30.0000 % Subframe: 0. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 4. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 8. HARQ process index: 1. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 12. HARQ process index: 2. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 16. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 20. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 24. HARQ process index: 1. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 28. HARQ process index: 2. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 32. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 36. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded SNR = 0.00 dB. SCI BLER(%) for 4 Frame(s) = 0.0000 % SNR = 0.00 dB. SL-SCH Throughput for 4 Frame(s) = 0.8740 Mbps SNR = 0.00 dB. SL-SCH Throughput(%) for 4 Frame(s) = 100.0000 % Subframe: 0. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 4. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 8. HARQ process index: 1. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 12. HARQ process index: 2. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 16. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 20. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 24. HARQ process index: 1. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 28. HARQ process index: 2. Redundancy version: 2 SCI decoded SL-SCH decoded Subframe: 32. HARQ process index: 1. Redundancy version: 0 SCI decoded SL-SCH decoded Subframe: 36. HARQ process index: 2. Redundancy version: 0 SCI decoded SL-SCH decoded SNR = 5.00 dB. SCI BLER(%) for 4 Frame(s) = 0.0000 % SNR = 5.00 dB. SL-SCH Throughput for 4 Frame(s) = 0.8740 Mbps SNR = 5.00 dB. SL-SCH Throughput(%) for 4 Frame(s) = 100.0000 %

吞吐量结果

仿真结果在每个信噪比点完成后显示在MATLAB®命令窗口中。它们也被捕获在输出数组中simBLERSCIsimThroughputSLSCH而且maxThroughputSLSCH.对于每个模拟的信噪比点,simBLERSCI存储测量的SCI BLER,simThroughputSLSCH将测量的SL-SCH吞吐量以位和的数量存储maxThroughputSLSCH以比特数存储最大可能的SL-SCH吞吐量。

如果measureBLERForSCI% Plot PSCCH/SCI BLERplotResults (“科学”“提单”、通道、SNRIn simBLERSCI);结束如果measureTputForSLSCH绘制PSSCH/SL-SCH吞吐量plotResults (“SL-SCH”的吞吐量、通道、SNRIn simThroughputSLSCH * 100. / maxThroughputSLSCH);结束

为了获得统计上有效的结果,请对更多的帧运行模拟。下图显示了SCI BLER和SL-SCH在实际信道估计的信噪比范围扩大到1000帧时的吞吐量结果。

参考文献

  1. 3GPP TS 36.213《物理层程序》

  2. 3GPP TS 36.101“用户设备(UE)无线电传输和接收”

本地函数

这个例子使用了这些辅助函数。

  • perfectChannelEstimate:完美信道估计

  • plotResults:绘制示例的结果

计算完美信道估计和噪声估计函数[命令,巢]= perfectChannelEstimate (rxConfig、通道、噪音、frameOffset)使用上行链路完美通道估计器进行计算%的侧链估计,因为两者都使用SC-FDMArxConfig。NTxAnts = 1;rxConfig。NULRB = rxConfig.NSLRB;命令= lteULPerfectChannelEstimate (rxConfig、通道frameOffset);noiseGrid = lteSLSCFDMADemodulate(rxConfig,noise(1+frameOffset:end,:));巢= var (noiseGrid (:));结束绘制SCI BLER或SL-SCH吞吐量函数plotResults(chName,simOpt,channel,xvalues,yvalues) fadingDescription = sprintf(' % s % s '、channel.DelayProfile num2str (channel.DopplerFreq));图;情节(xvalues yvalues,* - - - - - -。);v =轴;轴([v(1) v(2) -10 110])'V2X侧链%s %s (%% %) in %s衰落和AWGN', simOpt chName fadingDescription));包含(“信噪比(dB)”);ylabel ([simOpt“(%)”]);网格结束
Baidu
map