主要内容

版本14 V2X侧链PSCCH和PSSCH吞吐量

本示例演示如何使用LTE Toolbox™在频率选择性衰落和加性高斯白噪声(AWGN)中测量物理侧链共享信道(PSSCH)和物理侧链控制信道(PSCCH)的吞吐量性能。

简介

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

  • 低时延,高可靠性要求

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

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

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

本例测量版本14 V2X侧链共享和多个信噪比点的控制通道吞吐量。有关如何建模Release 12侧链设备到设备(D2D)接口(主要旨在允许LTE支持公共安全通信系统)的信息,请参阅金宝app版本14 V2X侧链PSCCH和PSSCH吞吐量的例子。

对于每个信噪比点,在一个子帧一个子帧的基础上,执行以下步骤来计算吞吐量和BLER:

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

  • 该波形通过一个有噪声的衰落信道传递

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

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

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

模拟配置

该示例对于多个信噪比点的模拟长度为4帧执行。大量的NFrames应该用于产生有意义的吞吐量结果。SNRIn可以是值的数组或标量。

设置要模拟的帧数NFrames = 4;设置一个信噪比范围,以覆盖高电平和低电平的BLER操作%的条件SNRIn = [-5 0 5];

传输配置

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

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

传输信道配置

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

通道= struct;通道配置结构通道。种子= 6;%沟道种子通道。NRxAnts = 2;%接收天线个数通道。DelayProfile =“爱娃”%延迟配置文件通道。多普勒频率= 500;%多普勒频率,单位为Hz通道。MIMOCorrelation =“低”%多天线相关性通道。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 = struct;通道估计配置结构cec。PilotAverage =“UserDefined”导频符号平均的类型cec。FreqWindow = 27;%频率窗口大小cec。TimeWindow = 1;%时间窗口大小cec。InterpType =“立方”% 2D插值类型

配置吞吐量度量

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

measureBLERForSCI = true;measureTputForSLSCH = true;

选择SCI解码失败时的接收者行为

逻辑变量sciAssumed根据控制信道解码对共享信道解码的影响控制仿真行为。如果sciAssumed如果为真,则接收方将在尝试共享信道接收时假定SCI消息已正确解码。这允许独立于控制信道接收的性能来测量共享信道接收的性能。如果sciAssumed为false,则控制信道解码失败意味着共享信道解码失败。注意,如果上面禁用了SCI的吞吐量度量(measureBLERForSCI = false),并且启用了SL-SCH的吞吐量测量(measureTputForSLSCH = true),接收方在测量SL-SCH吞吐量时,无论设置的值如何,都会假定SCI消息已正确解码sciAssumed在这里。

sciassume = false;

显示仿真信息

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

displaySimulationInformation = true;

显示V2X侧链通信资源池

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

