主要内容

NR Cell Search and MIB and SIB1 Recovery

此示例演示了如何使用5G Toolbox™来同步,解调和解码实时GnodeB信号。该示例解码主信息块(MIB)和第一个系统信息块(SIB1)。解码MIB和SIB1需要一个全面的接收器,能够解调和解码大多数下行链路信道和信号。

介绍

在用户设备(UE)可以与网络通信之前,它必须执行小区搜索和选择过程并获得初始系统信息。该过程的第一步是获取帧同步,查找单元格标识和解码MIB和SIB1。此示例显示如何使用5G工具箱执行这些步骤。

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

  • 波形生成:通过使用来自5G工具箱的下行链路波形发生器,配置和生成携带MIB,Coreset0,PDCCH和PDSCH的同步信号突发。发射机可以增强一个SS块的SNR,但它不执行波束成形。有关SSB波束成形的更多信息,请参阅NR SSB波束扫描

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

  • 接收者:将各种同步和解调过程应用于接收的波形以建立系统框架号,单元格标识和SSB,并解码MIB。这些提供了在PDCCH中盲解码的下行链路控制信息(DCI)所需的信息。接收器使用DCI配置PDSCH解调器,解码DL-SCH,最后恢复SIB1。

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

接收器配置

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

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

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

  • 确定CORESET0频率资源的最小信道带宽。表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 = load('捕获WaveFormsib1.mat');rxwaveform = rx.waveform;%配置接收器采样率(样本/秒)rxsamplerve = rx.sampleate;%符号相位补偿频率。指定运营商中心%频率或设置为0以禁用符号相位补偿fphasecomp = rx.fphasecomp;%载波中心频率(Hz)%设置NR带宽所需的最小通道带宽为% configure CORESET0 in FR1(参见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的波形%配置小区标识配置=结构();配置。NCellID = 102;%配置SS突发config.blockpattern =.“案例B”;%fr1:'case a','case b','case c'。fr2:'case d','case e'配置。TransmittedBlocks = 1 (1,8);发送的SS块的%位图配置。SubcarrierSpacingCommon = 15;% SIB1子载波间距,kHz(15或30为FR1。FR2为60或120)配置。EnableSIB1 = 1;%设置为0以禁用SIB1%设置NR带宽所需的最小通道带宽为% configure CORESET0 in FR1(参见TS 38.101-1表5.3.5-1)config.minchannelbw = 5;% 5, 10, 40 MHz%配置并生成包含SS突发和SIB1的波形WaveNConfig = HSIB1WaveFormConfiguration(Config);[txwaveform,waveinfo] = nrwaveformgenerator(WaveCenconfig);txofdminfo = waveinfo.resourcegrids(1).info;%通过提高一个SSB的SNR来引入波束成形增益%相关SIB1 PDCCH和PDSCHssbidx = 0;要提升SSB的索引(基于0)Boost = 6;%snr升压dbtxWaveform = hSIB1Boost (txWaveform wavegenConfig、waveInfo ssbIdx,提高);%为波形添加白色高斯噪声rng (“默认”);重置随机数生成器SNRDB = 20;AWGN的%SNRrxWaveform = 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 = numel(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,'yaxis'“MinThreshold”,-130);标题(“接收波形的谱图”

PSS搜索和频率偏移校正

接收器按照以下步骤执行PSS搜索和粗略频率偏移估计:

  • 频率使接收的波形与候选频率偏移移位。候选偏移是间隔开的半子载波。采用searchBW控制频率偏移搜索带宽。

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

  • 通过将SSB中的每个OFDM符号的循环前缀与OFDM符号的相应有用的部分相关联,估计频率通过与SSB中的每个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符号中,以避免%特殊CP长度的第一个OFDM符号。refrovrid = zeros([nrbssb * 12 2]);refrovrid(nrpssindices,2)= nrpss(nid2);%表示正确CP长度的第二OFDM符号%时序估计。这是之前到OFDM符号的时序偏移由于参考网格的内容,检测到的SSB%nslot = 0;timingoffset = nrtimingestimate(rxwaveform,nrbssb,scsssb,nslot,refratig,“SampleRate”, rxSampleRate);%同步,OFDM解调,最强SS块提取rxGrid = nrOFDMDemodulate (rxWaveform (1 + timingOffset:,:), nrbSSB, scsSSB, nSlot,“SampleRate”, rxSampleRate);2:5, rxGrid = rxGrid (::);%显示样品中的定时偏差。当符号长度被测量时%在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);结尾%plot sss相关性图;茎(0:335党卫军,“o”);标题('SSS相关性(频域)');Xlabel('$ n_ {id} ^ {(1)} $'“翻译”'乳胶');ylabel('震级');轴([ -  1 336 0最大(SSSEST)* 1.1]);%通过找到最强的相关性确定NID1nid1 = find(sssest == max(sssest)) -  1;%plot选择了nid1抓住;绘图(NID1,MAX(SSSEST),“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的索引与最佳SNR确定了PBCH加扰初始化所需的SS / PBCH块指数的LSB。

%计算PBCH DM-RS指数dmrsindices = nrpbchdmrsindices(ncellid);%使用DM-RS符号为每个可能的DM-RS执行信道估计%序列并估计SNRdmrsEst = 0 (1,8);为了ibar_ssb = 0:7 refrogrid =零([240 4]);refGrid (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('估计SNR(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”" $ \眉题{我}_{单边带}$ = "+ num2str(ibar_ssb)],“翻译”'乳胶');

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

接收器使用先前步骤中检测到的SSS和PBCH DM-R来估计整个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,'verigesswindow',[0 1]);

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的SS/PBCH块索引的2个lbs,或3L_max = 8或64的%LSB。如果refburst.l_max == 4 v = mod(ibar_ssb,4);别的v = ibar_ssb;结尾ssbIndex = v;% PBCH均衡和CSI计算pbchhest = nrextractresources(pbchindices,hest);[PBCHEQ,CSI] = NREQUALIZEMSE(PBCHRX,PBCHHEST,NEST);qm = pbchindicesinfo.g / pbchindicsinfo.gd;CSI = Repmat(CSI',QM,1);CSI = REPAPE(CSI,[],1);%曲线接受了均衡后的PBCH星座图;情节(pbchEq“o”);Xlabel(“同步”);ylabel('quadrature')标题('均衡的PBCH CONTLELATION');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个额外的与时间相关的有效载荷位分离。

%申请CSI.pbchbits = pbchbits。* csi;%执行BCH解码,包括速率恢复,极性解码和CRC%解码。PBCH分解和分离BCH传输块% bits 'trblk' from 8 additional payload bits A…A+7也执行:%…A+3:“System Frame Number”的4个lsb%A + 4:半帧号% + 5…A+7:对于L_max=64, SS/PBCH块索引的3 msbl_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 +(bi2de(msbidxoffset。','左幕 -  MSB') * 8);k_SSB = 0;别的k_ssb = msbidxoffset * 16;结尾%显示SSB索引DISP([' SSB index: '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];别的commonscss = [15 30];结尾%从解码的MIB比特中创建MIB字段的结构。BCH.%传输块'trblk'是RRC消息BCCH-BCH-MESSAGE,包括前导0位的%然后是23位对应于MIBmib。NFrame = bi2de ([trblk (7);sfn4lsb]。”'左幕 -  MSB');mib.subcarrierspacingcommon = commonscss(trblk(8)+ 1);mib.k_ssb = k_ssb + bi2de(trblk(9:12)。','左幕 -  MSB');mib.dmrstypeaposition = 2 + trblk(13);mib.pdcchconfigsib1 = bi2de(trblk(14:21)。','左幕 -  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不存在(k_ssb> k_ssb_max)。\ n');返回结尾
BCH/MIB Content: NFrame: 0 SubcarrierSpacingCommon: 15 k_SSB: 0 dmrstypeposition: 3 PDCCHConfigSIB1: 4 cellblocked: 0 IntraFreqReselection: 0 . BCH/MIB Content: NFrame: 0 SubcarrierSpacingCommon: 15 k_SSB: 0 dmrstypeposition: 3 PDCCHConfigSIB1: 4 cellblocked: 0 IntraFreqReselection: 0

OFDM解调满带宽

一旦恢复了MIB,接收器就使用公共子载波间隔和带宽支持CoreSet0到OFDM解调包含检测到的SS块的帧。万博1manbetx接收器通过从检测到的SSB位置的偏移和TS 38.213第13部分13-1至13-10中指定的带宽来确定常见数字中的CORESET0频率资源。5.]。频率校正处理与SS突发的中心频率对齐OFDM资源网格的中心。然而,这些中心不一定与Coreset0的中心频率对齐。该图显示了SSB,CoreseT0频率资源和相关的PDCCH监控场合之间的关系。

与SS突发不同,控制和数据通道必须以频率与其公共资源块(CRB)栅格对齐。MIB中的KSSB的值通过该CRB栅格来表示SSB的频率偏移。随着频率校正过程以频率为中心,施加频移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)'/ rxsamplerge);调整定时偏移到帧原点frameOffset = hTimingOffsetToFrame (refBurst timingOffset、ssbIndex rxSampleRate);%如果帧偏移为负,表示感兴趣的帧不完整。添加%前导零到波形,以使波形与帧对齐如果FrameOffset <0 rxwaveform = [zeros(-frameoffset,size(rxwaveform,2)); rxwaveform];别的rxwaveform = rxwaveform(1 + frameoffset:结束,:);结尾%使用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 *马克斯(c0, csetNRB-c0);覆盖coreset0的百分比最小rb数量如果rxsamplege 'SIB1恢复无法继续。Coreset0资源超出'...“配置的采样率的接收波形的频率限制。”]);返回;结尾%OFDM用公共子载波间隔解调接收的波形nslot = 0;rxgrid = nrofdmdemodulate(rxwaveform,nrb,scscomman,nslot,...“SampleRate”rxSampleRate,“CarrierFrequency”, fPhaseComp);%显示OFDM资源网格,并突出最强SS块图;ImageC(ABS(rxgrid(:,:,1)));轴xyXlabel(OFDM符号的);ylabel('subcarrier');numFrames =地板(长度(rxWaveform) / rxSampleRate / 10 e - 3);sfn = sprintf (“(%…% d)”,mib.nframe,mib.nframe + numframes-1);标题([收到资源网格。系统框架号:'sfn));highlightSSBlock (refBurst、ssbIndex nrb、scsPair kFreqShift)

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

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

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

  • 配置CORESET0, Search spaces和PDCCH。

  • 盲查找Format 1_0 DCI消息。

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

MSBIDX =楼层(MIB.PDCCHCONFIGSIB1 / 16);MIB索引表13-1至13-10中的PDCCHCONFIGSIB1%4 MSB。[csetnrb,csetduration,csetoffset,csetpattern] = hcoreset0resources(msbidx,scspair,minchannelbw,k_ssb);lsbidx = mod(mib.pdcchconfigsib1,16);[ssslot,ssfirstsym,异构] = hpdcch0onitoringoccasions(lsbidx,ssbindex,scspair,csetpattern,csetduration,mib.nframe);与不同的SS块相关联的%PDCCH监视场合%不同的帧。如果在这个框架中没有监控场合,%在下一个中必须有一个。slotsPerFrame = 10 * scsCommon / 15;如果~isOccasion [ssSlot,ssFirstSym,isOccasion] = hpdcch0monitoringoccations (lsbIdx,ssbIndex,scsPair,csetPattern,csetDuration,mib.NFrame+1);ssSlot = ssSlot + slotsPerFrame;结尾FR1的百分比,UE连续两个在Type0-PDCCH CSS中监视PDCCHCORESET模式1的%槽如果csetPattern == 1 monSlotsPerPeriod = 2;别的monslotsperperiod = 1;结尾%计算子载波的基于1的下标和OFDM符号包含与检测到的SS块相关联的PDCCH0的%插槽%和后续的2帧块CSetSubCarriers = 12 *(NRB-20 * SCSSSB / SCSCommon)/ 2  -  CsetOffset * 12 +(1:CSETNRB * 12);numrxsym = size(rxgrid,2);symbolsperslot = 14;numrxslots = ceil(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.]。对于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,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 = sum(structfun(@(x)x,dcispec1_0));DISP(' - 在PDCCH中的下行链路控制信息消息搜索 - ');siRNTI = 65535;%TS 38.321表7.1-1dcicrc = true;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(:)));收到的重新级别的%归一化%在所有支持的聚合级别上循环万博1manbetxAlev = 1;尽管(ALEV <= 5)&& dcicrc〜= 0%循环SS中每个聚合级别的所有候选cIdx = 1;numCandidatesAL = pdcch.SearchSpace.NumCandidates (aLev);尽管(CIDX <= NUM​​CANDIDATESAL)&& 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、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(double(dcicw <0),pdcch.dmrssclamblingid,pdcch.rnti);维生素与= comm.EVM;pdcchevmrms = EVM(pdcchref,pdccheqsym);%显示计算的EVMDISP([' PDCCH RMS evm 'num2str(pdcchevmrms,' % 0.3 f '“%”]);DISP([' PDCCH crc: 'num2str(dcicrc)]);%突出显示与最强的SSB相对应的coreset0 / s绑定_box = @(y,x,h,w)矩形(“位置”, x+0.5 y-0.5 w h,'Edgecolor''r');bounding_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(“同步”);ylabel('quadrature')标题('均衡的PDCCH星座');m = max(abs([real(pdccheqsym(:)); imag(pdccheqsym(:))]))* 1.1;轴([ -  m m-m]);%显示包含最强PDCCH的插槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xyXlabel(OFDM符号的);ylabel('subcarrier');标题(“含有最强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 RMS EVM中的PDCCH  - 解码的PDCCH候选#1: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);%从cell ID、MIB和DCI获取PDSCH配置[pdsch, K_0] = hSIB1PDSCHConfiguration (dci、pdcch.NSizeBWP mib.DMRSTypeAPosition, csetPattern);%对于CORESET模式2,gndeb可以在下一个插槽中分配PDSCH,由DCI信号通知的插槽偏移K_0表示的%。有更多%信息,参见TS 38.214表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(:)));收到的重新级别的%归一化如果K_0 > 0显示包含相关PDSCH的槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xyXlabel(OFDM符号的);ylabel('subcarrier');标题('Slot contains PDSCH (Slot Offset K_0 = 1)');结尾使用PDSCH DM-RS%PDSCH信道估计和均衡pdschdmrsindices = 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符号导致星座严重扭曲和旋转时,将搜索带宽增加到这些值。

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,scscomman,nslot,...“SampleRate”rxSampleRate,“CarrierFrequency”fpc);%从收到的网格中提取监视插槽rxSlotGrid = rxGrid (csetSubcarriers、monSymbols:);rxslotgrid = rxslotgrid / max(abs(rxslotgrid(:)));收到的重新级别的%归一化PDSCH符号的%信道估计和均衡[hest,nvar,pdschhestinfo] = nrchannelestimate(rxslotgrid,pdschdmrsindices,pdschdmrssymbols);[pdschindices,pdschindicsinfo] = nrpdschindices(c0carrier,pdsch);[pdschrxsym,pdschhest] = nrextractresources(pdschindices,rxslotgrid,hest);pdscheqsym = nrequalizemse(pdschrxsym,pdschhest,nvar);% PDSCH解调CW = NRPDSCHDECODE(C0CARRIER,PDSCH,PDSCHEQSYM,NVAR);%初始化DL-SCH解码器DecodedLsch = nrdlschdecoder;%目标码率和传输块大小Xoh_PDSCH = 0;%TS 38.214第5.1.3.2节tcr = hmc (dci.ModCoding);NREPerPRB = pdschIndicesInfo.NREPerPRB;tbsLength = nrTBS (pdsch.Modulation pdsch.NumLayers、长度(pdsch.PRBSet) NREPerPRB, tcr, Xoh_PDSCH);decodeDLSCH。TransportBlockLength = tbsLength;decodeDLSCH。TargetCodeRate =识别;%解码DL-SCH[sib1bits, sib1CRC] = decodeDLSCH (cw、pdsch.Modulation pdsch.NumLayers, dci.RV);如果sib1CRC = = 0休息;结尾结尾%突出显示资源网格中的PDSCHsubsPdsch =双(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(“同步”);ylabel('quadrature')标题('均衡的PDSCH星座');m = max(abs([real(pdscheqsym(:)); imag(pdscheqsym(:))]))* 1.1;轴([ -  m m-m]);%计算RMS PDSCH EVM,包括标准化的PDSCH符号为任何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.3 f '“%”]);DISP([' PDSCH crc: 'num2str(sib1crc)]);如果sib1crc == 0 disp(“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. 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.情况下{的情况下“案例B”“案例C”}%fr1kssb_max = 23;情况下{“D”“E”}%fr2.kssb_max = 11;结尾如果(kssb <= kssb_max)呈现= true;别的=假;结尾结尾功能DCI = HDCI(DCISPEC,DCIBITS)%将DCI消息解析为DCI消息字段的结构字段化= 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)'统一输出',错误的);dci = cell2struct(值,字段名称(dcispec));结尾功能timingoffset = htimingoffsettoframe(突发,偏移,ssbidx,rxsamplerve)%在FFT样本中测量符号长度时,对符号进行缩放百分比长度,以说明接受取样率。非整数延迟%在过程结束时近似。scs = hSSBurstSubcarrierSpacing (burst.BlockPattern);scs ofdmInfo = nrOFDMInfo (1,“SampleRate”, rxSampleRate);SCS-SR的最小FFT大小srratio = rxsamplerge /(scs * 1e3 * 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);%0为基础整个子帧的%调整symbolspersubframe =长度(symbollengths);subframeoffset = bloor(ssbfirstsym / symbolspersubframe);samplespserubframe = sum(symbollengths);timingOffset = offset  - (子映射OFFSET * SAMPLESPSERUBFRAME);%调整剩余OFDM符号和圆形偏移,如果不是整数symbanoffset = mod(ssbfirstsym,symbolspersubframe);timingOffset = round(timingOffset  - 和(symbollengths(1:symboloffset)));结尾功能exiglightssblock(替换,ssbindex,commonnrb,scs,kfreqshift)scsssb = scs(1);scscommon = scs(2);%确定常见数字中SSB的频率次数绑定_box = @(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;ssbtailsymbol =楼层((ssbstartsymbols(ssbindex + 1)+4)/ scsratio)-1;绑定_box(ssbfreqorig,ssbheadsymbol,240 * scsratio,ssbtailsymbol-ssbheadsymbol + 1);str = sprintf('最强\n SSB: %d', ssbIndex);文本(str ssbHeadSymbol ssbFreqOrig-20 0,“字形大小”10,“颜色”'W'结尾

相关话题