朋友们,这是NBIOT小区搜索最后一期了,从下期开始开始讲LTE同步信号生成,小区搜索,LTE小区搜索讲完开始讲5G NR同步信号生成小区搜索
在蜂窝无线通信中,辅同步信号的检测一般都采用最大似然法检测,利用本地生成的NSSS信号跟收到空口信号做相关,遍历所有的小区ID和80ms帧定时就是一种最大似然检测方法,在协议3GPP 36.211中可知NSSS帧的映射只在偶数帧的子帧9,所以80ms帧定时实际只需要遍历0,1,2,3,然后乘以2就可以确定80ms帧定时中的哪一帧。
NSSS的检测只检测小区ID和80ms帧定时,不包括帧头和频偏,其由NPSS检测保障,由于NPSS只在子帧5中,而NSSS在偶数帧子帧9中,NPSS检测完成后并不知道帧号的奇偶,所以NSSS的收数要两个子帧9。
由于NPSS可能离NSSS比较远,而且NPSS还不包含本小区的信息,所有小区的NPSS都一样,NPSS的信道冲击响应信息H不建议用于NSSS检测中。
NSSS检测相关后的功率值中最大的那个大概率是当前环境中最强的小区,还要借助于后面的测量确认,其峰均比可以设置门限来消除假小区。
NSSS检测相关如下:
其中,corr为相关值,rx_nsss为收到的空口的NSSS数据,local_nsss为本地生成的NSSS数据,在NBIOT中,小区的个数为504个,每个小区ID对应4个80ms帧定时,共需要做504*4次相关。
MATLAB实现:
clc,clear,close all;
%
%
%
%
% author nb_lte_5g
% 老牛
% code time 2024.08.22 20:24
%
%
b_q_hadamard=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1;
1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1;
1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1
];
x = load('nsss_frame0.txt');
x_r = x(1:2:end);
x_i = x(2:2:end);
nsss_rx = x_r + x_i*1i;
% figure;plot(real(nsss_rx))
% title('空口NSSS信号 frame=0,pci=0');
% nsss_rx = nsss_rx(12*3+1:end);
nsss_rx = nsss_rx(1:end);
corr = zeros(1,504*4);
cnt = 1;
for pci = 0:503
for frameMod8Div2=0:3
nsss_seq = zeros(1,132);
u=mod(pci,126)+3;
q=floor(pci/126);
b_q=b_q_hadamard(q+1,:);
for idx=0:131
n=mod(idx,131);
m =mod(idx,128);
nsss_seq(idx+1) = b_q(m+1)*exp(-1i*pi*u*n*(n+1)/131);
end
nsss_sequence_local=zeros(1,132);
thelta_f=33/132*frameMod8Div2;
for n=0:131
nsss_sequence_local(n+1) = nsss_seq(n+1) * exp(-1i*2*pi*thelta_f*n);
end
corr(cnt) = nsss_sequence_local*conj(nsss_rx);
cnt = cnt + 1;
end
end
power = abs(corr);
[valueMax,pos] = max(power);
%峰均比
par = valueMax/mean(power);
%cell id
cell_id = (pos-1)/4;
% frameMod8
frameMod8 = mod((pos-1),4)*2;
figure;plot(abs(corr))
fprintf('cell id = %d,frameMod8 = %d\n',cell_id,frameMod8);
运行结果:
cell id = 111,frameMod8 = 2
符合预期