NR Cell Search and MIB(MATLAB 5G TOOLBOX学习笔记)

温馨提示:笔者也是花了较长时间反复研读相关资料和代码才梳理出了一些眉目,请读者们耐心阅读,一次不明白多看几次就懂了~

完整代码搜索MATLAB 5G TOOLBOX中的NR Cell Search and MIB and SIB1 Recovery模块即可找到,代码中涉及到的有关5G基础知识不再赘述,读者可自行搜索补充或参照之前写的一部分博文知识,本文仅介绍NR Cell Search中的核心步骤及代码~
5G下行信号的同步技术(SSB、PSS、SSS、5G小区搜索)

NR Cell Search流程图

建议搞明白下面介绍的每一步流程后再返回看此图,此时会有一种拨开云日的感觉~

在这里插入图片描述

Receiver Configuration

首先使用波形生成器配置和生成SS burst。示例代码中增强了第一个SS块的信噪比。主要代码如下:

config.TransmittedBlocks = ones(1,8);   % 设置8个传输的SS块
config.Power = zeros(size(config.TransmittedBlocks));%初始化所有SSB的功率为0
config.Power(1) = boost; % 增加第一个SSB的信噪比

如下图所示,第一个SS块的颜色所代表的功率大于其他块。
在这里插入图片描述
接下来,利用相关函数生成波形,获得采样率,发送的OFDM符号信息和增加噪声后接收到的OFDM信息。

%generate a waveform containing an SS burst and SIB1
wavegenConfig = hSIB1WaveformConfiguration(config);
[txWaveform,waveInfo] = nrWaveformGenerator(wavegenConfig);
    txOfdmInfo = waveInfo.ResourceGrids(1).Info;

% Add white Gaussian noise to the waveform. 
rxWaveform = awgn(txWaveform,SNRdB-boost,-10*log10(double(txOfdmInfo.Nfft)));

 % Sample rate
    sampleRate = txOfdmInfo.SampleRate;

% Get OFDM information from configured burst and receiver parameters
nrbSSB = 20;
scsSSB = hSSBurstSubcarrierSpacing(refBurst.BlockPattern);
rxOfdmInfo = nrOFDMInfo(nrbSSB,scsSSB,'SampleRate',sampleRate);

PSS Search and Frequency Offset Correction

将接收到的波形以半子载波为单位间隔进行频率偏移,将偏移后的接收波形与三个可能的PSS序列进行相关性检测,根据最强的相关性峰值得到粗略频率偏移量NID2值(如下图所示)。
关键代码:

