基于ZC序列的帧同步

Zadoff-Chu序列是一种特殊的序列,具有良好的自相关性和很低的互相关性,这种性能可以被用来产生同步信号,作为对时间和频率的相关运算在TD-LTE系统中,Zadoff-Chu(ZC)序列主要应用于上行RS序列生成、PRACH前导序列生成以及主同步信号生成等,它在整个TD-LTE系统中扮演着重要的角色,是建立上下行链路同步以及信道估计中不可或缺的一部分

ZC序列有以下性质:

1. 恒包络。任意长度的ZC序列的信号的幅值恒定,即功率恒定,因此射频器件无需改变能量。

2. 理想的周期自相关。

3. 良好的互相关。ZC序列循环移位N后,原序列只与移位后的序列得良好的相关峰值,其它位置的序列相关峰值为0,除此之外,两个根如果是互质的,生成的序列相关峰值几乎为零。

4. 傅立叶变换后仍是ZC序列。ZC序列既可以做时序相关检测,也可以做频域相关检测。

5. ZC序列峰均比低,由于ZC序列时频域都为ZC序列,且幅值恒定,有利于射频功放信号发挥最大的效率。

我们知道无线电波在空中传输,会存在时延,而且还会存在多径衰落,因此每两次传输之间都会存在保护间隔,避免上一次传输影响到下一次,两者间出现尾头重叠现象。OFDM符号,巧妙的把每一个符号尾巴复制一部分,放到前面保护间隔位置,形成循环前缀CP。

这样即使接收端收到的OFDM符号有一定的时延,但只要时延不超过CP长度,OFDM符号仍然保持正交性, IFFT变换后仍然可以恢复数据。

ZC序列循环移位N后,原序列只与移位后的序列得良好的相关峰值,其它位置的序列相关峰值为0。除此之外,两个根如果是互质的,生成的序列相关峰值几乎为零。我们知道一个根序列的长度是有限度的(139或者839),每移位NCS位就许配给一个UE,那由一个根生成的ZC序列很快用完,需要用到其它根来生成preamble,这个时候两个根生成的序列之间的互相关性就显得重要,它们要长得不“像”,即互相关几乎为0,否则基站区别不出它们。

前述我们知道,ZC序列循环移位后,原序列和移位后的相关峰值出现在移位大小的位置。PRACH序列就是利用这个性质求时间偏移的大小。基站采用原序列与接收到的序列做相关,由于OFDM符号是首尾相连的,如果有时延,则相关峰值就会出现移位,不出现在起始位置。接收的数据存放是按照采样时间顺序存放在buffer里面的,只要统计移位的样点数,就可以知道时间延时大小了。因为终端的时间是以基站侧为基准的,终端发送的上行信号当然的也会以上行子帧或者slot或者符号为基准,当基站发现接收到终端上行数据有时延,当然就会通知终端:下次早点来。
 

ZC序列仿真如下:

% 利用zc序列进行简单的帧同步
clc;close all;clear;
snr = 10;
zc = zadoffChuSeq(25,139)';
data = randi([0,1],1,1000);
pre = randn(1, 100);
tx = [zc data];
rx_idel = [pre tx];
rx_noise = awgn(rx_idel,snr,'measured'); % 创造接收数据,在头加了一些数字来模拟噪声

ax(1) = subplot(3,1,1);
plot(tx)
ylabel('Tx')
axis tight
 
ax(2) = subplot(3,1,2);
plot(rx_idel)
ylabel('Rx')
axis tight
xlabel('Samples')

ax(2) = subplot(3,1,3);
plot(rx_noise)
ylabel('Rx-add noise')
axis tight
xlabel('Samples')

[ref,lag] = xcorr(rx_noise, tx);%计算rx,tx信号之间的互相关性
ref = ref/max(ref);%归一化


[M,I] = max(ref);
t = lag(I);
figure
plot(lag,ref,[t t],[-0.5 1],'r:')
text(t+100,0.5,['Lag: ' int2str(t)])
axis tight
title('Cross-Correlations')

显而易见,接收机接收到的信号相对发射信号而言延迟了100个采样点。因此我们只需要将Rx前100个样本点去掉即可完成帧同步。 

猜你喜欢

转载自blog.csdn.net/weixin_44810982/article/details/130208188