1. 伪码同步的一般原理
根据扩频调制解调技术可知,直扩信号的解调与普通PSK解调相比,仅仅增加了一个解扩环节,而要完成解扩,则必须实现伪码同步。从直扩信号工作原理可知,扩频通信正是由于具有解扩功能而极大地增强了其抗干扰性能。扩频信号的解调关键在于伪码同步电路的设计,这不仅是其区别于PSK信号解调的主要不同点,也是解调电路设计的终点和难点。
在扩频数字通信系统中,接收端与发送端必须实现信息码元同步、PN码元和序列同步及载波同步。只有实现了这些同步,直扩系统才能正常工作,可以说没有同步就没有扩频通信系统。同步系统是扩频通信的关键技术,在上述几种同步中,信息码元时钟可以和PN码元时钟联系起来,有固定的的关系,一个实现了同步,另一个自然也就同步了。对于载频同步来说,主要是针对相干解调的相位同步而言,其工作原理及实现过程与PSK的相干解调过程相同。
同步系统的作用就是要实现本地产生的PN码与接收到的信号中的PN码同步,即频率上相同,相位上一致。同步过程一般说来包含两个阶段。
(1)接收机在一开始并不知道对方是否发送了信号,因此,需要有一个捕获过程,即在一定的频率和时间范围内搜索和捕获有用信号。这一阶段也称为起始同步或粗同步,也就是要把对方发来的信号与本地信号的相位差纳入同步保持范围内。
(2)一旦完成这一阶段后,则进入跟踪过程,即继续保持同步,不因外界影响而失去同步。也就是说,无论由于何种因素使两端的频率和相位发生偏移,同步系统能加以调整,使收发信号仍然保持同步。下图为伪码同步系统捕获和跟踪的一般原理图。
接收到的信号经宽带滤波器后,在乘法器中与本地PN码进行相关运算。此时捕获器件调整压控钟源,调整PN码发生器产生的本地伪码序列的重复率和相位,以捕获有用信号。一旦捕获到有用信号后,则启动跟踪器件,由其调整压控钟源,使本地PN码发生器与外来信号保持同步。如果由于各种原因引起失步,则重新开始新的一轮捕获和跟踪过程,因此,整个同步过程,包含,捕获和跟踪两个阶段闭环的自动控制和调整过程。
1.1 滑动相关捕获原理
捕获的作用就是在频率和时间(相位)不确定的范围内捕获有用的PN码信号,使本地PN码信号与其同步。大多数捕获方法都利用非相干检测。所有的捕获方法的共同特点是用本地信号与收到的信号相乘积分(即相关运算),获得二者相似性的量度,并与一门限值相比较,以判断其是否捕获到有用信号。如果确认捕获到有用信号,则开始跟踪过程,使系统保持同步,否则又开始继续捕获。
当接收到的PN码序列与本地PN码序列的钟频不同时,在示波器上可以看到两个序列在相位上相互滑动。这种滑动过程就是两个码序列逐位进行相关检测的过程。总有一个时候,两个序列的相位会滑动到一致。如果这时能使滑动停止,则完成了捕获过程,可以转入跟踪过程,达到系统同步。下图为滑动相关器的原理方框图,图9-9为滑动相关器算法的流程图。
如图9-8和图9-9所示,接收到的信号与本地PN码相乘后再积分,即求出它们的互相关值,然后在门限检测器中与某一门限值比较,以判断是否已捕获到有用信号。这里利用PN码序列的相关特性,当两个相同的码序列相位上一致时,其相关值有最大的输出。一旦确认捕获完成,则捕获指示信号的同步脉冲控制搜索控制钟,调整PN码发生器产生的PN码重复频率和相位,使之与收到的信号保持同步。
由于滑动器对两个PN码序列是顺序比较相关的,所以这种方法又称为顺序搜索法。滑动相关器因其算法简单,应用很广。它的缺点在于当两端PN码钟频相差不多时,相对滑动速度很慢,导致搜索时间过长。
1.2 延迟锁相环跟踪原理
当捕获到有用信号后,即收发PN码相位相差在1个PN码元以内时,同步系统转入保持同步阶段,有时也称为细同步或跟踪状态。
跟踪环路可分为相干和非相干两种。前者是在确定发端信号的载波频率和相位的情况下工作的,后者则在不确知的情况下工作,大多数实际情况属于后者。常用的跟踪环路是延迟锁相环(Delay-Looked Loop,DLL)跟踪电路和抖动锁相环(Tau-Dither Loop,TDL)跟踪环路,他们都是属于提前-滞后类型锁相环。锁相环的作用由收到的信号与本地产生的两个有一定相位差(提前及滞后)的信号进行相关运算完成。延迟锁相环采用两个独立的相关器,抖动锁相环则采用分时的单个相关器。本系统采用的是延迟锁相环,故只对延迟锁相环原理进行介绍。
无论哪种跟踪电路,首先必须得捕获本地伪随机序列与接收信号的相位差,对于延迟锁相环来说,它利用扩频序列自相关函数的偶对称特性实现。图9-10是扩频序列的自相关函数曲线,图9-11位鉴相曲线。
由图9-10可以看到,当
τ
=
0
\tau =0
τ=0时,相关值最大;图9-11中的虚线1为自相关函数
R
(
τ
)
R(\tau)
R(τ)右移
T
c
/
2
T_{c}/2
Tc/2后的自相关函数
R
(
τ
−
T
c
/
2
)
R(\tau-T_{c}/2)
R(τ−Tc/2),虚线2为自相关函数
R
(
τ
)
R(\tau)
R(τ)左移
T
c
/
2
T_{c}/2
Tc/2后的自相关函数
R
(
τ
+
T
c
/
2
)
R(\tau+T_{c}/2)
R(τ+Tc/2)。两个移位后的自相关函数
R
(
τ
−
T
c
/
2
)
R(\tau-T_{c}/2)
R(τ−Tc/2)和
R
(
τ
+
T
c
/
2
)
R(\tau+T_{c}/2)
R(τ+Tc/2)相减,得到扩频序列的跟踪曲线,即图9-11中的实线。
由图9-11中的鉴相曲线可以看到,当两个序列相位差 τ \tau τ为0时,鉴相器输出为0;当 τ \tau τ不为0时,鉴相器输出一个与 τ \tau τ成比例的有极性信号,这个信号可以用来控制本地伪随机序列相位,以实现闭环控制。
延迟锁相环跟踪电路结合如下图所示,接收信号下变频至基带,分别与超前
T
c
/
2
T_{c}/2
Tc/2、滞后
T
c
/
2
T_{c}/2
Tc/2的本地伪随机序列进行相关运算。两个支路的相关器件特性相同,则二者出现相关峰的时间相差
T
c
T_{c}
Tc。鉴相误差经环路滤波后送至VCO,控制本地伪随机序列向减小跟踪偏差的方向调整。
2. 伪码同步算法设计及仿真
2.1 同步算法设计
- 原始数据速率 R b = 200 k b p s R_{b}=200kbps Rb=200kbps
- 伪码序列长度 L P N = 31 L_{PN}=31 LPN=31
- 伪码速率 R c = L P N R b = 6.2 M C h i p / s R_{c}=L_{PN}R_{b}=6.2MChip/s Rc=LPNRb=6.2MChip/s
- 采样频率 f s = 8 R c = 49.6 M H z f_{s}=8R_{c}=49.6MHz fs=8Rc=49.6MHz
- 成形滤波器(升余弦)的滚将因子 α = 0.8 \alpha=0.8 α=0.8
由前所述,传统的滑动相关捕获电路是通过控制本地伪码产生器的驱动时钟频率来达到滑动的目的,而在数字电路中,则改为通过控制本地伪码产生器,使其按固定补偿左移(或右移)来达到本地伪码与接收信号中的伪码相对滑动的目的,这种方式也称作固定步长串行搜索法(Fixed-Dwell Serial-Search Acquisition),其原理如下图所示。
根据图9-13所示的捕获方案,我们来简单计算一下完成捕获所需的最长时间。由于每次滑动步长为1个码元周期
T
c
=
1
/
R
c
T_{c}=1/R_{c}
Tc=1/Rc,每次调制都需要完成一个伪码周期(相当于一个数据码元周期
T
b
=
1
/
R
b
T_{b}=1/R_{b}
Tb=1/Rb)的相关运算,则最多需要完成
L
P
N
L_{PN}
LPN次调整,其最长捕获时间为
T
s
=
L
P
N
/
R
b
=
0.155
m
s
T_{s}=L_{PN}/R_{b}=0.155ms
Ts=LPN/Rb=0.155ms
由上文分析可知,伪码同步一般包括捕获和跟踪两个阶段,且两个过程需使用不同的环路来实现。如果能将两个过程用同一个环路来实现,或者尽可能多地对两种环路中的部分组件(如积分累加器)加以重用,则可大大减少所需的硬件资源,又因捕获与跟踪过程在时间轴上没有重复,这就为环路部件的重用提供了可能。下图是捕获与跟踪环路重用部件的实现方案。
上图中,与传统的同步方案的主要区别在于捕获方案的改变,即采用延迟锁相环中的超前支路与滞后支路两路相关累加器的平方和作为判断是否捕获到有用信号的依据,而不单只使用一路相关累加器的输出作为门限检测值。延迟锁相环跟踪环保持不变,与数字化捕获方案一样,采用固定步长调整本地伪码相位来形成滑动搜索及延迟锁定功能。两路累加器信号所形成的相关函数波形如下图所示。
上图所示,两路相关累加器输出信号的和所形成的相关峰顶是平坦的,与单路累加器所形成的相关风相比,相关峰值略有降低,相关峰的长度增加了一般。另外,采用固定步长串行搜索法的一个前提条件是收发端的伪码时钟稳定度及精度要足够高,一面因收发码钟的频差而引起累积相差过多,造成本地伪码滑动时无法到达同步状态。解决这一问题的方法主要有三种:一是采用传统的VCO控制本地伪码码钟频率,使其形成滑动功能;二是尽量提高收发两端伪码产生时钟的频率稳定度及精度;三是减少本地码的固定步长值,使之小于一个码元长度,如本实例中取每次不仅1/2码长(4个采样点)作为固定步长。则本地伪码的最长捕获时间为
T
s
=
2
L
P
N
/
R
b
=
0.31
m
s
T_{s}=2L_{PN}/R_{b}=0.31ms
Ts=2LPN/Rb=0.31ms
2.2 捕获及跟踪门限的MATLAB仿真
源码
clc
Rb=200*10^3; %码速率为200KHz
Lpn=31; %伪码序列长度
Rc=Rb*Lpn; %伪码速率
Fs=8*Rc; %采样速率为49.6MHz
a=0.8; %成形滤波器系数为0.5
N=2; %原始数据长度
t=0:(N*Lpn*Fs/Rc-1); %产生长度为L,频率为Fs的时间序列
t=t/Fs;
ploynomial=[1 0 0 1 0 1]; %产生PN码的本原多项式
reg=[1 0 0 0 0]; %设置PN码的初始相位
PN=E9_1_PnCode(ploynomial,reg); %调用函数产生PN码
bitstream=zeros(1,N); %产生N点原始二进制数据
source=rectpulse(bitstream,Lpn);%对N点原始数据进行Lpn倍重采样
%用伪随机码对原始数据扩频调制
data=zeros(1,N*Lpn);
for i=1:N
if bitstream(i)==0
data((i-1)*Lpn+1:i*Lpn)=PN;
else
data((i-1)*Lpn+1:i*Lpn)=~PN;
end
end
%将扩频数据转换成双极性码,以便进行平衡调制
for i=1:N*Lpn
if data(i)==0
data(i)=-1;
end
end
%对扩频后的数据以Fs频率采样
Ads=upsample(data,Fs/Rc);
%设计升余弦滤波器
n_T=[-2 2];
rate=Fs/Rc;
T=1;
Shape_b = rcosfir(a,n_T,rate,T);
%对采样后的数据进行升余弦滤波;
rcos_Ads=filter(Shape_b,1,Ads);
%取一个PN码周期(一个数据码元长度)的数据进行相关运算
pn_ad=Ads(1:Fs/Rb);
dat=rcos_Ads(Fs/Rb/2: Fs/Rb/2+Fs/Rb-1);
Len=length(dat)
%产生滞后1/2个伪码码元周期的支路数据
data_aft=[dat(Len-Fs/Rc/2+1:Len),dat(1:Len-Fs/Rc/2)];
%产生超前1/2个伪码码元周期的支路数据
data_pre=[dat(Fs/Rc/2+1:Len),dat(1:Fs/Rc/2)];
%捕获时的相关峰和差曲线,捕获时每次相位步进1/2个伪码码元
step=2;
PN_oc=pn_ad;
sum_aft=zeros(1,Lpn*step);
sum_pre=zeros(1,Lpn*step);
for i=1:Lpn*step
if i>1
PN_oc=[pn_ad((i-1)*Fs/Rc/step+1:Len),pn_ad(1:(i-1)*Fs/Rc/step)];
end
for j=1:Fs/Rb
if PN_oc(j)==1
sum_aft(i)=sum_aft(i)+data_aft(j);
sum_pre(i)=sum_pre(i)+data_pre(j);
else
sum_aft(i)=sum_aft(i)-data_aft(j);
sum_pre(i)=sum_pre(i)-data_pre(j);
end
end
end
square_aft=sum_aft.*sum_aft;
square_pre=sum_pre.*sum_pre;
square_sum=square_aft+square_pre;
square_sub=square_aft-square_pre;
figure(1);
t=1:Lpn*step;
subplot(211);
plot(t,square_aft,'--',t,square_pre);grid on;
legend('超前支路','滞后支路')
subplot(212);
plot(t,square_sum,'--',t,square_sub);grid on;
legend('相关峰合支路','相关峰差支路')
%跟踪时的相关峰和差曲线,捕获时每次相位步进1/8个伪码码元(1个采样点)
step=8;
PN_oc=pn_ad;
sum_aft=zeros(1,Lpn*step);
sum_pre=zeros(1,Lpn*step);
for i=1:Lpn*step
if i>1
PN_oc=[pn_ad((i-1)*Fs/Rc/step+1:Len),pn_ad(1:(i-1)*Fs/Rc/step)];
end
for j=1:Fs/Rb
if PN_oc(j)==1
sum_aft(i)=sum_aft(i)+data_aft(j);
sum_pre(i)=sum_pre(i)+data_pre(j);
else
sum_aft(i)=sum_aft(i)-data_aft(j);
sum_pre(i)=sum_pre(i)-data_pre(j);
end
end
end
square_aft=sum_aft.*sum_aft;
square_pre=sum_pre.*sum_pre;
square_sum=square_aft+square_pre;
square_sub=square_aft-square_pre;
figure(2);
t=1:Lpn*step;
subplot(211);
plot(t,square_aft,'--',t,square_pre);grid on;
legend('超前支路','滞后支路')
subplot(212);
plot(t,square_sum,'--',t,square_sub);grid on;
legend('相关峰合支路','相关峰差支路')
分析下图仿真结果,无论捕获状态(每次相位调整步长为4个采样点),还是跟踪状态(调整步长为1个采样点),超前和滞后支路的相关峰均十分明显,相关峰差支路(即鉴相曲线)与理论十分吻合,但相关峰的合支路并没有出现9-15(b)所示的形状,而且伪码完全同步时(鉴相曲线过零点)的相关峰明显低于最大峰值。显然,这种相关峰不利于维持环路的稳定,因为判断环路是否锁定(伪码是否处于跟踪状态)的依据就是判决相关峰值的大小。
图9-15中的曲线是在模拟信号状态,或者是采样频率足够高的情况下的分析结果,仿真图中相关峰值和支路之所以出现中间凹下去的形状,是因为采样频率不够高的原因,每个伪码码片仅采样8个点。