searchBW = 6*scsSSB;%使用searchBW来控制频率偏移搜索带宽。
[rxWaveform,freqOffset,NID2] = hSSBurstFrequencyCorrect(rxWaveform,refBurst.BlockPattern,sampleR

在这里插入图片描述

Time Synchronization and OFDM Demodulation

利用上一步中得到的NID2值对应的参考PSS序列来估计SS块的定时偏移量
关键代码:

% Create a reference grid for timing estimation using detected PSS. 
refGrid = zeros([nrbSSB*12 2]);
refGrid(nrPSSIndices,2) = nrPSS(NID2); % Second OFDM symbol for correct CP length

% Timing estimation. 
nSlot = 0;
timingOffset = nrTimingEstimate(rxWaveform,nrbSSB,scsSSB,nSlot,refGrid,'SampleRate',sampleRate);

利用得到的定时偏移量修正接收波形,然后对接收波形进行OFDM解调并提取SS块
关键代码:


% Synchronization, OFDM demodulation, and extraction of strongest SS block
rxGrid = nrOFDMDemodulate(rxWaveform(1+timingOffset:end,:),nrbSSB,scsSSB,nSlot,'SampleRate',sampleRate);
rxGrid = rxGrid(:,2:5,:);

SSS Search

从接收到的网格rxGrid中提取与SSS相关的资源元素,并将它们与本地生成的336个可能的SSS序列进行相关性检测,得到SSS序列索引物理层小区标识
关键代码:

% Extract the received SSS symbols from the SS/PBCH block
sssIndices = nrSSSIndices;
sssRx = nrExtractResources(sssIndices,rxGrid);

% Correlate received SSS symbols with each possible SSS sequence
sssEst = zeros(1,336);
for NID1 = 0:335

    ncellid = (3*NID1) + NID2;
    sssRef = nrSSS(ncellid);
    sssEst(NID1+1) = sum(abs(mean(sssRx .* conj(sssRef),1)).^2);

end
NID1 = find(sssEst==max(sssEst)) - 1;

% Form overall cell identity from estimated NID1 and NID2
ncellid = (3*NID1) + NID2;

在这里插入图片描述

PBCH DM-RS search

利用小区ID计算DMRS索引,构造每个可能的PBCH DM-RS序列并执行信道和噪声估计,得到具有最佳SNR的PBCH DM-RS的索引并确定PBCH加扰初始化所需的SS/PBCH块索引的最少有效位
关键代码:

% Calculate PBCH DM-RS indices
dmrsIndices = nrPBCHDMRSIndices(ncellid);

% Perform channel estimation using DM-RS symbols for each possible DM-RS
% sequence and estimate the SNR
dmrsEst = zeros(1,8);
for ibar_SSB = 0:7

    refGrid = zeros([240 4]);
    refGrid(dmrsIndices) = nrPBCHDMRS(ncellid,ibar_SSB);
    [hest,nest] = nrChannelEstimate(rxGrid,refGrid,'AveragingWindow',[0 1]);
    dmrsEst(ibar_SSB+1) = 10*log10(mean(abs(hest(:).^2)) / nest);

end

% Record ibar_SSB for the highest SNR
ibar_SSB = find(dmrsEst==max(dmrsEst)) - 1;

在这里插入图片描述

Channel Estimation using PBCH DM-RS and SSS

利用上述步骤中检测到的SSS和PBCH DM-RS进行SS/PBCH块的信道估计和噪声估计(由于下面要进行MMSE信道均衡,MMSE要用到噪声方差,所以在信道估计时需要把噪声方差估计出来)。
关键代码:

% Channel Estimation using PBCH DM-RS and SSS
refGrid = zeros([nrbSSB*12 4]);
refGrid(dmrsIndices) = nrPBCHDMRS(ncellid,ibar_SSB);
refGrid(sssIndices) = nrSSS(ncellid);
[hest,nest,hestInfo] = nrChannelEstimate(rxGrid,refGrid,'AveragingWindow',[0 1]);

PBCH Demodulation

使用小区标识从接收到的网格中提取与PBCH相关的资源元素。并利用上一个步骤中得到的信道和噪声估计进行MMSE均衡。然后对均衡的PBCH符号进行解调和解扰,以给出编码BCH块的比特估计。
关键代码:

% Extract the received PBCH symbols from the SS/PBCH block
[pbchIndices,pbchIndicesInfo] = nrPBCHIndices(ncellid);
pbchRx = nrExtractResources(pbchIndices,rxGrid);

% Configure 'v' for PBCH scrambling
% 'v' is the 2 LSBs of the SS/PBCH block index for L_max=4, or the 3 LSBs for L_max=8 or 64.
if refBurst.L_max == 4
    v = mod(ibar_SSB,4);
else
    v = ibar_SSB;
end
ssbIndex = v;

% PBCH equalization 
pbchHest = nrExtractResources(pbchIndices,hest);
[pbchEq,csi] = nrEqualizeMMSE(pbchRx,pbchHest,nest);
Qm = pbchIndicesInfo.G / pbchIndicesInfo.Gd;
csi = repmat(csi.',Qm,1);%信道状态信息(CSI)
csi = reshape(csi,[],1);
% PBCH demodulation
pbchBits = nrPBCHDecode(pbchEq,ncellid,v,nest);

在这里插入图片描述

BCH Decoding and Get MIB

利用CSI对BCH比特估计进行加权,并对BCH进行解码。BCH解码包括速率恢复、极性解码、CRC解码、解扰和从8个额外的与定时相关的有效载荷位中分离出24个BCH传输块位。最后将24个解码的BCH传输块位解析为MIB消息。

本次5G知识分享到此结束,学习5G在路上,未完待续~

  • 15
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值