主要内容

NR Cell Search and MIB and SIB1 Recovery

这个示例演示如何使用5G工具箱™同步、解调和解码实时的gNodeB信号。本示例对主信息块(MIB)和第一个系统信息块(SIB1)进行解码。解码MIB和SIB1需要一个综合的接收器,能够解调和解码大部分下行信道和信号。

介绍

用户设备(UE)在与网络通信之前,必须执行小区搜索和小区选择程序,获取初始系统信息。该过程的第一步是获取帧同步,找出单元身份和解码MIB和SIB1。本示例演示如何使用5G工具箱执行这些步骤。

您可以使用这个示例使用捕获的I/Q采样波形或生成包含同步信号(SS)突发和SIB1的本地波形nrWaveformGenerator.对于本地生成的波形,示例执行以下步骤:

  • 波形的一代:利用5G工具箱的下行波形发生器,配置并生成携带MIB、CORESET 0、PDCCH和携带SIB1的PDSCH的同步信号突发。发射机可以提高一个SS块的信噪比,但不进行波束形成。有关单边带波束形成的更多信息,请参见NR SSB波束扫描

  • 情况下:应用加性高斯白噪声(AWGN)的波形。

  • 接收机:对接收到的波形进行各种同步解调处理,建立系统帧号、小区标识和SSB,并对MIB进行解码。这些提供了在PDCCH中对下行控制信息(DCI)进行盲译码所需的信息。接收机使用DCI配置PDSCH解调器,解码DL-SCH,最终恢复SIB1。

这些数字显示了接收器内部的处理步骤。

接收器的配置

为了同步和解调接收到的波形,需要以下信息:

  • 用于解调接收波形的波形采样率。

  • 用于对接收波形进行符号相位补偿的载波中心频率。

  • 决定CORESET 0频率资源的最小信道带宽。表5.3.5-1 [1]表示每个NR带宽的通道带宽。

  • SS块模式(案例A ... e)以确定SS / PBCH块的子载波间隔。UE根据NR操作带搜索SS块模式。有关更多信息,请参阅TS 38.104表5.4.3.3-1和5.4.3.3-2 [2]。

  • 突发事件中SS/PBCH块的数量($L_{max}$)来计算PBCH DM-RS序列的参数和PBCH解卷积。这些参数依赖于SS/PBCH块索引,如TS 38.211第7.3.3.1节和7.4.1.4.1节所述[3.]。TS 38.213第4.1节[5.]描述了在每个突发情况下的SS/PBCH块的集合。UE知道的价值$L_{max}$基于SS区块模式和NR操作波段。

