主要内容

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、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/PBCH块的子载波间隔的SS块模式(情况A…E)。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解扰的参数。这些参数取决于TS 38.211第7.3.3.1节和第7.4.1.4.1节中描述的SS/PBCH块索引[3.].TS 38.213第4.1节[5.]描述每种情况下突发中的SS/PBCH块集。UE知道$L_{max}$基于SS区块模式和NR操作波段。

loadFromFile=0;%设置为1以加载捕获的波形如果loadFromFile负载捕获波形rx =负载(“capturedWaveformSIB1.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兆赫%在接收端配置必要的突发参数。单边带模式%FR1可以是‘案例A’、‘案例B’、‘案例C’或‘案例D’、‘案例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)信息;%通过提高一个SSB的信噪比和%相关SIB1 PDCCH和PDSCHssbIdx = 0;要提升SSB的索引(基于0)升压=6;%信噪比增加分贝txWaveform=hSIB1Boost(txWaveform、wavegenConfig、waveInfo、ssbIdx、boost);%在波形中加入白色高斯噪声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(配置TransmittedBlocks);结束%从配置的突发和接收器参数中获取OFDM信息nrbSSB=20;scsSSB=HSSburstSubcarriersSpacing(参考突发.块模式);rxOfdmInfo=nrOFDMInfo(nrbSSB,scsSSB,“采样器”, rxSampleRate);%显示接收波形的频谱图图:nfft=rxOfdmInfo.nfft;频谱图(Rx波形(:,1),一(nfft,1),0,nfft,“居中”rxSampleRate,“桠溪”,“MinThreshold”,-130); 头衔(“接收波形的谱图”)

PSS搜索和频率偏差校正

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

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

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

  • 通过将SSB中每个OFDM符号的循环前缀与OFDM符号的相应有用部分相关联,估计半个子载波以下的频率偏移。此相关的相位与波形中的频率偏移成比例。