resourcePool = v2xsidelinkresourceool;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启用Flag。所有HARQ进程都有相同的PSSCH(橙色)和PSCCH(绿色)资源块分配。PSCCH和PSSCH可以在相邻资源块上传输,也可以在非相邻资源块上传输。

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

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

  • 执行PSCCH -的盲检测子帧中发射机所使用的PSCCH资源和循环移位是未知的,因此对PSCCH资源块池中的每个PRB集进行同步、信道估计和解码V2XSidelinkResourcePool。PSCCHResourceBlockPool直到SCI被成功解码或整个资源池被搜索为止。DM-RS相关性与最强峰值的时间偏移用于同步。

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

  • 执行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为true或如果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符号是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 = floor(sfGap/tti);计算每个发送子帧的HARQ ID序列harqProcessSequence = 0 (1,NFrames*10);h = 1:nHARQProcesses harqProcessSequence(1+tti*(h-1):sfGap:NFrames*10) = h;结束使用固定值的参数创建部分SCI消息%用于模拟。其他具有变量值的参数将为%设置在模拟循环中sciMessage = struct(“SCIFormat”“Format1”);sciMessage。TimeGap= sfGap;根据TBS和调制方案设置PSSCH MCS[itbs,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的};根据使用的调制方案过滤有效的传输块大小mayletbs = lteTBS(NPRB,itbs);mayletbs (~strcmpi(modn,ueConfig.Modulation)) = 0;现在根据TBS设置MCS指数sciMessage。ModCoding= find(possibleTBS==TBS,1) - 1;如果需要,可以创建显示资源分配的新图形如果displaySimulationInformation图;结束如果SCI BLER未被测量,则必须设置' sciassume '以使接收者可以假定该SCI的知识如果(~measureBLERForSCI) sciassume = true;结束rng (“默认”);snrIdx = 1:数字(SNRIn)根据循环变量设置随机数生成器种子%,确保独立的随机流rng (snrIdx);初始化所有HARQ缓冲区的状态harqProcess = struct(“RVIdx”,1,“数据”[],“decState”[]);harqProcesses(1:nHARQProcesses) = harqProcess;RVSeq = [0 2];% RV用于初始传输和重传为主循环设置变量lastOffset = 0;初始化整体帧定时偏移量frameOffset = 0;初始化帧定时偏移量sharedbitTput = [];每个子帧成功接收的比特数txedTrBlkSizes = [];%每子帧传输的比特数controlErrors = [];SCI块错误百分比subframeNo = 0:(NFrames*10-1) harqID = harqProcessSequence(subframeNo+1);如果harqID == 0%如果当前没有HARQ进程在传输%子帧,继续到下一个继续结束使用新的传输数据更新当前HARQ流程并重置%接收缓冲区,如果它是初始传输。PSSCH是%以'sfGap'子帧的间隙传输两次%表示第一次传输的成功如果harqProcesses (harqID)。RVIdx == 1 harqProcesses(harqID)。data = randi([0 1], TBS, 1);harqProcesses(harqID).decState = [];结束设置RVueConfig。RV = RVSeq(harqProcesses(harqID).RVIdx);设置子帧号ueConfig。NSubframePSSCH = subframameno;显示运行时信息如果displaySimulationInformation流(“子帧:% d。HARQ进程索引:%d。冗余版本:%d\n', harqID subframeNo ueConfig.RV)结束当前子帧的通道时间通道。InitTime = subframeNo/1000;创建一个空的资源网格slgrid = lteSLResourceGrid(ueConfig);使用起始RB更新传输配置startgrb = rbStart(harqProcesses(harqID).RVIdx);resourcePool.Config。startRB_Subchannel_r14 = startgrb;从分配的子通道数和计算RIV%起始子通道ueConfig。FirstSubchannelIdx = 0;Beta = 0;如果strcmpi (resourcePool.Config.adjacencyPSCCH_PSSCH_r14“上”) beta = 2;结束lsubCH = ceil((NPRB+beta)/resourcePool.Config.sizeSubchannel_r14);sciMessage。RIV= resourcePool.encodeRIV(lsubCH,ueConfig.FirstSubchannelIdx);设置重传索引sciMessage。RetransmissionIdx = harqProcesses(harqID)。RVIdx - 1;创建SCI和消息位sciiconfig = ueConfig;sciConfig。PSSCHNSubchannels = resourcePool.Config.numSubchannel_r14;[sciMessage, sciBits] = lteSCI(sciConfig,sciMessage);执行SCI编码[cw,crc] = lteSCIEncode(sciiconfig, 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(sciiconfig);将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和PSSCHcw = 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调制[tx波形,scfdmaInfo] = lteSLSCFDMAModulate(ueConfig,slgrid,windowing);添加25个样本填充。这是为了覆盖延迟的范围%的预期从通道建模(组合%实现延迟和信道延迟扩展)ntxants = size(tx波形,2);tx波形= [tx波形;ntxants 0(25日)];% #好< AGROW >通过通道模型传递数据rxnoiseless波形= lteFadingChannel(通道,tx波形);计算噪声增益信噪比= 10^(SNRIn(snrIdx))/20);将噪声功率归一化以考虑采样率,%,这是OFDM中使用的IFFT大小的函数%调制,天线数N0 = 1/(根号(2.0*ntxants*double(ofdmInfo.Nfft))*信噪比);创建AWGN噪声= N0*complex(randn(size(rxnoiseless波形)),...randn(大小(rxNoiselessWaveform)));将AWGN添加到接收的时域波形中rx波形= 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, nummel (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 = cs;[frameOffset,corr] = lteSLFrameOffsetPSCCH(rxConfig, rx波形);执行子帧同步如果(frameOffset < 0) frameOffset = lastOffset;结束lastOffset = frameOffset;对接收到的数据进行SC-FDMA解调得到%资源网格rxSubframe = lteSLSCFDMADemodulate(rxConfig, rx波形(1+frameOffset:end,:));执行信道估计如果(perfectChanEstimator) [hest,nest] = perfectChannelEstimate(rxConfig,channel,noise,frameOffset);其他的[hest,nest] = lteSLChannelEstimatePSCCH(rxConfig,cec,rxSubframe);结束%获取当前PRBSet的PSCCH候选,%提取相应的接收符号和%通道估计和执行均衡pscchCandidate = ltePSCCHIndices(rxConfig);[pscchRx,pscchHest] = lteExtractResources(pscchCandidate,rxSubframe,hest);pscchSymbols = lteEqualizeMMSE(pscchRx, pscchest,nest);解调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如果(sciidecoded || sciassume)从已解码的SCI中获取PSSCH资源分配%消息和池配置rxConfig。PRBSet= lteSCIResourceAllocation(rxConfig,sciMessageRx);执行子帧同步frameOffset = lteSLFrameOffsetPSSCH(rxConfig, rx波形);如果(frameOffset < 0) frameOffset = lastOffset;结束lastOffset = frameOffset;对接收到的数据进行SC-FDMA解调得到%资源网格rxSubframe = lteSLSCFDMADemodulate(rxConfig, rx波形(1+frameOffset:end,:));进行信道估计,提取接收到的PSSCH%符号和相应的信道估计,和%执行均衡如果(perfectChanEstimator) [hest,nest] = perfectChannelEstimate(rxConfig,channel,noise,frameOffset);其他的[hest,nest] = lteSLChannelEstimatePSSCH(rxConfig,cec,rxSubframe);结束[psschRx,psschHest] = lteExtractResources(psschIndices,rxSubframe,hest);psschSymbols = lteEqualizeMMSE(psschRx, psschest,nest);解调PSSCH[~, rxConfig。调制]= lteMCS(sciMessageRx。ModCoding,“PUSCH”);如果(strcmpi (rxConfig。调制,64 qamrxConfig))。调制=16 qam的结束codedSlschBits = ltePSSCHDecode(rxConfig,psschSymbols);解码的SL-SCH,包括软组合成%接收缓冲区,并检查CRCrxConfig。NTurboDecIts = 5;% Turbo解码器迭代rxConfig。RV = 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* slschdecoding];% #好< AGROW >txedTrBlkSizes = [txedTrBlkSizes TBS];% #好< AGROW >如果(displaySimulationInformation)如果slschDecoded流(' SL-SCH解码\n');其他的流(' SL-SCH解码失败\n');结束结束结束为下一次传输更新RV序列索引harqProcesses (harqID)。RVIdx = mod(harqProcesses(harqID).RVIdx,size(RVSeq,2))+1;结束如果measureBLERForSCI计算SCI BLERsimBLERSCI(snrIdx) = 100*mean(controlErrors,2);在命令窗口中动态显示结果流('\nSNR = %。2 f dB。SCI BLER(%%) for %d帧(s) = %。4 f % % \ n”...SNRIn (snrIdx)、NFrames simBLERSCI (snrIdx));结束如果measureTputForSLSCH计算最大吞吐量和模拟吞吐量maxThroughputSLSCH(snrIdx) = sum(txedTrBlkSizes);最大可能吞吐量simThroughputSLSCH(snrIdx) = sum(sharedbitTput);%模拟吞吐量在命令窗口中动态显示结果流('\nSNR = %。2 f dB。SL-SCH %d帧的吞吐量= %。4 f Mbps \ n”...SNRIn (snrIdx) NFrames 1 e-6 * simThroughputSLSCH (snrIdx) / (NFrames * 10 e - 3));流(' snr = %。2 f dB。SL-SCH吞吐量(%%)对于%d帧(s) = %。4 f % % \ n”...SNRIn (snrIdx)、NFrames simThroughputSLSCH (snrIdx) * 100 / maxThroughputSLSCH (snrIdx));结束结束