loadfromfile = 0;%设置为1以加载捕获的波形如果loadFromFile负载捕获波形rx =负载('捕获WaveFormsib1.mat');rxWaveform = rx.waveform;%配置接收器采样率(样本/秒)rxSampleRate = rx.sampleRate;%符号相位补偿频率。指定运营商中心%频率或设置为0禁用符号相位补偿fPhaseComp = rx.fPhaseComp;%载波中心频率(Hz)%设置NR带宽所需的最小通道带宽为% configure CORESET 0 in FR1(参见TS 38.101-1表5.3.5-1)minChannelBW=rx.minChannelBW;%5、10、40兆赫%在接收端配置必要的突发参数。单边带模式%可以是“案例a”,'case b',fr1的'case c'或'case d','case e'%fr2。fr1和64的最大块L_max的数量可以是4或8FR2 %。refburst.blockpattern = rx.ssbblockpattern;refburst.l_max = rx.l_max;其他的%生成包含SS突发和SIB1的波形%配置单元标识配置=结构();配置。NCellID = 102;%配置SS突发config.blockpattern =.“案例B”% FR1: 'Case A','Case B','Case C'。FR2:“情况D”,“情况E”配置。TransmittedBlocks = 1 (1,8);%传输SS块的位图配置。SubcarrierSpacingCommon = 15;% SIB1子载波间距,kHz(15或30为FR1。FR2为60或120)config.enablesb1=1;%设置为0以禁用SIB1%设置NR带宽所需的最小通道带宽为% configure CORESET0 in FR1(参见TS 38.101-1表5.3.5-1)配置。MinChannelBW = 5;%5、10、40兆赫%配置并生成一个包含SS突发和SIB1的波形wavegenConfig = hSIB1WaveformConfiguration(配置);[txWaveform, waveInfo] = nrWaveformGenerator (wavegenConfig);txOfdmInfo = waveInfo.ResourceGrids(1)信息;通过提高单边带的信噪比来引入波束形成增益%相关SIB1 PDCCH和PDSCHssbIdx = 0;要提升SSB的索引(基于0)Boost = 6;%信噪比增加分贝txWaveform = hSIB1Boost (txWaveform wavegenConfig、waveInfo ssbIdx,提高);%在波形中加入白色高斯噪声rng (“默认”);重置随机数生成器SNRdB = 20;AWGN的%信噪比rxWaveform = awgn (txWaveform SNRdB-boost -10 * log10(双(txOfdmInfo.Nfft)));%配置接收机%采样率rxSampleRate = txOfdmInfo.SampleRate;%符号相位补偿频率(Hz)。这个函数% nrWaveformGenerator不适用符号相位补偿%生成的波形。fPhaseComp = 0;%载波中心频率(Hz)%最小信道带宽(MHz)minChannelBW = config.MinChannelBW;%在接收端配置必要的突发参数refBurst。BlockPattern = config.BlockPattern;refBurst。L_max =元素个数(config.TransmittedBlocks);结束%从配置的突发和接收机参数中获取OFDM信息nrbSSB=20;scsSSB=HSSburstSubcarriersSpacing(参考突发.块模式);rxOfdmInfo=nrOFDMInfo(nrbSSB,scsSSB,“采样器”, rxSampleRate);%显示接收波形的声谱图图;nfft = rxofdminfo.nfft;频谱图(RxWaveForm(:,1),那些(NFFT,1),0,NFFT,“居中”rxSampleRate,“桠溪”“MinThreshold”, -130);标题(“接收波形的谱图”

PSS搜索和频率偏差校正

接收机按照以下步骤进行PSS搜索和粗频偏估计:

  • 频率偏移:接收到的波形带有一个候选频率偏移。候选偏移距间隔为半副载波。使用searchBW控制频率偏移搜索带宽。

  • 将频移的接收波形与三个可能的PSS序列(NID2)中的每一个相关联,并提取最强的相关峰。参考PSS序列以频率为中心。因此,最强的相关峰提供了关于载波中心频率的粗频率偏移量。峰值还表明在接收波形中检测到了三个PSS (NID2)中的哪一个,以及最佳信道条件的时间瞬间。

  • 通过将单边带中每个OFDM符号的循环前缀与OFDM符号的相应有用部分相关联,估计半子载波以下的频率偏移量。这种相关性的相位与波形中的频率偏移成正比。

disp (——频率校正和时序估计——%指定频率偏移搜索带宽,单位为kHzsearchbw = 6 * scsssb;[rxwaveform,freqoffset,nid2] =批胜福克斯(rxwaveform,refburst.blockpattern,rxsamplervere,searchbw);DISP([“频率偏移:”num2str (freqOffset“% .0f”“赫兹”])
—频率校正和定时估计—频率偏移:65hz

时间同步与OFDM解调

接收机利用频率搜索过程中检测到的参考PSS序列估计到最强SS块的时间偏移。频率偏移校正后,接收机可以假设参考PSS的中心频率与接收波形对齐。最后,接收机OFDM对同步波形进行解调,并提取SS块。

%使用检测到的PSS创建用于定时估计的参考网格。PSS.%放置在参考网格的第二个OFDM符号中,以避免%第一个OFDM符号的特殊CP长度。refGrid = 0 ([nrbSSB*12 2]); / /refGrid (nrPSSIndices 2) = nrPSS (NID2);%用于正确CP长度的第二个OFDM符号%时序估计。这是之前到OFDM符号的时序偏移%检测到的SSB由于参考网格的内容nSlot = 0;timingOffset = nrTimingEstimate (rxWaveform nrbSSB、scsSSB nSlot, refGrid,“采样器”, rxSampleRate);%同步、OFDM解调和最强SS块的提取rxGrid=nrofdmdemodomulate(rx波形(1+定时偏移:结束,:),nrbSSB,scsSSB,nSlot,“采样器”, rxSampleRate);2:5, rxGrid = rxGrid (::);%显示样品中的定时偏差。当符号长度被测量时%在FFT样本中,缩放符号长度以考虑接收机%采样率。srRatio=rxSampleRate/(scsSSB*1e3*rxOfdmInfo.Nfft);firstSymbolLength=rxOfdmInfo.SymbolLength(1)*srRatio;str=sprintf('到同步块的时间偏移量:%%.0f个样本(%%.0ff毫秒)\n',地板(LOG10(RXSAMPLERGE)) -  3);fprintf(str,timingoffset + firstsymbollength,(timingoffset + firstsymbollength)/ rxsamplerge * 1e3);
同步块的时间偏移:2200个采样(0.1432毫秒)

SSS搜索

接收器从接收的网格中提取与SSS相关联的资源元素,并将它们与本地生成的每个可能的SSS序列相关联。结合最强PSS和SSS序列的指标,给出了PBCH DM-RS和PBCH处理所需要的物理层细胞同一性。

%从SS/PBCH块中提取接收到的SSS符号sssIndices=nrSSSIndices;sssRx=nrExtractResources(sssIndices,rxGrid);%关联接收到的SSS符号与每个可能的SSS序列sssEst=零(1336);nid1 = 0:335 ncellid =(3 * nid1)+ nid2;sssref = nrsss(ncellid);SSSEST(NID1 + 1)= SUM(ABS(平均值(SSSRX。*结合(SSSREF),1))。^ 2);结束%绘制SSS相关图图:阀杆(0:335,sssEst,“o”);标题(“SSS相关性(频域)”);Xlabel('$ n_ {id} ^ {(1)} $'“翻译”“乳胶”);ylabel (“级”);轴([-1 336 0 max(sssEst)*1.1]);%通过寻找最强的相关性来确定NID1NID1 = find(sssEst==max(sssEst)) - 1;%绘图选择NID1持有;情节(NID1马克斯(ss),“kx”“线宽”2,“MarkerSize”,8);图例([“相关性”" $ N_ {ID} ^ {(1)} $ = "+ num2str (NID1)),“翻译”“乳胶”);%从估计的NID1和NID2形成总体细胞标识ncellid = (3*NID1 + NID2);DISP(['细胞同一性'num2str (ncellid)))
手机号码:102

PBCH DM-RS搜索

在类似于SSS搜索的过程中,接收机构造每个可能的PBCH DM-RS序列,并进行信道和噪声估计。最佳信噪比的PBCH DM-RS的索引决定了PBCH置乱初始化所需的SS/PBCH块索引的lbs。

%计算PBCH DM-RS指数dmrsIndices = nrPBCHDMRSIndices (ncellid);%使用DM-RS符号对每个可能的DM-RS进行信道估计%序列,估计信噪比dmrsEst = 0 (1,8);ibar_ssb = 0:7 refrogrid =零([240 4]);refGrid (dmrsIndices) = nrPBCHDMRS (ncellid ibar_SSB);[hest,nest] = nrchannelestimate(rxgrid,crefgrid,“AveragingWindow”[0, 1]);dmrsEst (ibar_SSB + 1) = 10 * log10(平均(abs(命令(:)。^ 2))/巢);结束%绘制PBCH DM-RS SNR图;茎(0:7 dmrsEst,“o”);标题(“PBCH DM-RS信噪比估计”);Xlabel(“$\overline{i}{SSB}$”“翻译”“乳胶”);xticks (0:7);ylabel (“估计信噪比(dB)”);轴([-1 8 min(dmrsEst)-1 max(dmrsEst)+1]);%记录ibar_SSB的最高信噪比ibar_SSB = find(dmrsEst==max(dmrsEst)) - 1;%绘图选择ibar_SSB持有;plot(ibar_ssb,max(dmrsest),“kx”“线宽”2,“MarkerSize”,8);图例([“snrs”“$\overline{i}{SSB}$=”+ num2str (ibar_SSB)),“翻译”“乳胶”);

基于PBCH DM-RS和SSS的信道估计

接收机使用前面步骤检测到的SSS和PBCH DM-RS估计整个SS/PBCH块的信道。对PBCH DM-RS / SSS的加性噪声进行了估计。

refGrid = 0 ([nrbSSB*12 4]);refGrid (dmrsIndices) = nrPBCHDMRS (ncellid ibar_SSB);refGrid (sssIndices) = nrSSS (ncellid);[命令,鸟巢,hestInfo] = nrChannelEstimate (rxGrid refGrid,“AveragingWindow”[0, 1]);

PBCH解调

接收方使用单元标识从接收的网格中确定并提取与PBCH关联的资源元素。此外,接收机使用信道和噪声估计来执行MMSE均衡。然后对均衡的PBCH符号进行解调和解编,以给出编码的BCH块的比特估计。

disp (' -  PBCH解调和BCH解码 - '%从SS/PBCH块提取接收到的PBCH符号[pbchIndices, pbchIndicesInfo] = nrPBCHIndices (ncellid);pbchRx = nrExtractResources (pbchIndices rxGrid);%根据TS 38.211第7.3.3.1节为PBCH加扰配置“v”% 'v'也是L_max=4的SS/PBCH块索引的2个lbs,或3L_max=8或64的% lbs。如果refBurst。L_max == 4 v = mod(ibar_SSB,4); / /输出其他的v = ibar_ssb;结束ssbIndex = v;%PBCH均衡与CSI计算pbchHest = nrExtractResources (pbchIndices、命令);[pbchEq, csi] = nrEqualizeMMSE (pbchRx pbchHest,巢);Qm = pbchIndicesInfo。G / pbchIndicesInfo.Gd;csi = repmat (csi。”、Qm 1);csi =重塑(csi, [], 1);%均衡化后收到PBCH星座图图形地块(pbchEq,“o”);Xlabel(“同步”);ylabel (“交”)标题(“均衡PBCH星座”);m = max(abs([真实(pbcheq(:)); impt(pbcheq(:))]))* 1.1;轴([ -  m m-m]);%PBCH解调pbchBits = nrPBCHDecode (pbchEq ncellid, v,巢);计算RMS PBCH EVMpbchRef = nrPBCH (pbchBits < 0 ncellid v);维生素与= comm.EVM;pbchEVMrms =维生素(pbchRef pbchEq);显示计算的EVMDISP([' PBCH RMS evm 'num2str(pbchevmrms,' % 0.3 f ''%']);
-  PBCH解调和BCH解码 -  PBCH RMS EVM:8.687%

BCH译码

接收权BCH比特用来自MMSE均衡器的信道状态信息(CSI)估计并解码BCH。BCH译码包括速率恢复、极性译码、CRC译码、解码和将24个BCH传输块位与8个额外的与时间相关的有效载荷位分离。

%应用CSIpbchBits = pbchBits .* csi;%执行BCH解码,包括速率恢复、极性解码和CRC%BCH传输块的PBCH解扰和分离%还执行8个额外有效负载位A…A+7的位“trblk”:%…A+3:系统帧号的4个lbs% A+4:半帧数% + 5…A+7:对于L_max=64, SS/PBCH块索引的3 msb%为L_max=4或8,A+5为子载波偏移k_SSB的MSBpolarListLength = 8;[~, crcBCH trblk、sfn4lsb nHalfFrame, msbidxoffset] =...nrBCHDecode (pbchBits polarListLength、refBurst.L_max ncellid);%显示BCH CRCDISP([' BCH crc: 'num2str (crcBCH)]);%如果收到带有错误的BCH,请停止处理MIB和SIB1如果crcBCH disp (“BCH CRC不是零。”);返回结束%使用'msbidxoffset'值设置'k_SSB'或'ssbIndex'的位,具体取决于%关于突发中SS/PBCH块的数目如果(refBurst.L_max==64) ssbIndex = ssbIndex + (bit2int(msbidxoffset,3) * 8);k_SSB = 0;其他的k_SSB = msbidxoffset * 16;结束%显示SSB索引DISP([' SSB index: 'num2str (ssbIndex)]);
BCH CRC:0 SSB索引:0

MIB和BCH解析

该示例将24个解码的BCH传输块位解析为MIB消息并创建initialSystemInfo具有初始系统信息的结构。这个过程包括重构10位系统帧数(SFN)。NFrame从MIB中的6个msb和PBCH有效载荷位中的4个lsb中获取。它还包括合并副载波偏移的MSBk_SSB在每次突发L_max=4或8个SS/PBCH块的情况下,从PBCH有效负载位。

%将最后23位解码后的BCH传输块解析为MIB消息。BCH传输块'trblk'是RRC消息BCH- BCH- message,%,前导0位,前导23位,与MIB对应。的%前导位表示消息类型(MIB或空序列)。mib = frombits(mib,trblk(2:结束));%不解析前导位%创建由解码的第7位发出的子载波间隔集合% MIB, FR1 (L_max=4或8)和FR2 (L_max=64)的集合不同如果(refburst.l_max == 64)commonscss = [60 120];其他的commonSCSs = [15 30];结束initialSystemInfo =结构();initialSystemInfo。NFrame = mib。systemFrameNumber * 2 ^ 4 + bit2int (sfn4lsb 4);initialSystemInfo。SubcarrierSpacingCommon = commonSCSs (mib。subCarrierSpacingCommon + 1);initialSystemInfo。k_SSB= k_SSB + mib.ssb_SubcarrierOffset; initialSystemInfo.DMRSTypeAPosition = 2 + mib.dmrs_TypeA_Position; initialSystemInfo.PDCCHConfigSIB1 = info(mib.pdcch_ConfigSIB1); initialSystemInfo.CellBarred = mib.cellBarred; initialSystemInfo.IntraFreqReselection = mib.intraFreqReselection;%显示MIB结构disp (的BCH / MIB的内容:) disp (initialSystemInfo);%检查是否存在用于Type0-PDCCH的Coreset常见的搜索空间(CSS),%根据TS 38.213节4.1如果〜Iscoreset0present(refburst.blockpattern,initialsysteminfo.k_ssb)fprintf('CORESET 0 is not present (k_SSB > k_SSB_max).\n');返回结束
BCH/MIB内容:NFrame:0子载波PackingCommon:15 k_SSB:0 DMRSTypeAPosition:3 PDCCHConfigSIB1:[1x1结构]单元禁用:0频率内重新选择:0

OFDM解调满带宽

一旦MIB恢复正常,接收端使用公共子载波间距和支持CORESET 0的带宽对包含检测到SS块的帧进行OFDM解调。金宝app接收机通过从检测到的单边带位置的偏移量和TS 38.213节13中规定的带宽来确定通用数字学中的CORESET 0频率资源[表13-1到13-10]。5.]。频率校正过程使OFDM资源网格的中心与SS突发的中心频率对齐。但是,这些中心不一定与CORESET 0的中心频率对齐。该图显示了SSB、CORESET 0频率资源和相关的PDCCH监控场合之间的关系。

与SS突发不同,控制和数据通道必须在频率上与它们的公共资源块(CRB)光栅对齐。KSSB的值表示SSB与该CRB光栅的频率偏移。当频率校正过程将单边带集中在频率上时,应用由k_SSB在OFDM解调之前,将数据和控制信道与它们的CRB对齐

如果(refBurst.L_max==64) scsKSSB = initialSystemInfo.SubcarrierSpacingCommon;其他的scsKSSB = 15;结束k_ssb = initialsysteminfo.k_ssb;kfreqshift = k_ssb * scskssb * 1e3;rxwaveform = rxwaveform。* exp(1i * 2 * pi * kfreqshift *(0:长度(rxwaveform)-1)'/ rxsamplerge);调整定时偏移到帧原点frameOffset = hTimingOffsetToFrame (refBurst timingOffset、ssbIndex rxSampleRate);%如果帧偏移为负,则感兴趣的帧不完整。添加%前导零到波形,以使波形与帧对齐如果frameOffset < 0 rxWaveform = [0 (-frameOffset,size(rxWaveform,2));rxWaveform];其他的rxWaveform = rxWaveform (1 + frameOffset:最终,);结束%使用CORESET 0带宽确定OFDM解调带宽cset0Idx=initialSystemInfo.PDCCHConfigSIB1.controlResourceSetZero;SCSCCommon=initialSystemInfo.SubcarrierSpacingCommon;scsPair=[scsSSB SCSCSCCommon];[csetNRB,~,csetFreqOffset]=hCORESET0Resources(cset0Idx,scsPair,minChannelBW,k_SSB);%接收波形中包含CORESET 0的RB最小带宽。c0 = csetFreqOffset + 10 * scsSSB / scsCommon;% CORESET载波中心的频率偏移nrb = 2 *马克斯(c0, csetNRB-c0);覆盖coreset 0的rb的%最小数量0如果rxSampleRate < nrb*12*scsCommon*1e3显示(['SIB1恢复无法继续。CORESET 0资源超出'...“配置的采样率的接收波形的频率限制。”]);返回结束OFDM解调共子载波间距接收波形的百分比nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,nrb, scsCommon, nSlot,...“采样器”rxSampleRate,“载波频率”, fPhaseComp);%显示OFDM资源网格,并突出最强SS块图;显示亮度图像(abs (rxGrid (:,: 1)));轴xyXlabel(OFDM符号的);ylabel (副载波的);numFrames=floor(长度(rxWaveform)/rxSampleRate/10e-3);sfns=sprintf(“(%d..%d)”, initialSystemInfo。NFrame那initialSystemInfo。NFrame+numFrames-1); title([收到资源网格。系统框架号:'sfn));highlightSSBlock (refBurst、ssbIndex nrb、scsPair kFreqShift)

PDCCH解调和下行控制信息解码

为了在CORESET/SS中盲目搜索系统信息DCI消息,接收器执行以下步骤:

  • 确定PDCCH监控时机并提取包含控制信息的OFDM资源网格。

  • 配置CORESET 0, Search spaces和PDCCH。

  • 盲搜索格式1\u 0 DCI消息。

接收机通过一个槽和OFDM符号从检测到的SS块位置偏移来确定PDCCH监控场合,如TS 38.213表13-11和13-12所述[5.]。

[csetNRB, csetDuration csetOffset csetPattern] = hCORESET0Resources (cset0Idx, scsPair, minChannelBW k_SSB);ssIdx = initialSystemInfo.PDCCHConfigSIB1.searchSpaceZero;[ssSlot, ssFirstSym isOccasion] = hPDCCH0MonitoringOccasions (ssIdx、ssbIndex scsPair, csetPattern, csetDuration, initialSystemInfo.NFrame);% pcch监控场合关联到不同的SS块可以在%不同的帧。如果在这个框架中没有监控场合,下一个肯定有一个。slotsPerFrame = 10 * scsCommon / 15;如果~isOccasion [ssSlot,ssFirstSym,isOccasion] = hpdcch0monitoringoccations (ssIdx,ssbIndex,scsPair,csetPattern,csetDuration,initialSystemInfo.NFrame+1);ssSlot = ssSlot + slotsPerFrame;结束%对于FR1, UE连续2次监控Type0-PDCCH CSS中的PDCCHCORESET模式1的%槽如果csetPattern == 1 monSlotsPerPeriod = 2;其他的monSlotsPerPeriod = 1;结束%计算子载波和OFDM符号的基于1的下标%插槽包含与检测到的SS块相关联的PDCCH0%和随后的2帧块csetSubcarriers = 12*(nrb-20*scsSSB/scsCommon)/2 - csetOffset*12 + (1:csetNRB*12);numRxSym =大小(rxGrid, 2);symbolsPerSlot = 14;numRxSlots =装天花板(numRxSym / symbolsPerSlot);monSlots = ssSlot + (0:monSlotsPerPeriod-1)' + (0:2*slotsPerFrame:(numRxSlots-ssSlot-1));monSlots = monSlots(:)”;monSymbols = monSlots*symbolsPerSlot + (1:symbolsPerSlot)';monSymbols = monSymbols(:)”;%移除超出波形限制的监控符号monSymbols(monSymbols > numRxSym) = [];%检查搜索空间是否超出波形末端如果isempty (monSymbols) disp (搜索空间槽超出了波形末端);返回结束%从接收的网格中提取包含最强PDCCH的槽rxMonSlotGrid = rxGrid (csetSubcarriers、monSymbols:);

配置CORESET、搜索空间等PDCCH参数。CORESET资源和搜索空间根据TS 38.213 Section 13表13-1到13-15配置[5.]。CCE-to-REG交错映射参数(REGBundleSize = 6, InterleaverSize = 2, ShiftIndex = NCellID)在TS 38.211章节7.3.2.2中描述[3.]。对于CORESET 0, BWP是CORESET的大小,如TS 38.212第7.3.1.0节所述[4.]。PDCCH置乱参数为nRNTI = 0和nID = NCellID,如TS 38.211章节7.3.2.3所述[3.]。

pdcch = hPDCCH0Configuration (ssbIndex initialSystemInfo、scsPair ncellid, minChannelBW);%配置载波跨BWP (CORESET 0)c0Carrier=nrcharrierConfig;c0Carrier.SubcarrierSpacing=initialSystemInfo.SubcarrierSpacingCommon;c0Carrier.NStartGrid=pdcch.NStartBWP;c0Carrier.NSizeGrid=pdcch.NSizeBWP;c0Carrier.NSlot=pdcch.SearchSpace.slotperiod和offset(2);c0Carrier.NFrame=initialSystemInfo.NFrame;c0Carrier.NCellID=NCellID;

搜索DCI消息。UE盲目地通过监视每个聚合级别的所有PDCCH候选使用Si-RNTI来解码接收的PDCCH符号,以识别正确的候选(或实例)。

%指定用SI-RNTI加密的格式1_0的DCI消息(TS 38.212%第7.3.1.2.1节)dci = DCIFormat1_0_SIRNTI (pdcch.NSizeBWP);disp ('——PDCCH中的下行控制信息消息搜索——');siRNTI = 65535;表7.1-1dciCRC = true;mSlot = 0;%循环所有监控槽位(mslot 如果monslotsperperiod == 2如果mod(mSlot,2)pdcch.SearchSpace.SlotPeriodAndOffset(2)=monslot(2);其他的pdcch.SearchSpace.SlotPeriodAndOffset (2) = monSlots (1);结束结束%根据TS 38.213节10.1获得PDCCH考生[pdcchInd,pdcchmrssym,pdcchmrssind]=nrpcchspace(c0Carrier,pdcch);rxSlotGrid=rxMonSlotGrid(:,(1:symbolsPerSlot)+symbolsPerSlot*mSlot,:);rxSlotGrid=rxSlotGrid/max(abs(rxSlotGrid(:);所接收RE量级的正规化%在所有支持的聚合级别上循环金宝appaLev = 1;(alv <= 5) && dciCRC ~= 0%在SS的每个聚合级别上循环遍历所有候选对象cIdx=1;numCandidatesAL=pdcch.SearchSpace.NumCandidates(aLev);(cIdx <= numCandidatesAL) && dciCRC ~= 0使用PDCCH DM-RS的信道估计[命令,据nVar pdcchHestInfo] = nrChannelEstimate (rxSlotGrid, pdcchDmrsInd {aLev} (:, cIdx) pdcchDmrsSym {aLev} (:, cIdx));PDCCH符号的均衡和解调[pdcchrxsym,pdcchhest] = nrextractresources(pdcchind {alev}(:, cidx),rxslotgrid,hest);pdccheqsym = nrequalizemse(pdcchrxsym,pdcchhest,nvar);dcicw = nrpdcchdecode(pdccheqsym,pdcch.dmrssclambledid,pdcch.rnti,nvar);%DCI消息解码polarListLength = 8;[dcibits, dciCRC] = nrDCIDecode (dcicw、dci.Width polarListLength, siRNTI);如果dciCRC == 0 (['解码PDCCH候选#'num2str (cIdx)'在聚合级别'num2str (2 ^ (aLev-1))))结束CIDX = CIDX + 1;结束aLev = aLev + 1;结束mSlot = mSlot + 1;结束cIdx = cIdx-1;aLev = aLev-1;mSlot = mSlot-1;monSymbols = monSymbols(mSlot*symbolsPerSlot + (1:symbolsPerSlot));计算RMS PDCCH EVMpdcchRef = nrPDCCH(双(dcicw < 0)、pdcch.DMRSScramblingID pdcch.RNTI);维生素与= comm.EVM;pdcchEVMrms =维生素(pdcchRef pdcchEqSym);显示计算的EVMDISP([' PDCCH RMS evm 'num2str (pdcchEVMrms' % 0.3 f ''%']); disp([“PDCCH CRC:”num2str(dcicrc)]);%突出CORESET 0/SS对应最强SSBbounding_box = @ (y, x, h, w)矩形(“位置”,[x+0.5y-0.5w-h],“EdgeColor”'r');bounding_box (csetSubcarriers (1) monSymbols (1) + ssFirstSym-1 csetNRB * 12, csetDuration);str = sprintf('coreset 0 / ss');文本(monSymbols (1) + ssFirstSym-7 csetSubcarriers(1) -20年,0,str,“字形大小”10“颜色”' w '如果DCICRC DISP('DCI解码失败。');返回结束%均衡化后收到PDCCH星座图图;绘图(PDCCHEQSYM,“o”);Xlabel(“同步”);ylabel (“交”)标题(“均衡PDCCH星座”);m = max(abs([real(pdccheqsym(:)); imag(pdccheqsym(:))]))* 1.1;轴([ -  m m-m]);%显示包含最强PDCCH槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xyXlabel(OFDM符号的);ylabel (副载波的);标题(“含有最强PDCCH的槽”);%在资源网格中突出PDCCHsubsPdcch = nrPDCCHSpace (c0Carrier pdcch,“IndexStyle”“潜艇”);subspdcch = double(subspdcch {alev}(:,:,cidx));x = min(亚副本(:,2)) -  1;x = max(subspdcch(:,2)) -  x;y = min(亚副本(:,1));y = max(亚峰值(:,1)) -  y + 1;绑定_box(y,x,y,x);str = sprintf('pdcch \ n聚合级别:%d \ n候选人:%d'2 . ^ (aLev-1), cIdx-1);文本(x + x + 1, y + y / 2, 0, str,“字形大小”10“颜色”' w '
——PDCCH下行控制信息消息搜索——聚合级别8时已解码的PDCCH候选#1 PDCCH RMS EVM: 10.759% PDCCH CRC: 0

PDSCH的解调、DL-SCH的解码和SIB1的提取

为了恢复第一个系统信息块,接收端执行以下步骤:

  • 使用单元ID、BCH信息和DCI确定PDSCH配置

  • PDSCH符号的信道估计、均衡与解调

  • DL-SCH解码和SIB1提取

disp (——PDSCH解调和DL-SCH解码——%构建DCI消息结构dci = fromBits (dci dcibits);%从cell ID、BCH信息和DCI获取PDSCH配置[pdsch, K_0] = hSIB1PDSCHConfiguration (dci、pdcch.NSizeBWP initialSystemInfo.DMRSTypeAPosition, csetPattern);%对于CORESET模式2,gNodeB可以在下一个插槽中分配PDSCH,%,由DCI信号的槽位偏移K_0表示。更多的表5.1.2.1.1-4。c0Carrier。NSlot = c0Carrier.NSlot + K_0;symbolOffset = symbolsPerSlot * (mSlot + K_0);monSymbols = monSymbols + symbolOffset;rxSlotGrid = rxGrid (csetSubcarriers、monSymbols:);rxSlotGrid = rxSlotGrid / max (abs (rxSlotGrid (:)));所接收RE量级的正规化如果K_0 > 0显示包含相关PDSCH的槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xyXlabel(OFDM符号的);ylabel (副载波的);标题('Slot contains PDSCH (Slot Offset K_0 = 1)');结束% PDSCH信道估计和均衡使用PDSCH DM-RSpdschdmrsindices = nrpdschdmrsindices(c0carrier,pdsch);PDSCHDMRSSYMBOLS = NRPDSCHDMRS(C0CARRIER,PDSCH);
——PDSCH解调和DL-SCH解码——

为了补偿符号相位补偿和信道估计中载波频率不匹配的负面影响,接收机OFDM在搜索带宽范围内用一组载波频率解调波形fPhaseComp.当DL-SCH解码成功或到达最后一个频率时,搜索结束。产生相等符号相位补偿的最小搜索带宽分别为1920、3840、7680和15360 kHz,公共子载波间隔分别为15、30、60和120 kHz。当SIB1解码失败,且均衡的PDSCH符号导致星座严重扭曲和旋转时,将搜索带宽增加到这些值。

μ= log2 (scsCommon / 15);bw = 2 ^μ* 100;%搜索带宽(kHz)freqStep = 2 ^μ;频率步长(kHz)freqSearch = bw / 2: freqStep: bw / 2-freqStep;[~, fSearchIdx] = (abs (freqSearch));%从中心排序频率freqSearch = freqSearch (fSearchIdx);FPC = FphaseComp  -  Kfreqshift + 1E3 * Freqsearch%OFDM解调接收波形nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,nrb, scsCommon, nSlot,...“采样器”rxSampleRate,“载波频率”fpc);%从接收的网格中提取监视槽rxSlotGrid = rxGrid (csetSubcarriers、monSymbols:);rxSlotGrid = rxSlotGrid / max (abs (rxSlotGrid (:)));所接收RE量级的正规化PDSCH符号的%信道估计和均衡[命令,据nVar pdschHestInfo] = nrChannelEstimate (rxSlotGrid, pdschDmrsIndices pdschDmrsSymbols);[pdschIndices, pdschIndicesInfo] = nrPDSCHIndices (c0Carrier pdsch);[pdschRxSym, pdschHest] = nrExtractResources (pdschIndices rxSlotGrid,命令);据nVar pdschEqSym = nrEqualizeMMSE (pdschRxSym pdschHest);%PDSCH解调CW = NRPDSCHDECODE(C0CARRIER,PDSCH,PDSCHEQSYM,NVAR);创建并配置DL-SCH译码器的目标码率和%传输块大小decodeDLSCH = nrDLSCHDecoder;Xoh_PDSCH = 0;% TS 38.214章节5.1.3.2tcr=hMCS(dci.调制编码);NREPerPRB=pdschIndicesInfo.NREPerPRB;tbsLength=nrTBS(pdsch.调制,pdsch.NumLayers,长度(pdsch.PRBSet),NREPerPRB,tcr,Xoh_pdsch);decodeDLSCH.TransportBlockLength=tbsLength;decodeDLSCH.TargetCodeRate=tcr;%解码DL-SCH[sib1bits, sib1CRC] = decodeDLSCH (cw、pdsch.Modulation pdsch.NumLayers, dci.RedundancyVersion);如果sib1CRC = = 0打破结束结束%在资源网格中突出PDSCHsubsPdsch =双(nrPDSCHIndices (c0Carrier pdsch,“IndexStyle”“下标”)); x=min(子序列(:,2))-1;X=max(subsdsch(:,2))-X;y=最小值(子序列(:,1));Y=max(subsdsch(:,1))-Y+1;边界框(y,x,y,x);str=sprintf('PDSCH(SIB1)\n调制:%s\n码率:%.2f'、pdsch.Modulation tcr);文本(x + 4, y + y + 60 0, str,“字形大小”10“颜色”' w '%均衡后接收到的PDSCH星座图图;绘图(PDSCHEQSYM,“o”);Xlabel(“同步”);ylabel (“交”)标题(“均衡PDSCH星座”);m = max(abs([real(pdscheqsym(:)); imag(pdscheqsym(:))]))* 1.1;轴([ -  m m-m]);%计算RMS PDSCH EVM,包括标准化的PDSCH符号为任何DM-RS和PDSCH功率之间的偏差%pdschRef = nrPDSCH (c0Carrier、pdsch、双(cw {1} < 0));维生素与= comm.EVM;pdschEVMrms =维生素(pdschRef pdschEqSym /√(var (pdschEqSym)));%显示PDSCH EVM和DL-SCH CRCDISP([' PDSCH RMS evm: 'num2str(pdschevmrms,' % 0.3 f ''%']); disp([' PDSCH crc: 'num2str (sib1CRC)]);如果sib1CRC == 0“SIB1解码成功。”);其他的disp (“SIB1解码失败。”);结束
PDSCH RMS EVM: 10.835% PDSCH CRC: 0 SIB1解码成功。

附录

下面的例子使用了这些辅助函数:

参考文献

  1. 3 gpp TS 38.101 - 1。“NR;用户设备(UE)无线电发射和接收;第1部分:量程1独立"第三代合作伙伴项目;技术规范无线电接入网

  2. 3 gpp TS 38.104。“NR;基站(BS)无线电发射和接收。”第三代合作伙伴项目;技术规范无线电接入网

  3. 3 gpp TS 38.211。“NR;物理通道和调制。”第三代合作伙伴项目;技术规范无线电接入网

  4. 3 gpp TS 38.212。“NR;多路复用和信道编码。”第三代合作伙伴项目;技术规范无线电接入网

  5. 3GPP TS 38.213。“NR;控制的物理层程序。”第三代合作伙伴项目;技术规范无线电接入网

  6. 3GPP TS 38.214.“NR;数据的物理层程序。”第三代合作伙伴项目;技术规范无线电接入网

  7. 3GPP TS 38.321.“媒体访问控制(MAC)协议规范”第三代合作伙伴项目;技术规范无线电接入网

本地函数

函数现在= isCORESET0Present (ssbBlockPattern kSSB)开关ssbBlockPattern情况下{的情况下“案例B”“案例C”}%fr1kssb_max=23;情况下{“案例D”“案例E”}%fr2.kssb_max=11;结束如果(kSSB <= kssb_max) present = true;其他的= false;结束结束函数timingOffset = hTimingOffsetToFrame(破裂,抵消,ssbIdx rxSampleRate)%在FFT样本中测量符号长度时,缩放符号百分比长度,以说明接受取样率。非整数延迟%在过程结束时近似。scs = hSSBurstSubcarrierSpacing (burst.BlockPattern);scs ofdmInfo = nrOFDMInfo (1,“采样器”, rxSampleRate);%最小的SCS-SR FFT尺寸srRatio = rxSampleRate / (scs * 1 e3 * ofdmInfo.Nfft);symbolLengths = ofdmInfo.SymbolLengths * srRatio;%调整定时偏移到SS块的开始。这个步骤删除%PSS搜索期间参考网格中引入的额外偏移量,%,在第二个OFDM符号中包含PSS。offset = offset + symbollength (1);调整定时偏移,使接收的网格从%帧头,即调整帧头之间的差异的正时偏移%ssb最强的第一个符号,以及帧的开始burstStartSymbols = hSSBurstStartSymbols (burst.BlockPattern burst.L_max);%开始符号在SSB命理学ssbFirstSym = burstStartSymbols (ssbIdx + 1);%基于%调整整个子帧symbolspersubframe =长度(symbollengths);subframeoffset = bloor(ssbfirstsym / symbolspersubframe);samplespserubframe = sum(symbollengths);timingOffset = offset  - (子映射OFFSET * SAMPLESPSERUBFRAME);%如果不是整数,调整剩余的OFDM符号和圆偏移量symbolOffset =国防部(ssbFirstSym symbolsPerSubframe);timinggoffset = round(timinggoffset - sum(symbollength (1:symbolOffset)));结束函数highlightSSBlock(refBurst,ssbIndex,commonNRB,scs,kFreqShift)scsCommon = scs (2);%确定常见命理学中SSB的频率来源bounding_box = @ (y, x, h, w)矩形(“位置”,[x+0.5y-0.5w-h],“EdgeColor”'r');scsRatio = scsSSB / scsCommon;ssbFreqOrig = 12 * (commonNRB-20 * scsRatio) / 2 + 1 + kFreqShift / (e3 scsCommon * 1);%确定常见数字中SSB的时间来源ssbStartSymbols = hSSBurstStartSymbols (refBurst.BlockPattern refBurst.L_max);ssbHeadSymbol = ssbStartSymbols (ssbIndex + 1) / scsRatio;地板ssbTailSymbol = ((ssbStartSymbols (ssbIndex + 1) + 4) / scsRatio) 1;bounding_box (ssbFreqOrig ssbHeadSymbol 240 * scsRatio ssbTailSymbol-ssbHeadSymbol + 1);str = sprintf('最强\n SSB:%d', ssbIndex);文本(str ssbHeadSymbol ssbFreqOrig-20 0,“字形大小”10“颜色”' w '结束

相关的话题