主要内容

NR Cell搜索和MIB和SIB1恢复

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

介绍

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

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

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

  • AWGN.:将添加剂白色高斯噪声(AWGN)应用于波形。

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

这些图示出了接收器内的处理步骤。

接收器的配置

要同步和解调接收的波形,需要此信息:

  • 波形采样率解调接收波形。

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

  • 最小信道带宽来确定Coreset0频率资源。TS 38.101-1表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_{马克斯}$)来计算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_{马克斯}$基于SS区块模式和NR操作波段。

loadfromfile = 0;%设置为1以加载捕获的波形如果loadFromFile%加载捕获波形rx=负载('捕获WaveFormsib1.mat'); rxWaveform=rx.waveform;%配置接收器采样率(样本/秒)rxSampleRate = rx.sampleRate;%符号相位补偿频率。指定运营商中心%频率或设置为0禁用符号相位补偿fPhaseComp = rx.fPhaseComp;%载波中心频率(Hz)%设置了NR频带所需的最小通道带宽%在FR1中配置CoreSet0(参见TS 38.101-1表5.3.5-1)minChannelBW = rx.minChannelBW;% 5, 10, 40 MHz%在接收器处配置必要的突发参数。SSB模式%可以是“案例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的波形%配置小区标识config = struct();config.ncellid = 102;%配置SS突发config.blockpattern =.'案例b'%FR1:‘案例A’、‘案例B’、‘案例C’。FR2:‘案例D’,‘案例E’config.transmittedBlocks = ONE(1,8);发送的SS块的%位图config.subcarrierspacingcommon = 15;kHz中%SIB1子载波间隔(FR1的15或30。FR2的60或120)配置。EnableSIB1 = 1;%设置为0以禁用SIB1%设置了NR频带所需的最小通道带宽%在FR1中配置CoreSet0(参见TS 38.101-1表5.3.5-1)config.minchannelbw = 5;% 5, 10, 40 MHz%配置并生成一个包含SS突发和SIB1的波形wavegenConfig = hSIB1WaveformConfiguration(配置);[txWaveform, waveInfo] = nrWaveformGenerator (wavegenConfig);txOfdmInfo = waveInfo.ResourceGrids(1)信息;通过提高单边带的信噪比来引入波束形成增益%相关的SIB1 PDCCH和PDSCHssbIdx = 0;SSB的%索引提升(基于0)Boost = 6;%信噪比提升(dB)txwaveform = hsib1boost(txwaveform,waveenconfig,waveinfo,ssbidx,boost);%向波形中添加高斯白噪声RNG('默认');重置随机数生成器SNRDB = 20;AWGN的%SNRrxwaveform = awgn(txwaveform,snrdb-boost,-10 * log10(double(txofdminfo.nfft));%配置接收器%采样率rxsamplerve = txofdminfo.sampleate;%符号相位补偿频率(Hz)。功能%nrwaveformgenerator不适用于符号相位补偿%生成的波形。fphasecomp = 0;%载波中心频率(Hz)%最小信道带宽(MHz)minChannelBW = config.MinChannelBW;%在接收端配置必要的突发参数refBurst。BlockPattern = config.BlockPattern;refBurst。L_max =元素个数(config.TransmittedBlocks);结尾%从配置的突发和接收机参数中获取OFDM信息nrbSSB = 20;scsSSB = hSSBurstSubcarrierSpacing (refBurst.BlockPattern);rxOfdmInfo = nrOFDMInfo (nrbSSB scsSSB,“SampleRate”, rxSampleRate);%显示接收波形的声谱图图;nfft = rxofdminfo.nfft;频谱图(RxWaveForm(:,1),那些(NFFT,1),0,NFFT,“中心”,rxsamplerate,“桠溪”'minthreshold', -130);标题(“接收波形的谱图”

PSS搜索和频率偏差校正

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

  • 使用候选频率偏移对接收到的波形进行频移。候选偏移间隔半个子载波。使用Searchbw.控制频率偏移搜索带宽。

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

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

disp (' - 频率校正和定时估计 - '%在kHz中指定频率偏移搜索带宽searchbw = 6 * scsssb;[rxwaveform,freqoffset,nid2] =批胜福克斯(rxwaveform,refburst.blockpattern,rxsamplervere,searchbw);DISP([“频率偏移:”num2str(频率偏移,'%.0f''赫兹'])
- 频率校正和定时估计 - 频率偏移:65 Hz

时间同步和OFDM解调

通过使用在频率搜索过程中检测到的参考PSS序列,接收器估计到最强SS块的定时偏移。在频率偏移校正之后,接收器可以假设参考PSS和接收波形的中心频率对齐。最后,接收器OFDM解调了同步波形并提取SS块。

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

SSS搜索

接收机从接收到的网格中提取与SSS相关联的资源元素,并将它们与本地生成的每个可能的SSS序列相关联。结合最强PSS和SSS序列的索引给出PBCH DM-RS和PBCH处理所需的物理层小区标识。

%从SS / PBCH块中提取所接收的SSS符号sssIndices = nrSSSIndices;sssRx = nrExtractResources (sssIndices rxGrid);%关联接收到的SSS符号与每个可能的SSS序列党卫军= 0 (1336);为了nid1 = 0:335 ncellid =(3 * nid1)+ nid2;sssref = nrsss(ncellid);SSSEST(NID1 + 1)= SUM(ABS(平均值(SSSRX。*结合(SSSREF),1))。^ 2);结尾%绘制SSS相关图图;茎(0:335党卫军,'o');标题('SSS相关性(频域)');Xlabel('$ n_ {id} ^ {(1)} $''口译员'“乳胶”); 伊拉贝尔('震级');轴([ -  1 336 0最大(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 =零(1,8);为了ibar_ssb = 0:7 refrogrid =零([240 4]);refratf(dmrsindices)= nrpbchdmrs(ncellid,ibar_ssb);[hest,nest] = nrchannelestimate(rxgrid,crefgrid,'verigesswindow',[0 1]);DMRSEST(ibar_ssb + 1)= 10 * log10(平均值(abs(hest(:)。^ 2))/ nest);结尾%绘制PBCH DM-RS信噪比图;茎(0:7 dmrsEst,'o');标题(“PBCH DM-RS信噪比估计”);Xlabel(“美元\眉题{我}_{单边带}$”'口译员'“乳胶”);xticks (0:7);ylabel ('估计信噪比(dB)');轴([ -  1 8 min(dmrsest)-1 max(dmrsest)+1]);%记录最高SNR的ibar_ssbibar_SSB=find(dmrsEst==max(dmrsEst))-1;%plot选择了ibar_ssb抓住;plot(ibar_ssb,max(dmrsest),“kx”'行宽'2,“MarkerSize”8);传奇([“snrs”" $ \眉题{我}_{单边带}$ = "+ num2str(ibar_ssb)],'口译员'“乳胶”);

使用PBCH DM-RS和SSS的信道估计

接收器使用先前步骤中检测到的SSS和PBCH DM-R来估计整个SS / PBCH块的信道。还执行对PBCH DM-RS / SSS上的添加剂噪声的估计。

refrovid = zeros([nrbssb * 12 4]);refratf(dmrsindices)= nrpbchdmrs(ncellid,ibar_ssb);refrovrid(sssindices)= nrsss(ncellid);[hest,nest,hestinfo] = nrchannelestimate(rxgrid,crefgrid,'verigesswindow',[0 1]);

PBCH解调

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

disp (' -  PBCH解调和BCH解码 - '%从SS/PBCH块中提取接收到的PBCH符号[Pbchindices,PBchindicsInfo] = nrpbchindices(ncellid);pbchrx = nrextractresources(pbchindices,rxgrid);根据TS 38.211章节7.3.3.1配置PBCH置乱的'v'%'v'也是L_max = 4或3的SS / PBCH块索引的2LSBL_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(“同期”); 伊拉贝尔(“交”) 标题('均衡的PBCH CONTLELATION');m = max(abs([真实(pbcheq(:)); impt(pbcheq(:))]))* 1.1;轴([ -  m m-m]);% PBCH解调pbchBits=nrpbcdecode(pbchEq,ncellid,v,nest);%计算RMS PBCH EVMpbchref = nrpbch(pbchbits <0,ncellid,v);维生素与= comm.EVM;pbchevmrms = EVM(PBCHREF,PBCHEQ);%显示计算的EVMDISP(['PBCH RMS EVM:'num2str(pbchevmrms,'%0.3f''%']);
-  PBCH解调和BCH解码 -  PBCH RMS EVM:8.687%

BCH译码

接收器重量来自MMSE均衡器的信道状态信息(CSI)的BCH比特估计并对BCH进行解码。BCH解码包括速率恢复,极性解码,CRC解码,解扰和将24个BCH传输块位与8附加的定时相关的有效载荷比特分离。

%应用CSIpbchbits = pbchbits。* csi;%执行BCH解码,包括速率恢复、极性解码和CRC%解码。PBCH分解和分离BCH传输块% bits 'trblk' from 8 additional payload bits A…A+7也执行:%A ... A + 3:4 LSB的系统帧号%A + 4:半帧号%A + 5 ... A + 7:对于L_max = 64,SS / PBCH块索引的3个MSB%对于L_max=4或8,A+5是子载波偏移量k_SSB的最大有效位polarListLength = 8;[〜,crcbch,trblk,sfn4lsb,nhalfframe,msbidxoffset] =...nrbchdecode(pbchbits,pargistlenth,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 +(bi2de(msbidxoffset。',“left-msb”) * 8);k_SSB = 0;其他的k_SSB = msbidxoffset * 16;结尾%显示SSB索引DISP(['SSB指数:'num2str (ssbIndex)]);
BCH CRC:0 SSB索引:0

MIB解析

该示例将24解码的BCH传输块位解析为表示MIB消息字段的结构。该过程包括重构10位系统帧号(SFN)nframe.来自MIB中的6个MSB和PBCH有效负载位中的4个LSB。它还包括合并子载波偏移的MSBk_SSB从L_MAX = 4或8 SS / PBCH块的PBCH有效载荷位。

%创建由解码的第7位发出的子载波间隔集合%MIB,该组对于FR1(L_MAX = 4或8)和FR2(L_MAX = 64)不同如果(refburst.l_max == 64)commonscss = [60 120];其他的CommonCSS=[15 30];结尾%根据解码后的MIB位创建MIB字段结构。的BCH% transport block 'trblk'是RRC消息bch - bch - message,由%与MIB相对应的前导0位然后是23位mib.nframe = bi2de([trblk(2:7); sfn4lsb]。',“left-msb”);mib。SubcarrierSpacingCommon = commonscs (trblk(8) + 1);mib。k_SSB = k_SSB + bi2de(trblk(9:12).',“left-msb”);mib。dmrstypeposition = 2 + trblk(13);mib。PDCCHConfigSIB1 = bi2de (trblk(14:21)。”“left-msb”);mib.cellbarred = trblk(22);mib.intrafreqreselection = trblk(23);%显示MIB结构disp ('BCH / MIB内容:') disp (mib);%检查是否存在用于Type0-PDCCH的Coreset常见的搜索空间(CSS),%根据TS 38.213第4.1节如果〜Iscoreset0present(refburst.blockpattern,mib.k_ssb)fprintf('CORESET0 is not present (k_SSB > k_SSB_max).\n');返回结尾
BCH / MIB内容:NFRAME:0子载波PACINGCOMMON:15 k_ssb:0 dmrstypeaposition:3 pdcchconfigsib1:4 cellbarred:0 IntraFreqReselection:0

OFDM解调满带宽

一旦MIB恢复,接收机使用公共子载波间隔和支持CORESET0的带宽来OFDM解调包含检测到的SS块的帧。接收机通过与检测到的SSB位置的偏移量和TS 38.213第13节表万博1manbetx13-1至13-10中规定的带宽,确定通用命理中的CORESET0频率资源[5.].频率校正过程使OFDM资源网格的中心与SS突发的中心频率对齐。然而,这些中心不一定与CORESET0的中心频率一致。该图显示了SSB、CORESET0频率资源和相关的PDCCH监控场合之间的关系。

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

如果(refBurst.L_max==64) scsKSSB = mib.SubcarrierSpacingCommon;其他的scskssb = 15;结尾k_SSB=mib.k_SSB;kFreqShift=k_SSB*scsKSSB*1e3;rxWaveform=rxWaveform.*exp(1i*2*pi*kFreqShift*(0:长度(rxWaveform)-1)'/rxSampleRate);%调整到帧原点的定时偏移量FrameOffset = htimingoffsettoframe(替换,timingoffset,ssbindex,rxsamplerve);%如果帧偏移为负,表示感兴趣的帧不完整。添加将波形的%引导零使波前对齐到框架如果frameOffset < 0 rxWaveform = [0 (-frameOffset,size(rxWaveform,2));rxWaveform];其他的rxWaveform=rxWaveform(1+frameOffset:end,:);结尾%使用CORESET0带宽确定OFDM解调带宽MSBIDX =楼层(MIB.PDCCHCONFIGSIB1 / 16);MIB中的PDCCHCONFIGSIB1%4 MSBscsCommon=mib.SubcarrierSpacingCommon;scsPair=[scsSSB scsCommon][csetNRB,~,csetFreqOffset]=hCORESET0Resources(msbIdx,scsPair,minChannelBW,k_SSB);%接收波形中包含CORESET0的RB最小带宽。c0 = csetfreqoffset + 10 * scsssb / scscommon;% CORESET载波中心的频率偏移nrb = 2 * max(c0,csetnrb-c0);%覆盖CORESET0的最小RB数量如果rxSampleRate < nrb*12*scsCommon*1e3显示(['SIB1恢复无法继续。CORESET0资源超出'...“配置的采样率的接收波形的频率限制。”]);返回结尾%OFDM用公共子载波间隔解调接收的波形nslot = 0;rxgrid = nrofdmdemodulate(rxwaveform,nrb,scscommon,nslot,...“SampleRate”,rxsamplerate,“CarrierFrequency”,fphasecomp);%显示OFDM资源网格并突出显示最强的SS块图;显示亮度图像(abs (rxGrid (:,: 1)));轴xyXlabel('OFDM符号'); 伊拉贝尔(副载波的);numFrames =地板(长度(rxWaveform) / rxSampleRate / 10 e - 3);sfn = sprintf (“(%…% d)”mib。NFrame mib.NFrame + numFrames-1);标题(['收到的资源网格。系统框号:'SFNS]);exiglightssblock(替换,SSBindex,NRB,SCSPAIR,KFREQSHIFT)

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

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

  • 确定PDCCH监控场合,提取包含控制信息的OFDM资源网格。

  • Coreset0,搜索空间和PDCCH的配置。

  • 盲查找Format 1_0 DCI消息。

接收器通过SL检测到的SS块的位置确定通过插槽和OFDM符号偏移的PDCCH监视场合,如TS 38.213表13-11和13-12中所述5.]。

MSBIDX =楼层(MIB.PDCCHCONFIGSIB1 / 16);表13-1 ~ 13-10. MSB of PDCCHConfigSIB1 in MIB index[csetNRB, csetDuration csetOffset csetPattern] = hCORESET0Resources (msbIdx, scsPair, minChannelBW k_SSB);lsbIdx = mod (mib.PDCCHConfigSIB1, 16);[ssSlot, ssFirstSym isOccasion] = hPDCCH0MonitoringOccasions (lsbIdx、ssbIndex scsPair, csetPattern, csetDuration, mib.NFrame);% pcch监控场合关联到不同的SS块可以在%不同的框架。如果此框架中没有监视场合,下一个肯定有一个。斜坡框架= 10 * scscommon / 15;如果~isOccasion [ssSlot,ssFirstSym,isOccasion] = hpdcch0monitoringoccations (lsbIdx,ssbIndex,scsPair,csetPattern,csetDuration,mib.NFrame+1);ssSlot = ssSlot + slotsPerFrame;结尾%对于FR1,UE在类型0 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参数。根据TS 38.213第13页13-1至13-15配置了Corese Resources和搜索空间[5.].CCE-to-Reg交织映射参数(Regbundlesize = 6,InterleaverSize = 2和ShiftIndex = ncellId)在TS 38.211第7.3.2.2节中描述了[3.]. 对于芯组0,BWP是TS 38.212第7.3.1.0节中所述的芯组尺寸[4.].PDCCH加扰参数是NRNTI = 0和NID = NCellID,如TS 38.211第7.3.2.3节中所述3.].

pdcch = hpdcch0configuration(ssbindex,mib,scspair,ncellid,minchannelbw);%配置载波以跨越BWP(Coreset0)c0carrier = nrcarrierconfig;c0carrier.subcarrierspacing = mib.subcarrierspacingcommon;c0carrier.nstartgrid = pdcch.nstartbwp;c0carrier.nsizegrid = pdcch.nsizebwp;c0carrier.nslot = pdcch.searchspace.slotpeiondandOffset(2);c0carrier.nframe = mib.nframe;c0carrier.ncellid = ncellid;

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

%使用Si-RNTI进行格式1_0格式指定DCI消息(TS 38.212% 7.3.1.2.1节)dcispec1_0 = hSystemInformationDCIFieldsSize (pdcch.NSizeBWP);numDCIBits =总和(structfun (@ (x) x, dcispec1_0));disp (' - 在PDCCH中的下行链路控制信息消息搜索 - ');sirnti = 65535;表7.1-1dciCRC=正确;mSlot=0;%循环所有监控插槽(mslot 如果monslotsperperiod == 2如果mod(mSlot,2) pdcch.SearchSpace.SlotPeriodAndOffset(2) = monSlots(2);其他的pdcch.searchspace.slotpeiondandoffset(2)= monslots(1);结尾结尾%根据TS 38.213节10.1获得PDCCH考生[pdcchInd, pdcchDmrsSym pdcchDmrsInd] = nrPDCCHSpace (c0Carrier pdcch);rxMonSlotGrid = rxMonSlotGrid(:,(1:symbolsPerSlot) + symbolsPerSlot* mlot,:);rxslotgrid = rxslotgrid / max(abs(rxslotgrid(:)));%接收到的RE量级的归一化%在所有支持的聚合级别上循环万博1manbetxaLev=1;(alv <= 5) && dciCRC ~= 0%循环SS中每个聚合级别的所有候选cIdx = 1;numCandidatesAL = pdcch.SearchSpace.NumCandidates (aLev);(cIdx <= numCandidatesAL) && dciCRC ~= 0使用PDCCH DM-RS的信道估计[hest,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、numDCIBits polarListLength, siRNTI);如果dcicrc == 0 disp(['解码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.3f''%']);DISP([' PDCCH crc: 'num2str(dcicrc)]);%突出显示与最强的SSB相对应的coreset0 / s边框=@(y,x,h,w)矩形('位置', x+0.5 y-0.5 w h,'Edgecolor''r');绑定_box(csetsubcarriers(1),monsymbols(1)+ ssfirstsym-1,csetnrb * 12,csetduration);str = sprintf(“CORESET0 / SS”);文本(monSymbols (1) + ssFirstSym-7 csetSubcarriers(1) -20年,0,str,“字形大小”,10,'颜色'' w '如果DCICRC DISP('DCI解码失败。');返回结尾%曲线接收到均衡后的PDCCH星座图;绘图(PDCCHEQSYM,'o');Xlabel(“同期”); 伊拉贝尔(“交”) 标题(“均衡PDCCH星座”);m = max(abs([real(pdccheqsym(:)); imag(pdccheqsym(:))]))* 1.1;轴([ -  m m-m]);%显示包含最强PDCCH槽的OFDM网格图;ImageC(ABS(rxslotgrid(:,:,1))));轴xyXlabel('OFDM符号'); 伊拉贝尔(副载波的);标题('插槽包含最强的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;bounding_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,MIB和DCI确定PDSCH配置

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

  • DL-SCH和SIB1提取的解码

disp (——PDSCH解调和DL-SCH解码——%构建DCI消息结构dci=hDCI(dcispec1_0,dcibits);%从单元格ID,MIB和DCI获取PDSCH配置[pdsch, K_0] = hSIB1PDSCHConfiguration (dci、pdcch.NSizeBWP mib.DMRSTypeAPosition, csetPattern);%对于CORESET模式2,gndeb可以在下一个插槽中分配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网格图;ImageC(ABS(rxslotgrid(:,:,1))));轴xyXlabel('OFDM符号'); 伊拉贝尔(副载波的);标题('包含PDSCH的插槽(插槽偏移k_0 = 1)');结尾使用PDSCH DM-RS%PDSCH信道估计和均衡pdschdmrsindices = nrpdschdmrsindices(c0carrier,pdsch);PDSCHDMRSSYMBOLS = NRPDSCHDMRS(C0CARRIER,PDSCH);
——PDSCH解调和DL-SCH解码——

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

mu = log2(scscommon / 15);bw = 2 ^ mu * 100;搜索带宽(kHz)freqstep = 2 ^ mu;%频率步进(kHz)freqsearch = -bw / 2:freqstep:bw / 2-freqstep;[〜,fsearchidx] = sort(abs(freqsearch));%从中心排序频率freqSearch = freqSearch (fSearchIdx);为了fpc = fPhaseComp + 1e3*freqSearchOFDM解调接收波形的百分比nslot = 0;rxgrid = nrofdmdemodulate(rxwaveform,nrb,scscommon,nslot,...“SampleRate”,rxsamplerate,“CarrierFrequency”,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.2节TCR = HMCS(DCI.Modcoding);nreperprb = pdschindicsInfo.nreperprb;tbslength = nrtbs(pdsch.modulation,pdsch.numlayers,length(pdsch.prbset),nreperprb,tcr,xoh_pdsch);解码ledlsch.transportblocklength = tbslength;DecodedLsch.targetCoderate = TCR;%解码DL-SCH[sib1bits,sib1crc] =解码ledlsch(cw,pdsch.modulation,pdsch.numlayers,dci.rv);如果sib1crc == 0.打破结尾结尾%在资源网格中突出PDSCHsubspdsch = double(nrpdschindices(c0carrier,pdsch,“IndexStyle”'下标'));x = min (subsPdsch (:, 2)) 1;X = max (subsPdsch (:, 2)) - X;y = min (subsPdsch (: 1));Y = max (subsPdsch (: 1)) - Y + 1;bounding_box (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(“同期”); 伊拉贝尔(“交”) 标题('均衡的PDSCH星座');m = max(abs([real(pdscheqsym(:)); imag(pdscheqsym(:))]))* 1.1;轴([ -  m m-m]);%计算RMS PDSCH EVM,包括任何DM-RS和PDSCH功率之间的偏差%PDSCHREF = NRPDSCH(C0CARRIER,PDSCH,DOUBLE(CW {1} <0));维生素与= comm.EVM;pdschevmrms = EVM(PDSCHREF,PDSCHEQSYM / SQRT(var(PDSCHEQSYM)));%显示PDSCH EVM和DL-SCH CRCDISP(['PDSCH RMS EVM:'num2str(pdschevmrms,'%0.3f''%']);DISP(['PDSCH CRC:'num2str(sib1crc)]);如果sib1CRC == 0“SIB1解码成功。”);其他的disp ('SIB1解码失败。');结尾
PDSCH RMS EVM:10.835%PDSCH CRC:0 SIB1解码成功。

附录

此示例使用这些辅助功能:

参考

  1. 3GPP TS 38.101-1。“NR;用户设备(UE)无线电传输和接收;第1部分:范围1独立”第三代合作伙伴项目;技术规范无线电接入网

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

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

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

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

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

  7. 3 gpp TS 38.321。“NR;介质访问控制(MAC)协议规范。第三代合作伙伴项目;技术规范无线电接入网

本地函数

函数现在= isCORESET0Present (ssbBlockPattern kSSB)开关ssbBlockPattern案件{'案件a''案例b'“案例C”}%fr1kssb_max = 23;案件{“D”“E”}%fr2.kssb_max = 11;结尾如果(kSSB <= kssb_max) present = true;其他的= false;结尾结尾函数DCI = HDCI(DCISPEC,DCIBITS)%parse dci消息到DCI消息字段的结构中fieldsizes = structfun (@ (x) x, dcispec);Fieldbits2dec = @(x,y)bin2dec(char(x(y(1):y(2))) +'0'));fieldbitranges = [[0;cumsum (fieldsizes (1: end-1))) + 1 cumsum (fieldsizes)];fieldbitranges = num2cell (fieldbitranges 2);值= cellfun (@ (x) fieldbits2dec (dcibits。”,fieldbitranges x)“UniformOutput”,假);dci=cell2struct(值、字段名(dcispec));结尾函数timingoffset = htimingoffsettoframe(突发,偏移,ssbidx,rxsamplerve)%在FFT样本中测量符号长度时,对符号进行缩放%长度要考虑接收器采样率。非整数延迟%在过程结束时近似。scs = hssburstsubcarierspacing(burst.blockpattern);OFDMINFO = NROFDMINFO(1,SCS,“SampleRate”, rxSampleRate);%最小的SCS-SR FFT尺寸srRatio=rxSampleRate/(scs*1e3*ofdmInfo.Nfft);symbolLengths=ofdmInfo.symbolLengths*srRatio;%将定时偏移到SS块的开始。这一步删除了% PSS搜索时在参考网格中引入的额外偏移量,包含第二个OFDM符号中PSS的%。偏移量=偏移量+符号长度(1);%调整定时偏移,以便接收的栅格从%帧头即为调整定时偏移量之间的差异%ssb最强的第一个符号,以及帧的开始burststartsymbols = hssburststartsymbols(burst.blockpattern,burst.l_max);%启动SSB数字中的符号ssbFirstSym=突发性符号(ssbIdx+1);%基于%调整整个子帧symbolspersubframe =长度(symbollengths);subframeoffset = bloor(ssbfirstsym / symbolspersubframe);samplespserubframe = sum(symbollengths);timingOffset = offset  - (子映射OFFSET * SAMPLESPSERUBFRAME);%如果不是整数,则调整剩余的OFDM符号和舍入偏移symbolOffset=mod(ssbFirstSym,SYMBOLSPERSUBRAME);timingOffset=四舍五入(timingOffset-总和(symbolLengths(1:symbolOffset));结尾函数exiglightssblock(替换,ssbindex,commonnrb,scs,kfreqshift)scsssb = scs(1);scscommon = scs(2);%确定常见数字中SSB的频率次数边框=@(y,x,h,w)矩形('位置', x+0.5 y-0.5 w h,'Edgecolor''r');scsratio = scsssb / scscommon;SSBFreqorig = 12 *(CommonNRB-20 * SCSRATIO)/ 2 + 1 + KFREQSHIFT /(SCSCOMMON * 1E3);%确定常见数字中SSB的时间来源ssbStartSymbols=hSSBurstStartSymbols(refBurst.BlockPattern,refBurst.L_max);ssbHeadSymbol=ssbStartSymbols(ssbIndex+1)/scsRatio;SSB轨道符号=地板((SSB轨道符号(ssbIndex+1)+4)/scsRatio)-1;边界框(SSBFREQUORIG、ssbHeadSymbol、240*scsRatio、ssbTailSymbol、ssbHeadSymbol+1);str=sprintf('最强\n SSB: %d',ssbindex);文字(SSBheadSymbol,SSBFreqorig-20,0,str,“字形大小”,10,'颜色'' w '结尾

相关话题