子帧:0。HARQ过程索引:1.;冗余版本:0 SCI解码失败SL-SCH解码失败Subframe: 4。HARQ过程指标:2。冗余版本:0 SCI解码SL-SCH解码失败子帧:8。HARQ过程索引:1.;冗余版本:2 SCI解码SL-SCH解码失败子帧:12。HARQ过程指标:2。冗余版本:SCI译码SL-SCH译码子帧:16。HARQ过程索引:1.; 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)无线电发射和接收》

本地函数

本例使用这些helper函数。

  • perfectChannelEstimate:完全信道估计

  • plotResults:将示例的结果绘制成图

计算完美信道估计和噪声估计函数[hest,nest] = perfectChannelEstimate(rxConfig,channel,noise,frameOffset)使用上行链路完美信道估计器进行计算%由于两者都使用SC-FDMA,因此侧链估计rxConfig。NTxAnts = 1;rxConfig。NULRB = rxConfig.NSLRB;hest = lteULPerfectChannelEstimate(rxConfig,channel,frameOffset);noiseGrid = lteSLSCFDMADemodulate(rxConfig,noise(1+frameOffset:end,:));nest = 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(%%)在%s衰落和AWGN', simOpt chName fadingDescription));包含(“信噪比(dB)”);ylabel ([simOpt“(%)”]);网格结束