5G NR同步(1)——同步原理
1.5G NR 采用的同步序列
最大长度序列是长度为 的周期性二进制序列,其中n为产生m序列的生成多项式的阶数。m序列经过循环移位后仍然是m序列。通过不同的循环移位,一个n阶多项式共可产生
个长度为
的m序列,m序列的生成模型如图所示:

function y=mseq(coef) m=length(coef);%确定寄存器数目 N=2^m-1;%确定周期 %mback=0;%用于存放反馈值 y=zeros(1,N);%用于存放输出序列 registers=[1,1,1,0,1,1,0];%确定寄存器初始值 for i=1:N y(i)=registers(m); mback=mod(sum(coef.*registers),2); registers=[mback registers(1:end-1)]; end
则4级线性移位寄存器如下图所示,即a0和a3的模二和会作为序列右移以后新的最高位a3,序列最低位a0会作为输出。

初始序列1000经过每次序列移动后生成的序列如下:
1000---1100---1110---1111---0111---1011---0101---1010---1101---0110---0011---1001---0100---0010---0001---
m序列具有以下主要的伪随机噪声属性,简称PN属性:
平衡性:任何长度为 的PN序列包含
个“1”和
个“0”。
自相关:理想的归一化自相关函数为:

Gold序列是1967年R.Gold在m序列基础上提出并分析的一种特性较好的伪随机序列,它是由两个码长相等、码时钟速率相同的m序列优选对通过模2相加而构成的。
其产生的电路示意图如下图所示,通过设置m序列发生器B的不同初始状态,可以得到不同的Gold序列,由于共有m-1个不同的相对移位,加上原有的两个m序列,可以产生共m+1个Gold序列。

m1 = mseq([0 0 1 0 0 0 1]); m2 = mseq([0 0 0 0 0 1 1]); Gold=xor(m1,m2);
ZC(Zadoff –Chu)序列,由Zadoff 和Chu共同发现,ZC序列为欧拉复数序列,是复平面坐标上的单位圆上的点组成的序列 ,每个点对应一对(I, Q)的幅度值。

下面给出基于matlab生成ZC序列的方式:
ZC = zadoffChuSeq(R,N);
其中输入参数是ZC序列的根索引,和上式的q和m相关,N是ZC序列的长度,q和N确定的情况下,生成长度根序列为25,长度为139的ZC序列:
ZC = zadoffChuSeq(25,139);
ZC序列的点如下图所示:

ZC序列有以下性质:
1. 恒包络。任意长度的ZC序列的信号的幅值恒定,即功率恒定,因此射频器件无需改变能量。
2. 理想的周期自相关。
3. 良好的互相关。ZC序列循环移位N后,原序列只与移位后的序列得良好的相关峰值,其它位置的序列相关峰值为0,除此之外,两个根如果是互质的,生成的序列相关峰值几乎为零。
4. 傅立叶变换后仍是ZC序列。ZC序列既可以做时序相关检测,也可以做频域相关检测。
2. m序列和Gold序列的自相关特性
下面首先分析m序列的自相关特性,以长度为127的m序列为例。
通过七阶多项式生成:
%生成个固定小区ID的PSS信号函数 ncellid = 17; ncellid0 = 16; PSS = nrPSS(ncellid); PSS0 = nrPSS(ncellid0); XPSS=xcorr(PSS); XPSS0=xcorr(PSS,PSS0); subplot(1,2,1); plot(XPSS); title('m序列的自相关特性'); subplot(1,2,2); plot(XPSS0); title('m序列的互相关特性');

仿真结果表明,只有当m序列与自身对齐时相关系数最大。因此,可以通过该特性实现无线数据帧的时间同步。
下面分析Gold序列的自相关特性:
通过七阶多项式生成m1:
初始值为[0,0,0,0,0,0,1]。
通过七阶多项式生成m2:
初始值为[0,0,0,0,0,0,1]。
%生成个固定小区ID的SSS信号函数 ncellid = 17; ncellid0 = 16; SSS = nrSSS(ncellid); SSS0 = nrSSS(ncellid0); XSSS=xcorr(SSS); XSSS0=xcorr(SSS,SSS0); subplot(1,2,1); plot(XSSS); title('Gold序列的自相关特性'); subplot(1,2,2); plot(XSSS0); title('Gold序列的互相关特性');

3. 5G NR同步方法
m_bin= zeros(3,127); m_bin(1,:) = mseq([0 0 0 0 0 1 1]); % 生成127位m序列 m_bin(2,:) = mseq([0 0 0 1 0 0 1]); % 生成127位m序列 m_bin(3,:) = mseq([0 0 0 1 1 1 1]); % 生成127位m序列 m_data = 2 * [m_bin(1,:) m_bin(2,:) m_bin(3,:)] -1; % 转换为±1,把三个m序列拼接在一起发送 m_data = [m_data m_data]; % 重复两次 N=length(m_data); Tc=1e-6;%码字周期 f=2e6;%载波频率 Fs=20;%载波周期点数 N_c = Tc * f * N; % 基带数据对应载波周期数 先采用BPSK对发送的m序列进行调制,并在调制信号上叠加加性高斯白噪声,信噪比设置为为5dB。然后在接收端使用BPSK对信号进行解调,如图所示,可以看到调制后的数据及解调后的数据由于干扰比较大,其实很难在解调后的基带数据上进行逐次比较法确定同步序列。 % BPSK调制; tx_data= zeros(N_c * Fs,1); for i = 1: N bit_idx = 1:1: Tc * f * Fs; tx_data((i-1)*length(bit_idx) + bit_idx) = m_data(i) * cos(2 * pi / Fs * bit_idx); end channel_data = awgn(tx_data,-5, 'measured'); % 增加噪声,5dB % BPSK解调过程 rx_data = zeros(N,1); for i=1:N bit_idx = 1:1:Tc * f * Fs ; %channel_data数据与cos(2f*pi*t)相乘 rx_data_with_4pift = channel_data((i-1)*length(bit_idx) + bit_idx) .* cos(2 * pi / Fs * bit_idx)'; %积分过滤出基带分量 rx_data(i) = sum(rx_data_with_4pift); end
coef= zeros(3,127); for i=1:127 coef(1,i) = min(min(corrcoef(strip_data(i:i+126), m_bin(1,:) ))); coef(2,i) = min(min(corrcoef(strip_data(i:i+126), m_bin(2,:) ))); coef(3,i) = min(min(corrcoef(strip_data(i:i+126), m_bin(3,:) ))); end
