主要内容

NR Cell搜索、MIB和SIB1恢复

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

简介

用户终端在与网络通信之前,必须执行小区搜索和选择过程,并获取初始的系统信息。该过程的第一步是获取帧同步、找出单元标识并解码MIB和SIB1。本示例展示如何使用5G工具箱执行这些步骤。

您可以将此示例与捕获的I/Q样本波形一起使用,也可以使用以下命令生成包含同步信号(SS)突发和SIB1的本地波形nrWaveformGenerator.对于局部生成的波形,示例执行以下步骤:

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

  • 情况下:对波形进行加性高斯白噪声(AWGN)处理。

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

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

接收器的配置

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

  • 用于解调接收波形的波形采样率。

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

  • 最小信道带宽确定CORESET 0频率资源。TS 38.101-1表5.3.5-1 [1]表示每个NR频段的信道带宽。

  • SS块模式(Case 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解扰。这些参数取决于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_{马克斯}$基于SS块模式和NR工作频带。

loadFromFile = 0;%设置为1以加载捕获的波形如果loadFromFile负载捕获波形百分比Rx =负载(“capturedWaveformSIB1.mat”);rx波形= rx.波形;设置接收器采样率(采样次数/秒)rxSampleRate = rx.sampleRate;符号相位补偿频率。指定运营商中心%频率或设置为0禁用符号相位补偿fPhaseComp = rx.fPhaseComp;%载波中心频率(Hz)%设置需要的NR频段最小信道带宽在FR1中配置CORESET 0(参见TS 38.101-1表5.3.5-1)minChannelBW = rx.minChannelBW;% 5,10,40 MHz在接收端配置必要的突发参数。SSB模式%可以是FR1的'Case A','Case B','Case C'或'Case D','Case E'% FR2。FR1和64的最大块数L_max可以是4或8% FR2。refBurst。BlockPattern = rx.ssbBlockPattern;refBurst。L_max = rx.L_max;其他的%生成包含SS突发和SIB1的波形配置单元标识Config = struct();配置。NCellID = 102;%配置SS突发配置。BlockPattern =“案例B”% FR1: '情况A','情况B','情况C'。FR2: 'Case D','Case E'配置。TransmittedBlocks = ones(1,8);SS块传输的百分比位图配置。SubcarrierSpacingCommon = 15;% SIB1子载波间距,kHz (FR1为15或30)。FR2为60或120)配置。EnableSIB1 = 1;%设置为0,禁用SIB1%设置需要的NR频段最小信道带宽在FR1中配置CORESET0(参见TS 38.101-1表5.3.5-1)配置。MinChannelBW = 5;% 5,10,40 MHz%通过提高功率引入波束形成增益(因此一个SSB的% SNR)和相关的SIB1 pdch和PDSCHBoost = 6;%信噪比提高分贝配置。Power = 0 (size(config.TransmittedBlocks));config.Power(1) = boost;%提升第一个SSB配置并生成包含SS突发和SIB1的波形wavegenConfig = hSIB1WaveformConfiguration(config);[tx波形,waveInfo] = nrWaveformGenerator(wavegenConfig);txOfdmInfo = waveInfo.ResourceGrids(1).Info;在波形中添加高斯白噪声。注意只有信噪比%适用于提升的SSB / SIB1rng (“默认”);重置随机数生成器SNRdB = 20;AWGN的信噪比rx波形= awgn(tx波形,SNRdB-boost,-10*log10(double(txOfdmInfo.Nfft)));配置接收器%抽样率rxSampleRate = txOfdmInfo.SampleRate;符号相位补偿频率(Hz)。这个函数% nrWaveformGenerator不应用符号相位补偿%生成的波形。fPhaseComp = 0;%载波中心频率(Hz)最小信道带宽(MHz)minChannelBW = config.MinChannelBW;在接收端配置必要的突发参数refBurst。BlockPattern = config.BlockPattern;refBurst。L_max = number (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符号的相应有用部分相关联,估计半子载波以下的频率偏移。这种相关性的相位与波形中的频率偏移成正比。

disp (——频率校正和定时估计——指定频偏搜索带宽,单位为kHzsearchBW = 6*scsSSB;[rx波形,freqOffset,NID2] = hSSBurstFrequencyCorrect(rx波形,refBurst.BlockPattern,rxSampleRate,searchBW);disp (['频率偏移:'num2str (freqOffset“% .0f”“赫兹”])
——频率校正和定时估计——频偏:65 Hz

时间同步和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(rx波形,nrbSSB,scsSSB,nSlot,refGrid,“SampleRate”, rxSampleRate);同步,OFDM解调,提取最强SS块rxGrid = nrOFDMDemodulate(rx波形(1+ timinggoffset:end,:),nrbSSB,scsSSB,nSlot,“SampleRate”, rxSampleRate);rxGrid = rxGrid(:,2:5,:);%显示样本中的时间偏移量。当测量符号长度时%在FFT样本中,缩放符号长度以考虑接收方%抽样率。srRatio = rxSampleRate/(scsSSB*1e3*rxOfdmInfo.Nfft);firstSymbolLength = rxofdminfo . symbollength (1)*srRatio;STR = sprintf('到同步块的时间偏移:%%。0f个样本(%%.%.)0ff ms) \n'、地板(log10 (rxSampleRate)) 3);流(str timingOffset + firstSymbolLength (timingOffset + firstSymbolLength) / rxSampleRate * 1 e3);
同步块的时间偏移:2200个样本(0.1432 ms)

SSS搜索

接收方从接收到的网格中提取与SSS相关的资源元素,并将它们与本地生成的每个可能的SSS序列相关联。最强的PSS和SSS序列的指数组合给出了物理层细胞的身份,这是PBCH DM-RS和PBCH处理所必需的。

从SS/PBCH块中提取接收到的SSS符号sssIndices = nrSSSIndices;sssRx = nrExtractResources(sssIndices,rxGrid);将接收到的SSS符号与每个可能的SSS序列相关联ss本= 0 (1336);NID1 = 0:335 ncellid = (3*NID1) + NID2;sssRef = nrSSS(ncellid);党卫军(NID1 + 1) =总和(abs(平均(sssRx。*连词(sssRef), 1)) ^ 2);结束绘制SSS相关性图;茎(0:335党卫军,“o”);标题(“SSS相关性(频域)”);包含(“美元N_ {ID} ^{(1)} $”“翻译”“乳胶”);ylabel (“级”);轴([-1 336 0 max(ss最深)*1.1]);通过找到最强的相关性来确定NID1NID1 = find(ss最深层==max(ss最深层))- 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块索引的lsb。

计算PBCH DM-RS指数dmrsIndices = nrPBCHDMRSIndices(ncellid);%使用DM-RS符号对每个可能的DM-RS进行信道估计%序列,并估计信噪比dmr本= 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))/巢);结束% Plot PBCH DM-RS信噪比图;茎(0:7 dmrsEst,“o”);标题(“PBCH DM-RS信噪比估算”);包含(“美元\眉题{我}_{单边带}$”“翻译”“乳胶”);xticks (0:7);ylabel (“估计信噪比(dB)”);轴([-1 8 min(dmrse)-1 max(dmrse)+1]);记录最高信噪比的ibar_SSBibar_SSB = find(dmrse ==max(dmrse)) - 1;绘制选定的ibar_SSB持有;情节(ibar_SSB马克斯(dmrsEst),“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);[hest,nest,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配置'v'用于PBCH置乱当L_max=4时,% 'v'也是SS/PBCH块索引的2个lsb% lsb for L_max=8或64。如果refBurst。L_max == 4 v = mod(ibar_SSB,4);其他的v = ibar_SSB;结束ssbIndex = v;% PBCH均衡和CSI计算pbchHest = nrExtractResources(pbchIndices,hest);[pbchEq,csi] = nrEqualizeMMSE(pbchRx, pbchest,nest);Qm = pbchIndicesInfo。G / pbchIndicesInfo.Gd;csi = repmat(csi.',Qm,1);Csi =重塑(Csi,[],1);均衡后接收PBCH星座的百分比图;情节(pbchEq“o”);包含(“同步”);ylabel (“交”)标题(“均衡PBCH星座”);m = max(abs([real(pbchEq(:)));imag(pbchEq(:)))) * 1.1;轴([-m m -m m]);% PBCH解调pbchBits = nrPBCHDecode(pbchEq,ncellid,v,nest);计算RMS PBCH EVMpbchRef = nrPBCH(pbchBits<0,ncellid,v);evm = com . evm;pbchEVMrms = evm(pbchRef,pbchEq);显示计算的EVMdisp ([“PBCH RMS evm:”num2str (pbchEVMrms' % 0.3 f '“%”]);
—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'从8个额外的有效负载位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的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块数量的%如果(refbreak . l_max ==64) ssbIndex = ssbIndex + (bit2int(msbidxoffset,3) * 8);k_SSB = 0;其他的k_SSB = msbidxoffset * 16;结束%显示SSB索引disp ([“SSB指数:”num2str (ssbIndex)]);
BCH CRC: 0 SSB index: 0

解析MIB和BCH

示例将24个解码后的BCH传输块位解析为一个MIB消息,并创建initialSystemInfo结构的初始系统信息。这个过程包括重构10位系统帧数(SFN)。NFrameMIB中的6个msb和PBCH负载位中的4个lsb。它还包括合并子载波偏移的MSBk_SSB在每次爆发L_max=4或8 SS/PBCH块的情况下,从PBCH有效载荷位。

将最后23位解码后的BCH传输块解析为MIB消息。BCH传输块'trblk'是RRC消息BCH- BCH- message,%,由前导0位和23位组成,与MIB对应。的%前导位表示传输的消息类型(MIB或空序列)。mib = fromBits(mib,trblk(2:end));不解析前导位创建一组以解码后的第7位为信号的子载波间距FR1 (L_max=4或8)和FR2 (L_max=64)的set是不同的。如果(refBurst.L_max==64) commonSCSs = [60 120];其他的commonSCSs = [15 30];结束initialSystemInfo = struct();initialSystemInfo。NFrame = mib。systemFrameNumber*2^4 + bit2int(sfn4lsb,4);initialSystemInfo。SubcarrierSpacingCommon = commonSCSs(mib. SubcarrierSpacingCommon = commonSCSs。subCarrierSpacingCommon + 1);initialSystemInfo。k_SSB= k_SSB + mib.ssb_SubcarrierOffset; initialSystemInfo.DMRSTypeAPosition = 2 + mib.dmrs_TypeA_Position; initialSystemInfo.PDCCHConfigSIB1 = info(mib.pdcch_ConfigSIB1); initialSystemInfo.CellBarred = mib.cellBarred; initialSystemInfo.IntraFreqReselection = mib.intraFreqReselection;显示MIB结构disp (' BCH/MIB内容:') disp (initialSystemInfo);检查Type0-PDCCH公共搜索空间(CSS)的CORESET是否存在,%根据TS 38.213章节4.1如果~ isCORESET0Present (refBurst.BlockPattern initialSystemInfo.k_SSB)流('CORESET 0不存在(k_SSB > k_SSB_max).\n');返回结束
BCH/MIB Content: NFrame: 0 SubcarrierSpacingCommon: 15 k_SSB: 0 dmrstypeposition: 3 PDCCHConfigSIB1: [1x1 struct] cellblocked: 0 IntraFreqReselection: 0

全带宽OFDM解调

MIB恢复后,接收端使用公共子载波间距和支持CORESET 0的带宽对检测到的SS块进行OFDM解调。万博1manbetx接收器通过从检测到的SSB位置的偏移量和TS 38.213节中指定的带宽来确定共同数字逻辑中的CORESET 0频率资源[5].频率校正过程使OFDM资源网格的中心与SS突发的中心频率对齐。但是,这些中心并不一定与CORESET 0的中心频率对齐。该图显示了SSB、CORESET 0频率资源和相关PDCCH监测场合之间的关系。

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

如果(refBurst.L_max==64) scsKSSB = initialSystemInfo.SubcarrierSpacingCommon;其他的scsKSSB = 15;结束k_SSB = initialSystemInfo.k_SSB;kFreqShift = k_SSB*scsKSSB*1e3;rx波形= rx波形.*exp(1i*2*pi*kFreqShift*(0:length(rx波形)-1)'/rxSampleRate);%调整定时偏移到帧原点frameOffset = htiminggoffsettoframe (refBurst, timinggoffset,ssbIndex,rxSampleRate);如果帧偏移量为负,则感兴趣的帧是不完整的。添加%波形的前导零以使波形与帧对齐如果frameOffset < 0 rx波形= [0 (-frameOffset,size(rx波形,2));rx波形];其他的rx波形= rx波形(1+frameOffset:end,:);结束使用CORESET 0带宽确定OFDM解调带宽cset0Idx = initialSystemInfo.PDCCHConfigSIB1.controlResourceSetZero;scsCommon = initialSystemInfo.SubcarrierSpacingCommon;scsPair = [scsSSB scsCommon];[csetNRB,~,csetFreqOffset] = hCORESET0Resources(cset0Idx,scsPair,minChannelBW,k_SSB);接收波形中包含CORESET 0的RB中最小带宽。c0 = csetFreqOffset+10*scsSSB/scsCommon;% CORESET频率偏离载波中心nrb = 2*max(c0,csetNRB-c0);覆盖CORESET 0的最小RB数量如果rxSampleRate < nrb*12*scsCommon*1e3 disp([“SIB1的复苏不可能继续。CORESET 0资源已超出'...所配置的采样率的接收波形的频率限制。]);返回结束OFDM解调接收波形与公共子载波间距nSlot = 0;rxGrid = nrOFDMDemodulate(rx波形,nrb, scsCommon, nSlot,...“SampleRate”rxSampleRate,“CarrierFrequency”, fPhaseComp);显示OFDM资源网格,突出最强SS块图;显示亮度图像(abs (rxGrid (:,: 1)));轴xy包含(OFDM符号的);ylabel (副载波的);numFrames = floor(length(rx波形)/rxSampleRate/10e-3);SFNS = sprintf(“(%…% d)”, initialSystemInfo。NFrame,initialSystemInfo。NFrame+numFrames-1); title(['已接收资源网格。系统帧号:'sfn));highlightSSBlock (refBurst、ssbIndex nrb、scsPair kFreqShift)

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

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

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

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

  • 盲目搜索格式1_0 DCI消息。

接收机通过插槽和OFDM符号与检测到的SS块位置的偏移量来确定PDCCH监测场合,如TS 38.213所述。5]。

