主要内容

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块的信噪比,但不进行波束形成。有关单边带波束形成的更多信息,请参见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_ {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 =负载(“capturedWaveformSIB1.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模式%可以是FR1的'Case A','Case B','Case C'或者是FR1的'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突发配置。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.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)提高= 6;%信噪比增加分贝txWaveform = 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 =元素个数(config.TransmittedBlocks);结尾%从配置的突发和接收机参数中获取OFDM信息nrbssb = 20;scsssb = hssburstsubcarierspacing(refburst.blockpattern);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] = hSSBurstFrequencyCorrect (rxWaveform、refBurst.BlockPattern rxSampleRate, searchBW);disp ([“频率偏移:”num2str (freqOffset“% .0f”“赫兹”])
- 频率校正和定时估计 - 频率偏移:65 Hz

时间同步与OFDM解调

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

%创建一个参考网格,使用检测到的PSS进行时间估计。PSS的%放置在参考网格的第二个OFDM符号中,以避免%第一个OFDM符号的特殊CP长度。refrovrid = zeros([nrbssb * 12 2]);refrovrid(nrpssindices,2)= nrpss(nid2);%第二OFDM符号正确CP长度%的时间估计。这是OFDM符号之前的时间偏移%检测到的SSB由于参考网格的内容nSlot = 0;timingOffset = nrTimingEstimate (rxWaveform nrbSSB、scsSSB nSlot, refGrid,'采样率', rxSampleRate);%同步,OFDM解调和最强SS块的提取rxgrid = nrofdmdemodulate(rxwaveform(1 + timingoffset:结束,:),nrbssb,scsssb,nslot,'采样率', rxSampleRate);2:5, rxGrid = rxGrid (::);%在样本中显示定时偏移量。随着符号长度测量%在FFT样本中,缩放符号长度以考虑接收机%采样率。srratio = rxsamplerge /(scsssb * 1e3 * rxofdminfo.nfft);firstsymbollength = rxofdminfo.symbollengths(1)* srratio;str = sprintf ('与同步块的时间偏移量:%%。0F样本(%%。%%。0FF MS)\ n'、地板(log10 (rxSampleRate)) 3);流(str timingOffset + firstSymbolLength (timingOffset + firstSymbolLength) / rxSampleRate * 1 e3);
时间偏移到同步块:2200个样本(0.1432毫秒)

SSS搜索

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

%从SS/PBCH块中提取接收到的SSS符号sssindices = nrsssindices;sssrx = nrextractresources(sssindices,rxgrid);%关联接收到的SSS符号与每个可能的SSS序列SSSEST =零(1,336);为了NID1 = 0:35 ncellid = (3*NID1 + NID2);sssRef = nrSSS (ncellid);党卫军(NID1 + 1) =总和(abs(平均(sssRx。*连词(sssRef), 1)) ^ 2);结尾%绘制SSS相关图图;茎(0:335,SSSEST,'o');标题('SSS相关性(频域)');包含(“美元N_ {ID} ^{(1)} $”'口译员'“乳胶”);ylabel ('震级');轴([ -  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 = 0 (1,8);为了ibar_SSB = 0:7 refGrid = 0 ([240 4]);refGrid (dmrsIndices) = nrPBCHDMRS (ncellid ibar_SSB);[命令,巢]= nrChannelEstimate (rxGrid refGrid,'verigesswindow',[0 1]);DMRSEST(ibar_ssb + 1)= 10 * log10(平均值(abs(hest(:)。^ 2))/ nest);结尾%plot pbch dm-rs snrs图;茎(0:7 dmrsEst,'o');标题('PBCH DM-RS SNR估计');包含('$ \ 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马克斯(dmrsEst),'kx'“线宽”,2,“MarkerSize”,8);传奇([“信噪比”“$ \ overline {i} _ {ssb} $ =”+ 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解调

接收方使用单元标识从接收的网格中确定并提取与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的% 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');包含(“同步”);ylabel (“交”)标题('均衡的PBCH CONTLELATION');m = max (abs([真实(pbchEq (:));图像放大(pbchEq (:))])) * 1.1;轴([-m m -m m]);%PBCH解调pbchBits = nrPBCHDecode (pbchEq ncellid, v,巢);计算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译码

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

%应用CSIpbchbits = pbchbits。* csi;%执行BCH解码,包括速率恢复、极性解码和CRC%解码。PBCH传输块的解扰和分离来自8个附加有效载荷位的%位'trblk'还执行了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(pbchbits,pargistlenth,refburst.l_max,ncellid);%显示BCH CRCdisp (['BCH CRC:'num2str (crcBCH)]);%停止处理MIB和SIB1如果收到BCH,则收到错误如果CRCBCH DISP(“BCH CRC不是零。”);返回结尾%使用'msbidxoffset'值来设置'k_ssb'或'ssbindex'的位,具体取决于突发中SS / PBCH块数的百分比如果(refBurst.L_max==64) ssbIndex = ssbIndex + (“left-msb”)* 8);k_ssb = 0;其他的k_SSB = msbidxoffset * 16;结尾%显示SSB索引disp ([' SSB index: 'num2str (ssbIndex)]);
BCH CRC: 0 SSB index: 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公共搜索空间(CSS)是否存在CORESET,%根据TS 38.213节4.1如果~ isCORESET0Present (refBurst.BlockPattern mib.k_SSB)流('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解调。万博1manbetx接收机通过检测到的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 = [0 (-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);RB中的%最小带宽,包括在接收波形中的Coreset0。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,...'采样率'rxSampleRate,'载频',fphasecomp);%显示OFDM资源网格,并突出最强SS块图;显示亮度图像(abs (rxGrid (:,: 1)));轴XY.包含(OFDM符号的);ylabel (副载波的);numframes =楼层(长度(rxwaveform)/ rxsamplerge / 10e-3);sfns = sprintf('(%d ...%d)'mib。NFrame mib.NFrame + numFrames-1);标题(['收到的资源网格。系统框号:'SFNS]);exiglightssblock(替换,SSBindex,NRB,SCSPAIR,KFREQSHIFT)

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

要盲目搜索Coreset / SS中的系统信息DCI消息,接收器执行以下步骤:

  • CDCCH监测场合的确定与控制信息的OFDM资源网格的提取。

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

  • 盲目搜索格式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块可以在%不同的帧。如果在这个框架中没有监控场合,下一个肯定有一个。slotsPerFrame = 10 * scsCommon / 15;如果〜Isoccasion [SSSLOT,SSFirstsym,Isoccasch] = HPDCCH0MonitoringClosions(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参数。根据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.SlotPeriodAndOffset (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 = true;mSlot = 0;%循环所有监控槽位(mSlot < length(monSlots)) && dciCRC ~= 0 c0Carrier. (monSlots < length(monSlots))NSlot = monSlots (mSlot + 1);如果monSlotsPerPeriod = = 2如果mod(mslot,2)pdcch.searchspace.slotpeiondandOffset(2)= monslots(2);其他的pdcch.searchspace.slotpeiondandoffset(2)= monslots(1);结尾结尾%根据TS 38.213节10.1获得PDCCH考生[PDCCHIND,PDCCHDMRSSYM,PDCCHDMRSIND] = NRPDCCHSPACE(C0Carrier,PDCCH);rxslotgrid = rxmonslotgrid(:,(1:symbolsperslot)+ symbolsperslot * mslot,:);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的信道估计[命令,据nVar pdcchHestInfo] = nrChannelEstimate (rxSlotGrid, pdcchDmrsInd {aLev} (:, cIdx) pdcchDmrsSym {aLev} (:, cIdx));PDCCH符号的均衡和解调[pdcchRxSym, pdcchHest] = nrExtractResources (pdcchInd {aLev} (:, cIdx) rxSlotGrid,命令);据nVar pdcchEqSym = nrEqualizeMMSE (pdcchRxSym pdcchHest);dcicw = nrPDCCHDecode (pdcchEqSym pdcch.DMRSScramblingID pdcch.RNTI,据nVar);DCI消息解码polarListLength = 8;[dcibits,dcicrc] = nrdcidecode(dcicw,numdibits,polarlistlength,sirnti);如果dcicrc == 0 disp([' Decoded PDCCH candidate #'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)]);%突出CORESET0/SS对应最强SSBbounding_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');包含(“同步”);ylabel (“交”)标题(“均衡PDCCH星座”);m = max (abs([真实(pdcchEqSym (:));图像放大(pdcchEqSym (:))])) * 1.1;轴([-m m -m m]);%显示包含最强PDCCH槽的OFDM网格图;ImageC(ABS(rxslotgrid(:,:,1))));轴XY.包含(OFDM符号的);ylabel (副载波的);标题(“含有最强PDCCH的槽”);%在资源网格中突出PDCCHsubsPdcch = nrPDCCHSpace (c0Carrier pdcch,'indexStyle'“潜艇”);subsPdcch =双(subsPdcch {aLev} (:,:, cIdx));x = min (subsPdcch (:, 2)) 1;X = max (subsPdcch (:, 2)) - X;y = min (subsPdcch (: 1));Y = max (subsPdcch (: 1)) - Y + 1;bounding_box (y, x, y, x);str = sprintf (' PDCCH \n聚合级别:%d\n Candidate: %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的提取

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

  • 使用cell 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表示。更多的表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))));轴XY.包含(OFDM符号的);ylabel (副载波的);标题('包含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*freqSearch%OFDM解调接收波形nSlot = 0;rxgrid = nrofdmdemodulate(rxwaveform,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解调连续波= nrPDSCHDecode (c0Carrier pdsch pdschEqSym,据nVar);%初始化DL-SCH解码器decodeDLSCH = nrDLSCHDecoder;%目标码率和传输块大小xoh_pdsch = 0;% TS 38.214章节5.1.3.2TCR = 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] = decodeDLSCH (cw、pdsch.Modulation pdsch.NumLayers, dci.RV);如果sib1CRC = = 0打破结尾结尾%在资源网格中突出PDSCHsubspdsch = double(nrpdschindices(c0carrier,pdsch,'indexStyle''下标'));x = min(亚副本(:,2)) -  1;x = max(subspdsch(:,2)) -  x;y = min(亚副本(:1));Y = MAX(亚副本(:,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');包含(“同步”);ylabel (“交”)标题('均衡的PDSCH星座');m = max (abs([真实(pdschEqSym (:));图像放大(pdschEqSym (:))])) * 1.1;轴([-m 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.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. 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。“NR;媒体访问控制(MAC)协议规范。”第三代合作伙伴项目;技术规范无线电接入网

本地函数

函数现在= isCORESET0Present (ssbBlockPattern kSSB)开关ssbBlockPattern情况下的情况下“案例B”'案例c'% FR1kssb_max = 23;情况下'案例d'“案例e”% FR2kssb_max = 11;结尾如果(kSSB <= kssb_max) present = true;其他的= false;结尾结尾函数dci = hDCI (dcispec dcibits)%将DCI消息解析为DCI消息字段的结构fieldsizes = structfun (@ (x) x, dcispec);Fieldbits2dec = @(x,y)bin2dec(char(x(y(1):y(2))) +' 0 '));FieldBitranges = [[0;Cumsum(Fieldsize(1:结束-1))] + 1 umsum(字段化)];FieldBitranges = Num2Cell(现场跨阳,2);值= Cellfun(@(x)fieldbits2dec(dcibits。',x),fieldbitranges,“UniformOutput”、假);dci = cell2struct(值,字段名(dcispec));结尾函数timingoffset = htimingoffsettoframe(突发,偏移,ssbidx,rxsamplerve)在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);调整定时偏移,使接收的网格从%帧头I.E.调整定时偏移以获得差异%最强SSB的第一个符号,和帧的开始burststartsymbols = hssburststartsymbols(burst.blockpattern,burst.l_max);%启动SSB数字中的符号ssbFirstSym = burstStartSymbols (ssbIdx + 1);%基于%调整整个子帧symbolsPerSubframe =长度(symbolLengths);subframeOffset =地板(ssbFirstSym / symbolsPerSubframe);samplesPerSubframe =总和(symbolLengths);timinggoffset = offset - (subframeOffset*samplesPerSubframe);%如果不是整数,调整剩余的OFDM符号和圆偏移量symbolOffset =国防部(ssbFirstSym symbolsPerSubframe);timinggoffset = round(timinggoffset - sum(symbollength (1:symbolOffset)));结尾函数exiglightssblock(替换,ssbindex,commonnrb,scs,kfreqshift)scsssb = scs(1);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 /(SCSCOMMON * 1E3);%在一般命理学中确定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 '结尾

相关的话题