提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前面,我们将了锁频环和锁相环,实际上都是为了完成一件事,就是载波同步。锁相环就是为了本地载波与接收载波进行同步。那如果接收信号中还含有码元的话,特别是对于扩频信号而言,是必须进行同步的,如果码元不同步的话,则无法进行能量的累积,进而载波也无法同步。
前面我们讲了自相关和互相关,以GPS信号为例,其自相关性能和互相关性能都非常好。
自相关表现在:只有码元对齐才有明显的峰值
互相关表现在:不同组的码元进行相关是不会出现明显的峰值的
因此,通过这种相关特性很容易识别信号中是否包含一组特定的码元。
关于粗同步,这里就不详细讲了,初同步需要将码元的位置误差限定在【-1,1】码元内。否则就无法进行下一步的码元精同步。
超前—滞后符号同步算法利用的是信号波形的对称性,即经过匹配滤波器或相关器的输出信号是对称的,如下图所示。对于下图所示的矩形脉冲,匹配滤波器的输出在t=T时达到最大值。只要采样值在峰值上,就一定能保证符号同步
在噪声存在的情况下,如果没有在峰值点对信号采样,而在t=T-△时早采样,在t=T+△时迟采样。那么由于自相关函数相对于最佳采样时刻t=T是偶函数,早采样值得绝对值和迟采样值的绝对值就相等。在这种情况下,适当的采样时刻应该是在t=T-△和t=T+△之间的中点上。这一条件构成了超前—滞后门同步器的基础。
下图是其功能的实现结构
下面介绍两种鉴相器
(1)非相干超前减滞后幅值法:它简称前减后幅值法,码环前减后幅值鉴别器法的计算公式为:
上式假定了接收机得到的自相关幅值的最大值为1;否则,我们可对上式进行单位化,得到如下更为常用的鉴别公式
(2) 非相干超前减滞后功率法:它是将超前支路与滞后支路上的非相干积分功率相减,即
相应地,其单位化后的计算公式为:
因为在非相干超前减滞后幅值法中的自相关幅值E和L需要经过开根号才能求得,而这种非相干超前减滞后法却可以免去开根号运算,所以后者的计算量比前者有所减少;然而,由于自相关幅值曲线与功率曲线不相重合,因而非相干超前减滞后功率法会产生一定的鉴相误差。考虑到码环鉴别器的基本思路是让码环朝着使超前支路功率与滞后支路功率相等的方向上调节复制码相位,这种鉴相法最终也会使码环达到稳态。
对于第一种方法需要开根号,不过开根号也有近似的计算方法。
可以用以下的Robertson近似计算法来替代:
而上式也可以等价地表达成
模拟一个接收信号,接收信号为GPS L1CA码,码速率为1.023Mbps,采样率为4.1e6Hz,1ms的积分时间
clc;clear all;close all
SampleClk = 4.1e6;
PointNum = SampleClk*4;
caCode = prn_GPS_L1CA_Gen(1);
CodeRate = 1.023e6;
CodeLen = 1023;
indexInt = 0;
index = CodeRate/SampleClk*[1:PointNum]+0;
indexInt = mod(floor(index),CodeLen) + 1;
SampleCode = caCode(indexInt);
signal0 = SampleCode ;
data = signal0;
code = prn_GPS_L1CA_Gen(1);
n = SampleClk/1000;
nf = floor(length(data)/n);
AccCodReg0 = 0;
frame = 0;
DLL_BL = 2;
tc1 = 1/1000;
k1 = 1;
[cf0,cf1] = Fil2ndPara(k1,DLL_BL,tc1);
df(1:nf) = 0;
df1(1:nf) = 0;
PQaccu = 0;
PIaccu = 0;
EQaccu = 0;
EIaccu = 0;
LQaccu = 0;
LIaccu = 0;
dll = 0;
code_accu = 0;
counter = 1;
init_code_freq = 1.023e6;
E1_code = 0;
E1_code_d1 = 0;E1_code_d2 = 0;E1_code_d3 = 0;E1_code_d4 = 0;
P1_code = 0;
L1_code = 0;
for frame = 1 : nf
code_freq = init_code_freq + dll;
for clk = 0 : n-1
baseband = (data(((frame-1)*n+clk+1)));
II = real(baseband);
QQ = imag(baseband);
code_accu_old = code_accu;
code_accu = rem(code_accu,1);
if code_accu_old > code_accu
if(counter == 1023)
counter = 1;
else
counter = counter + 1;
end
end
E1_code_d4 = E1_code_d3;
E1_code_d3 = E1_code_d2;
E1_code_d2 = E1_code_d1;
E1_code_d1 = E1_code;
E1_code = code(counter);
P1_code = E1_code_d2;
L1_code = E1_code_d4;
PI_clk = II*P1_code;
PQ_clk = QQ*P1_code;
EI_clk = II*E1_code;
EQ_clk = QQ*E1_code;
LI_clk = II*L1_code;
LQ_clk = QQ*L1_code;
PQaccu = PQaccu + PQ_clk;
PIaccu = PIaccu + PI_clk;
EQaccu = EQaccu + EQ_clk;
EIaccu = EIaccu + EI_clk;
LQaccu = LQaccu + LQ_clk;
LIaccu = LIaccu + LI_clk;
code_accu = code_accu + code_freq/SampleClk;
end
PQ(frame) = PQaccu;
PI(frame) = PIaccu;
EQ(frame) = EQaccu;
EI(frame) = EIaccu;
LQ(frame) = LQaccu;
LI(frame) = LIaccu;
if PI(frame) == 0
PI(frame) = 0.0000001;
end
PQaccu = 0;
PIaccu = 0;
EQaccu = 0;
EIaccu = 0;
LQaccu = 0;
LIaccu = 0;
dll_err(frame) = DllErr(EI,EQ,LI,LQ,frame);
[dll,AccCodReg0] = Fil2nd(cf0,cf1,AccCodReg0,dll_err(frame));
if frame <5
dll = 0;
else
end
dll_frame(frame) = dll;
end
figure(2)
plot(dll_frame);
figure(4)
plot(PI,'-r');
hold on
plot(PQ);
hold on
plot(EI);
hold on
plot(EQ);
hold on
plot(LI);
hold on
plot(LQ);
绿色线和黄色线就是超前支路和滞后支路相关值,红色就是我们的最佳采样值
dll_err 表示接收码元与本地码元的频率误差
实际上,超前滞后同步类似于载波的锁相环。只是这个类似的锁相环载波频率很低而已