[csetNRB,csetDuration,csetOffset,csetPattern] = hCORESET0Resources(cset0Idx,scsPair,minChannelBW,k_SSB);ssIdx = initialSystemInfo.PDCCHConfigSIB1.searchSpaceZero;[ssSlot,ssFirstSym,isOccasion] = hPDCCH0MonitoringOccasions(ssIdx,ssbIndex,scsPair,csetPattern,csetDuration,initialSystemInfo.NFrame);% PDCCH监测场合关联到不同的SS块%不同的帧。如果在这个框架中没有监控场合,下一个里面一定有一个。slotsPerFrame = 10*scsCommon/15;如果~isOccasion [ssSlot,ssFirstSym,isOccasion] = hPDCCH0MonitoringOccasions(ssIdx,ssbIndex,scsPair,csetPattern,csetDuration,initialSystemInfo.NFrame+1);ssSlot = ssSlot+slotsPerFrame;结束对于FR1, UE连续两次监控type - 0-PDCCH CSS中的PDCCH%插槽用于CORESET模式1如果csetPattern == 1 monSlotsPerPeriod = 2;其他的monSlotsPerPeriod = 1;结束计算子载波和OFDM符号的基于1的下标%插槽包含与此检测到的SS块相关联的PDCCH0%和后续的2帧块csetSubcarriers = 12*(ndb -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是TS 38.212节7.3.1.0中描述的CORESET的大小[4].PDCCH置扰参数为nRNTI = 0和nID = NCellID,如TS 38.211章节7.3.2.3所述[3.].

pdch = hPDCCH0Configuration(ssbIndex,initialSystemInfo,scsPair,ncellid,minChannelBW);%配置运营商跨BWP (CORESET 0)c0Carrier = nrCarrierConfig;c0Carrier。SubcarrierSpacing = initialSystemInfo.SubcarrierSpacingCommon;c0Carrier。NStartGrid = pdch . nstartbwp;c0Carrier。NSizeGrid = pdch . nsizebwp;c0Carrier。NSlot = pdch . searchspace . slotperiodandoffset (2);c0Carrier。NFrame = initialSystemInfo.NFrame; c0Carrier.NCellID = ncellid;

搜索DCI消息。UE对接收到的PDCCH符号进行盲解码,方法是使用SI-RNTI监控每个聚合级别的所有候选PDCCH符号,以识别正确的候选(或实例)。

指定DCI消息,格式1_0用SI-RNTI打乱% 7.3.1.2.1节)dci = DCIFormat1_0_SIRNTI(pdch . nsizebwp);disp (——PDCCH下行控制信息消息搜索——);siRNTI = 65535;表7.1-1dciCRC = true;mlot = 0;遍历所有监控槽(mlot < length(monSlots)) && dciCRC ~= 0 c0载波。NSlot = monSlots(mlot +1);如果monSlotsPerPeriod = = 2如果mod(mlot,2) pdch . searchspace . slotperiodandoffset (2) = monSlots(2);其他的pdch . searchspace . slotperiodandoffset (2) = monSlots(1);结束结束根据TS 38.213章节10.1获取PDCCH候选人[pdcchInd, pdchdmrssym, pdchdmrsind] = nrPDCCHSpace(c0Carrier,pdcch);rxSlotGrid = rxMonSlotGrid(:,(1:symbolsPerSlot) + symbolsPerSlot* mlot,:);rxSlotGrid = rxSlotGrid/max(abs(rxSlotGrid(:))));接收RE幅度的归一化遍历所有支持的聚合级别万博1manbetxaLev = 1;(aLev <= 5) && dciCRC ~= 0在SS中的每个聚合级别上遍历所有候选对象cIdx = 1;numCandidatesAL = pdch . searchspace . numcandidate (aLev);(cIdx <= numCandidatesAL) && dciCRC ~= 0使用PDCCH DM-RS进行信道估计[hest,nVar, pdchhestinfo] = nrChannelEstimate(rxSlotGrid, pdchdmrsind {aLev}(:,cIdx),pdcchDmrsSym{aLev}(:,cIdx));PDCCH符号的均衡化和解调[pdcchRxSym,pdcchHest] = nrExtractResources(pdcchInd{aLev}(:,cIdx),rxSlotGrid,hest);pdcchEqSym = nrEqualizeMMSE(pdcchRxSym, pdcchest,nVar);dcicw = nrPDCCHDecode(pdcchEqSym, pdch . dmrsscramblingid, pdch . rnti,nVar);% DCI消息解码polarListLength = 8;[dcibits,dciCRC] = nrdciccode (dcicw,dci.Width,polarListLength,siRNTI);如果dciCRC == 0 disp([“解码的PDCCH候选#”num2str (cIdx)“在聚合层面”num2str (2 ^ (aLev-1))))结束cIdx = cIdx + 1;结束aLev = aLev+1;结束mlot = mlot +1;结束cIdx = cIdx-1;aLev = aLev-1;mlot = mSlot-1;monSymbols = monSymbols(mlot *symbolsPerSlot + (1:symbolsPerSlot));计算RMS PDCCH EVMpdcchRef = nrPDCCH(double(dcicw<0), pdch . dmrsscramblingid, pdch . rnti);evm = com . evm;pdcchEVMrms = evm(pdcchRef,pdcchEqSym);显示计算的EVMdisp ([' PDCCH RMS evm: 'num2str (pdcchEVMrms' % 0.3 f '“%”]);disp ([' PDCCH crc: 'num2str (dciCRC)]);%突出显示最强SSB对应的CORESET 0/SS边框= @(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(' CORESET 0 /党卫军');文本(monSymbols (1) + ssFirstSym-7 csetSubcarriers(1) -20年,0,str,“字形大小”10“颜色”' w '如果dciCRC disp (“DCI解码失败。”);返回结束均衡后接收到PDCCH星座的百分比图;情节(pdcchEqSym“o”);包含(“同步”);ylabel (“交”)标题(“均衡PDCCH星座”);m = max(abs([real(pdcchEqSym(:)));imag(pdcchEqSym(:)))) * 1.1;轴([-m m -m m]);%显示最强PDCCH槽位的OFDM网格图;显示亮度图像(abs (rxSlotGrid (:,: 1)));轴xy包含(OFDM符号的);ylabel (副载波的);标题(“含有最强PDCCH的槽”);在资源网格中突出显示PDCCHsubspdch = nrPDCCHSpace(c0Carrier,pdcch,“IndexStyle”“潜艇”);subspdch = double(subspdch {aLev}(:,:,cIdx));x = min(subspdch (:,2))-1;X = max(subspdch (:,2))-x;y = min(subspdch (:,1));Y = max(subspdch (:,1))-y+1;bounding_box (y, x, y, x);STR = sprintf('PDCCH \nAggregation Level: %d\nCandidate: %d'2 . ^ (aLev-1), cIdx-1);文本(x + x + 1, y + y / 2, 0, str,“字形大小”10“颜色”' w '
——在聚合级别8解码的PDCCH候选1 PDCCH RMS EVM: 10.759% PDCCH CRC: 0

PDSCH解调、DL-SCH解码及SIB1提取

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

  • 使用单元ID、BCH信息和DCI确定PDSCH配置

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

  • DL-SCH解码和SIB1提取

构建DCI消息结构dci = fromBits(dci,dcibits);从单元ID、BCH信息和DCI获取PDSCH配置[pdsch,K_0] = hSIB1PDSCHConfiguration(dci, pdch . nsizebwp, initialsysteminfo . dmrstypeposition,csetPattern);对于CORESET模式2,gNodeB可以在下一个插槽分配PDSCH,%,由DCI表示的槽偏移量K_0表示。更多的参见TS 38.214表5.1.2.1.4 -4。c0Carrier。NSlot = c0Carrier.NSlot+K_0;monSymbols = monSymbols+symbolsPerSlot*K_0;如果K_0 > 0%显示对应PDSCH槽位的OFDM网格图;显示亮度图像(abs (rxGrid (csetSubcarriers monSymbols 1)));轴xy包含(OFDM符号的);ylabel (副载波的);标题('包含PDSCH的槽(槽偏移量K_0 = 1)');结束使用PDSCH DM-RS的PDSCH信道估计和均衡pdschDmrsIndices = nrPDSCHDMRSIndices(c0Carrier,pdsch);pdschDmrsSymbols = nrPDSCHDMRS(c0Carrier,pdsch);

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

disp (PDSCH解调和DL-SCH解码) 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 - kFreqShift + 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符号的信道估计与均衡[hest,nVar,pdschHestInfo] = nrChannelEstimate(rxSlotGrid,pdschDmrsIndices,pdschDmrsSymbols);[pdschIndices,pdschIndicesInfo] = nrPDSCHIndices(c0Carrier,pdsch);[pdschRxSym,pdschHest] = nrExtractResources(pdschIndices,rxSlotGrid,hest);pdschEqSym = nrEqualizeMMSE(pdschRxSym,pdschHest,nVar);% PDSCH解调cw = nrPDSCHDecode(c0Carrier,pdsch,pdschEqSym,nVar);创建并配置DL-SCH解码器与目标码率和传输块大小百分比decodeDLSCH = nrDLSCHDecoder;decodeDLSCH。LDPCDecodingAlgorithm =“规范化min-sum”;Xoh_PDSCH = 0;第5.1.3.2节tcr = hMCS(dci.ModulationCoding);nrepprb = pdschindicesinfo . nrepprb;tbsLength = nrTBS(pdsch.Modulation,pdsch.NumLayers,length(pdsch.PRBSet),NREPerPRB,tcr,Xoh_PDSCH);decodeDLSCH。TransportBlockLength = tbslenglength;decodeDLSCH。TargetCodeRate = tcr;解码DL-SCH[sib1bits,sib1CRC] = decodeDLSCH(cw,pdsch.Modulation,pdsch.NumLayers,dci.RedundancyVersion);如果sib1CRC == 0打破结束结束%在资源网格中突出PDSCH和PDSCH DM-RSsubsPdschSym = double(nrPDSCHIndices(c0Carrier,pdsch,“IndexStyle”“下标”));subsPdschDmrs = double(nrPDSCHDMRSIndices(c0Carrier,pdsch,“IndexStyle”“下标”));subsPdsch = [subsPdschSym;subsPdschDmrs];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”);包含(“同步”);ylabel (“交”)标题(“均衡PDSCH星座”);m = max(abs([real(pdschEqSym(:)));imag(pdschEqSym(:)))) * 1.1;轴([-m m -m m]);计算RMS PDSCH EVM,包括任何PDSCH符号的归一化DM-RS和PDSCH功率之间的%偏移pdschRef = nrPDSCH(c0Carrier,pdsch,double(cw{1}<0));evm = com . 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解调和DL-SCH解码——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. 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;其他的Present = false;结束结束函数timegoffset = htiminggoffsettoframe (burst,offset,ssbIdx,rxSampleRate)由于符号长度是在FFT样本中测量的,缩放符号%长度来表示接收方采样率。非整数延迟%是在过程结束时近似的。scs = hSSBurstSubcarrierSpacing(burst.BlockPattern);ofdmInfo = nrOFDMInfo(1,scs,“SampleRate”, rxSampleRate);最小的FFT大小为SCS-SRsrRatio = rxSampleRate/(scs*1e3*ofdmInfo.Nfft);symbollength = ofdminfo . symbollength *srRatio;%调整定时偏移到SS块的开始。这一步删除% PSS搜索时引入参考网格的额外偏移量,在第二个OFDM符号中包含PSS。offset = offset + symbol长度(1);%定时偏移量被调整,以便接收的网格开始于帧头,即调整定时偏移之间的差异%是最强SSB的第一个符号,也是帧的开始burstStartSymbols = hSSBurstStartSymbols(burst.BlockPattern,burst.L_max);开始SSB命理学中的符号ssbFirstSym = burstStartSymbols(ssbIdx+1);%基于%调整整个子帧symbolsPerSubframe = length(symbollength);subframeOffset = floor(ssbFirstSym/symbolsPerSubframe);samplesPerSubframe = sum(symbollength);timinggoffset = offset - (subframeOffset*samplesPerSubframe);%如果不是整数,则调整剩余OFDM符号和四舍五入偏移量symbolOffset = mod(ssbFirstSym,symbolsPerSubframe);timingOffset = round(timingOffset - sum(symbollength1:symbolOffset));结束函数highlightSSBlock(refBurst,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*(commonnnrb -20*scsRatio)/2+1+kFreqShift/(scsCommon*1e3);确定常用命理学中SSB的时间起源ssbStartSymbols = hSSBurstStartSymbols(refBurst.BlockPattern,refBurst.L_max);ssbHeadSymbol = ssbStartSymbols(ssbIndex+1)/scsRatio;ssbTailSymbol = floor((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 '结束

相关的话题