主要内容

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和携带SIB1的PDSCH的同步信号突发。发射机可以提高一个SS块的信噪比,但不进行波束形成。有关单边带波束形成的更多信息,请参见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 =负载('捕获WaveFormsib1.mat');rxWaveform = rx.waveform;%配置接收器采样率(样本/秒)rxSampleRate = rx.sampleRate;%符号相位补偿频率。指定运营商中心%频率或设置为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%在接收端配置必要的突发参数。单边带模式%可以是“案例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)配置。EnableSIB1 = 1;%设置为0以禁用SIB1%设置所需的NR频带的最小信道带宽% configure CORESET0 in FR1(参见TS 38.101-1表5.3.5-1)配置。MinChannelBW = 5;% 5, 10, 40 MHz%配置并生成一个包含SS突发和SIB1的波形wavegenConfig = hSIB1WaveformConfiguration(配置);[txWaveform, waveInfo] = nrWaveformGenerator (wavegenConfig);txOfdmInfo = waveInfo.ResourceGrids(1)信息;%通过提高一个SSB的SNR来引入波束成形增益%相关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 = 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,“桠溪”“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”“赫兹”])
--频率校正和定时估计频率偏移:65 Hz

时间同步与OFDM解调

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

%使用检测到的PSS创建用于定时估计的参考网格。PSS.%放置在参考网格的第二个OFDM符号中,以避免%特殊CP长度的第一个OFDM符号。refGrid = 0 ([nrbSSB*12 2]); / /refGrid (nrPSSIndices 2) = nrPSS (NID2);%表示正确CP长度的第二OFDM符号%时序估计。这是之前到OFDM符号的时序偏移%检测到的SSB由于参考网格的内容nSlot = 0;timingOffset = nrTimingEstimate (rxWaveform nrbSSB、scsSSB nSlot, refGrid,“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党卫军,“哦”); 头衔(“SSS相关性(频域)”);Xlabel('$ n_ {id} ^ {(1)} $'“口译员”“乳胶”);ylabel (“级”);轴([-1 336 0 max(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进行信道估计%序列,估计信噪比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信噪比图;茎(0:7 dmrsEst,“哦”); 头衔(“PBCH DM-RS信噪比估计”);Xlabel(“美元\眉题{我}_{单边带}$”“口译员”“乳胶”);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);传奇([“信噪比”" $ \眉题{我}_{单边带}$ = "+ 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“哦”);Xlabel(“同步”);ylabel ('quadrature')标题(“均衡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);evm=通信evm;pbchEVMrms=evm(pbchRef,pbchEq);显示计算的EVMDISP([' PBCH RMS evm 'num2str(pbchevmrms,“%0.3f”“%”]);
-  PBCH解调和BCH解码 -  PBCH RMS EVM:8.687%

BCH译码

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

%应用CSIpbchBits = 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:半帧数%A+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(多比特、极长、参考脉冲串、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 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% transport block 'trblk'是RRC消息bch - bch - message,由前导0位的%,然后是MIB对应的23位mib。NFrame = bi2de ([trblk (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 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的带宽对包含检测到SS块的帧进行OFDM解调。金宝app接收机通过检测到的SSB位置的偏移量和TS 38.213第13节规定的带宽来确定通用数字学中的CORESET0频率资源[表13-1到13-10]。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 = e3 k_SSB * scsKSSB * 1;rxWaveform = rxWaveform。* exp(1 * 2 *π* kFreqShift *(0:长度(rxWaveform) 1)”/ rxSampleRate);调整定时偏移到帧原点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);% 4 MIB中PDCCHConfigSIB1的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数量如果rxSampleRate < nrb*12*scsCommon*1e3显示([SIB1无法继续恢复。CORESET0资源超出...“配置的采样率的接收波形的频率限制。”]);返回;结束OFDM解调共子载波间距接收波形的百分比nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,nrb, scsCommon, nSlot,...“SampleRate”rxSampleRate,“CarrierFrequency”,fphasecop);%显示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);标题(['已接收资源网格。系统帧号:'sfns),;HighlightsBlock(参考突发、ssbIndex、nrb、scsPair、kFreqShift)

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

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

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

  • CORESET0、搜索空间和PDCCH的配置。

  • 盲查找Format 1_0 DCI消息。

如TS 38.213表13-11和13-12中所述,接收机通过时隙和OFDM符号从检测到的SS块的位置偏移来确定PDCCH监控时机[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 isOccasion] = hPDCCH0MonitoringOccasions (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连续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 = 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参数。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 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通过使用SI-RNTI监视每个聚合级别的所有PDCCH候选项来盲译码接收的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 = true;mSlot = 0;%循环所有监控槽位尽管(mslot 如果monSlotsPerPeriod = = 2如果mod(mSlot,2) pdcch.SearchSpace.SlotPeriodAndOffset(2) = monSlots(2);别的pdcch.SearchSpace.SlotPeriodAndOffset (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量级的正规化%在所有支持的聚合级别上循环金宝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、numDCIBits 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(double(dcicw <0),pdcch.dmrssclamblingid,pdcch.rnti);维生素与= comm.EVM;pdcchevmrms = EVM(pdcchref,pdccheqsym);显示计算的EVMDISP([' PDCCH RMS evm 'num2str (pdcchEVMrms“%0.3f”“%”]);DISP([' PDCCH crc: 'num2str(dcicrc)]);%突出显示与最强的SSB相对应的coreset0 / sbounding_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,“哦”);Xlabel(“同步”);ylabel ('quadrature')标题(“均衡PDCCH星座”);m = max(abs([real(pdccheqsym(:)); imag(pdccheqsym(:))]))* 1.1;轴([ -  m m-m]);%显示包含最强PDCCH槽的OFDM网格图形imagesc(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);孟符号=孟符号+符号偏移量;rxSlotGrid=rxGrid(csetSubcarriers,monSymbols,:);rxSlotGrid=rxSlotGrid/max(abs(rxSlotGrid(:)));所接收RE量级的正规化如果K_0 > 0显示包含相关PDSCH的槽的OFDM网格图形imagesc(abs(rxSlotGrid(:,:,1));轴xyXlabel(OFDM符号的);ylabel ('subcarrier'); 头衔('包含PDSCH的插槽(插槽偏移量K_0=1)');结束% PDSCH信道估计和均衡使用PDSCH DM-RSpdschdmrsindices = nrpdschdmrsindices(c0carrier,pdsch);PDSCHDMRSSYMBOLS = NRPDSCHDMRS(C0CARRIER,PDSCH);
-  PDSCH解调和DL-SCH解码 -

为了补偿符号相位补偿和信道估计中的载波频率不匹配的负效应,接收器OFDM在周围的搜索带宽上通过一组载波频率解调波形fPhaseComp. 当DL-SCH解码成功或达到最后一个频率时,搜索结束。对于公共子载波间隔15、30、60和120 kHz,产生相等符号相位补偿的最小搜索带宽分别为1920、3840、7680和15360 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 + 1E3 * FreqsearchOFDM解调接收波形的百分比nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,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.2tcr=hMCS(dci.ModCoding);NREPerPRB=pdschIndicesInfo.NREPerPRB;tbsLength=nrTBS(pdsch调制、pdsch数层、长度(pdsch PRBSet)、NREPerPRB、tcr、Xoh_pdsch);decodeDLSCH.TransportBlockLength=TBSLLength;decodeDLSCH.TargetCodeRate=tcr;%解码DL-SCH[sib1bits, sib1CRC] = decodeDLSCH (cw、pdsch.Modulation pdsch.NumLayers, dci.RV);如果sib1CRC = = 0休息;结束结束%突出显示资源网格中的PDSCH子DSCH=双(NRPDSCH)条件(C0载波、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“哦”);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、双(cw {1} < 0));维生素与= comm.EVM;pdschEVMrms =维生素(pdschRef pdschEqSym /√(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。”天然橡胶;基站(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;别的= false;结束结束函数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)“UniformOutput”、假);dci = cell2struct(值,字段名(dcispec));结束函数timingOffset = hTimingOffsetToFrame(破裂,抵消,ssbIdx rxSampleRate)%在FFT样本中测量符号长度时,对符号进行缩放%用于说明接收器采样率的长度。非整数延迟%在过程结束时近似。scs = hSSBurstSubcarrierSpacing (burst.BlockPattern);scs ofdmInfo = nrOFDMInfo (1,“SampleRate”, 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);%0为基础%调整整个子帧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.5 y-0.5 w 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 '结束

相关的话题