disp (——频率校正和时序估计——)%指定频率偏移搜索带宽,单位为kHzsearchBW=6*scsSSB;[RX波形,频偏,NID2]=hSSBurstFrequencyCorrect(RX波形,refBurst.BlockPattern,RX采样,searchBW);显示(['频率偏移:'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符号的定时偏移%由于参考网格的内容而检测到的SSBnSlot = 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(rxSampleRate))-3);fprintf(str,计时偏移+首符号长度,(计时偏移+首符号长度)/rxSampleRate*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)=和(平均值(sssRx.*conj(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,最大值(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序列并执行信道和噪声估计。具有最佳SNR的PBCH DM-RS的索引确定PBCH加扰初始化所需的SS/PBCH块索引的LSB。

%计算PBCH DM-RS指数dmrsIndices = nrPBCHDMRSIndices (ncellid);%使用DM-RS符号对每个可能的DM-RS进行信道估计%序列,估计信噪比dmrsEst = 0 (1,8);ibar_SSB=0:7 refGrid=0([240 4]);refGrid(dmrsIndices)=nrPBCHDMRS(ncellid,ibar_SSB);[hest,nest]=nrChannelEstimate(rxGrid,refGrid,“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持有;绘图(ibar_SSB,最大值(DMRSET),“kx”,“线宽”2,“MarkerSize”,8);图例([“信噪比”“$\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=最大值(绝对值([真实值(:);图像([真实值(:))))*1.1;轴([-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:“System Frame Number”的4个lsb% 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+(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)commoncss=[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);%检查是否存在类型0 PDCCH公共搜索空间(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);%如果帧偏移为负,则感兴趣的帧不完整。添加%前导零到波形,以使波形与帧对齐如果帧偏移<0 rxWaveform=[零(-frameOffset,大小(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);%RB中的最小带宽,包括接收波形中的CORESET0。c0 = csetFreqOffset + 10 * scsSSB / scsCommon;% CORESET载波中心的频率偏移nrb = 2 *马克斯(c0, csetNRB-c0);%覆盖芯组0的最小RB数量如果rxSampleRate < nrb*12*scsCommon*1e3显示([SIB1无法继续恢复。CORESET0资源超出...'已配置采样率的接收波形的频率限制。']);返回;结束OFDM解调共子载波间距接收波形的百分比nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,nrb, scsCommon, nSlot,...“采样器”rxSampleRate,“载波频率”, fPhaseComp);%显示OFDM资源网格,并突出最强SS块图形imagesc(abs(rxGrid(:,:,1));轴xy包含(OFDM符号的);ylabel (“副载波”);numFrames=floor(长度(rxWaveform)/rxSampleRate/10e-3);sfns=sprintf(“(%d..%d)”mib。NFrame mib.NFrame + numFrames-1);标题([收到资源网格。系统框架号:'sfn));highlightSSBlock (refBurst、ssbIndex nrb、scsPair kFreqShift)

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

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

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

  • 配置CORESET0, Search spaces和PDCCH。

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

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

msbIdx=楼层(mib.PDCCHConfigSIB1/16);%4 MIB索引表13-1至13-10中PDCCHConfigSIB1的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]=HPDCCH0监视事件(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 =大小(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 mib, scsPair ncellid, minChannelBW);%配置载波跨BWP (CORESET0)c0Carrier=nrCarrierConfig;c0Carrier.subcarrierspacking=mib.subcarrierspackingCommon;c0Carrier.NStartGrid=pdcch.NStartBWP;c0Carrier.NSizeGrid=pdcch.NSizeBWP;c0Carrier.NSlot=pdcch.SearchSpace.slotPeriodOffset(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<长度(monslot))&&dciCRC~=0 c0Carrier.NSlot=monslot(mSlot+1);如果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符号的均衡和解调[pdcchxsym,pdcchHest]=nExtractResources(pdcchInd{aLev}(:,cIdx),rxSlotGrid,hest);pdcchEqSym=nRequalizemse(pdcchxsym,pdcchHest,nVar);dcicw=nrPDCCHDecode(pdcchEqSym,pdcch.dmrscrasblingid,pdcch.RNTI,nVar);%DCI报文解码极性长度=8;[dcibits,dciCRC]=nrDCIDecode(dcicw,numDCIBits,极性长度,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 EVMpdccref=nrpdch(双精度(dcicw<0),pdcch.dmrscramblingid,pdcch.RNTI);evm=通信evm;pdcchEVMrms=evm(pdcchRef,pdcchEqSym);显示计算的EVMdisp ([' PDCCH RMS evm 'num2str (pdcchEVMrms' % 0.3 f ')“%”]); disp([“PDCCH CRC:”num2str(dciCRC)];%突出显示对应于最强SSB的CORESET0/SSbounding_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 (“CORESET0/SS”);文本(monSymbols (1) + ssFirstSym-7 csetSubcarriers(1) -20年,0,str,“字体大小”10“颜色”,' w ')如果dciCRC disp(“DCI解码失败。”);返回结束%均衡化后收到PDCCH星座图图;绘图(pdcchEqSym,“o”);xlabel(“同步”);ylabel (“正交”)标题(“均衡PDCCH星座”); m=最大值(绝对值([真实值(pdcchEqSym(:);图像(pdcchEqSym(:)]))*1.1;轴([-m-m]);%显示包含最强PDCCH槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xy包含(OFDM符号的);ylabel (“副载波”);标题(“含有最强PDCCH的槽”);%突出PDCCH在资源网格中的应用subsPdcch=nrPDCCHSpace(c0Carrier,pdcch,“IndexStyle”,“潜艇”);subsPdcch=double(subsPdcch{aLev}(:,:,cIdx));x=min(subsPdcch(:,2))-1;x=max(subsPdcch(:,2))-x;y=min(subsPdcch(:,1));y=max(subsPdcch(:,1))-y+1;边界盒(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);%从cell ID、MIB和DCI获取PDSCH配置[pdsch,K_0]=hSIB1PDSCHConfiguration(dci,pdcch.NSizeBWP,mib.DMRSTypeAPosition,csetPattern);%对于CORESET模式2,gNodeB可以在下一个插槽中分配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 (:)));所接收RE量级的正规化如果K_0 > 0显示包含相关PDSCH的槽的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xy包含(OFDM符号的);ylabel (“副载波”);标题('Slot contains PDSCH (Slot Offset K_0 = 1)');结束% PDSCH信道估计和均衡使用PDSCH DM-RSPDSCHSHRSICES=NRPDSCHSHRSICES(C0载波,pdsch);PDSCHSDMRSSYMBOLS=NRPDSCHSHRS(C0载波,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+1e3*频率搜索%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(C0载波、pdsch、PDSCHQSYM、nVar);%初始化DL-SCH解码器decodeDLSCH=nrdlsch解码器;%目标码率和传输块大小Xoh_-PDSCH=0;% TS 38.214章节5.1.3.2tcr = 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(子序列(:,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=最大值(绝对值([real(pdschEqSym(:);imag(pdschEqSym(:))))*1.1;轴([-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. 3GPP TS 38.212。“NR;多路复用和信道编码。”第三代合作项目;技术规范组无线接入网

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

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

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

本地函数

函数present=isCORESET0Present(ssbBlockPattern,kSSB)开关ssbblock模式情况下{的情况下,“案例B”,“案例C”}%FR1kssb_max=23;情况下{“案例D”,“案例E”}%FR2kssb_max=11;结束如果(kSSB<=kSSB_max)当前=真实;其他的= false;结束结束函数dci=hDCI(dcispec、dcibits)%将DCI消息解析为DCI消息字段的结构字段大小=structfun(@(x)x,dcispec);fieldbits2dec=@(x,y)bin2dec(char(x(y(1):y(2))+'0'));fieldbitranges=[[0;总和(fieldsizes(1:end-1))]+1总和(fieldsizes)];fieldbitranges=num2cell(fieldbitranges,2);values=cellfun(@(x)fieldbits2dec(dcibits.),x),fieldbitranges,“UniformOutput”、假);dci = cell2struct(值,字段名(dcispec));结束函数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);%基于0的%调整整个子帧SYMBOLPersubFrame=长度(symbolLengths);子帧偏移=地板(ssbFirstSym/SYMBOLPersubFrame);SamplePersubFrame=总和(symbolLengths);timingOffset=偏移-(子帧偏移*SamplePersubFrame);%如果不是整数,调整剩余的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 ')结束

相关的话题