提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档
前言
锁相环路的捕获时间与初始频差直接相关。初始频差越大,捕获时间越长。另一方面,锁相环的捕获带宽较小。因此,有必要在锁相环路前添加一级锁频环路,将载波频偏差控制在较小范围内,以便于锁相环的快速捕获。
科斯塔斯环
科斯塔斯环首先要介绍一个新概念 科斯塔斯环是科斯塔斯环 (PLL) 用于抑制载波调制信号(如双边带抑制载波信号)和相位调制信号(如 BPSK、QPSK)载波频率中恢复。 它由通用电气公司制造 John P. Costas 在 1950 年代发明。其发明对现代数字通信产生了深远的影响。 Costas 无线接收器是环的主要应用。 与其他基于 PLL 与检测器相比,其优点是在小偏差下,Costas 环路误差电压为 相比于其他PLL检测器的 加倍灵敏度也使科斯塔斯环特别适合跟踪多普勒频移载波,特别是在 OFDM 和 GPS 接收器中 基于科斯塔斯环结构的锁频环和锁相环的实现也相似,分为这些部分 1、 鉴频器/鉴相器 2、 环路滤波器 3、 频率可变振荡器
这里只介绍锁频环的部分,下一章介绍锁相环
鉴别器
介绍几种鉴频器:
定义点积和叉积
反正切函数的四象限, 优点:最准确的鉴频方法,参与范围为 缺点:会受到比特跳变的影响
反正二象限切函数是最准确的鉴频方法,缺点是会受到比特跳变的影响 优点:也是最准确的鉴频方法,不受比特跳变的影响 缺点:鉴频牵入范围为 鉴频器3
也就是的振幅值,即相当于信号振幅值的平方。在某些情况下,如果在输入前存在AGC在功能方面,振幅值是一个相对稳定的值,因此可以用固定数代替。
优点:计算量小,不受比特跳变的影响,适用于纯逻辑实现 缺点:鉴频近似准确,涉及范围为
环路滤波器
二级环路滤波器的结构如下图所示: 噪声带宽
频率可变振荡器
对于FPGA而言,就是DDS NCO,matlab模拟中没有额外的模块。在积分开始时直接调整频率
matlab程序
模拟一个接收信号,接收信号为一个(1e6- 240)Hz信号的点频采样率为4.1e6Hz,频率会在第一秒变成(1e6- 190)Hz,频率在第二秒变成(1e6 10)Hz.让我们看看本地产生的载波信号是否能在频率上跟踪接收信号。此外,接收信号在前一秒随机翻转码元,码元率为1KHz,1ms的积分时间 环路带宽1000Hz,这里用的是atan的鉴相器
format long g; clc;clear all;close all SampleClk = 4.1e6; PointNum = SampleClk*5; IF = 1e6- 240 ; Carr_cos(1:SampleClk) = cos(2*pi*(IF/SampleClk).*[1:SampleClk] 0); Carr_sin(1:SampleClk) = sin(2*pi*(IF/SampleClk).*[1:SampleClk] 0); IF = IF 50;
Carr_cos(1+SampleClk:PointNum) = cos(2*pi*(IF/SampleClk).*[SampleClk+1:PointNum] + 0);
Carr_sin(1+SampleClk:PointNum) = sin(2*pi*(IF/SampleClk).*[SampleClk+1:PointNum] + 0);
IF = IF + 200;
Carr_cos(1+2*SampleClk:PointNum) = cos(2*pi*(IF/SampleClk).*[2*SampleClk+1:PointNum] + 0);
Carr_sin(1+2*SampleClk:PointNum) = sin(2*pi*(IF/SampleClk).*[2*SampleClk+1:PointNum] + 0);
signal0 = Carr_cos +j*Carr_sin;
data = awgn(signal0,-5,'measured');
n = SampleClk/1000;
num=5000;
a=rand(1,num);
a(a>0.5)=1;
a(a<=0.5)=-1;
for m = 1 :1: 1000
data(m*n+1:(m + 1)*n) = a(m)*data(m*n+1:(m + 1)*n);
end
fc = 1e6;
n = SampleClk/1000;
nf = floor(length(data)/n);
FAccCarReg0 = 0;
frame = 0;
FLL_BL = 100;
tc1 = 1/1000;
k1 = 1;
[d0,d1] = Fil2ndPara(k1,FLL_BL,tc1);
df(1:nf) = 0;
df1(1:nf) = 0;
PQaccu = 0;
PIaccu = 0;
fll = 0;
carr_accu = 0;
counter = 1;
init_carr_freq = fc;
for frame = 1 : nf
% frame
carr_freq = init_carr_freq + fll;
for clk = 0 : n-1
%clk
carr_accu = rem(carr_accu,1);
cosine = cos(2*pi*(carr_accu));
sine = sin(2*pi*(carr_accu));
baseband = (data(((frame-1)*n+clk+1))).*(cosine -j*sine);
PI_clk = real(baseband);
PQ_clk = imag(baseband);
PQaccu = PQaccu + PQ_clk;
PIaccu = PIaccu + PI_clk;
carr_accu = carr_accu + carr_freq/SampleClk;
end
PQ(frame) = PQaccu;
PI(frame) = PIaccu;
if PI(frame) == 0
PI(frame) = 0.0000001;
end
PQaccu = 0;
PIaccu = 0;
if frame <5
fll = 0;
else
df(frame) = FrqErr(PI,PQ,frame);
[fll,FAccCarReg0] = Fil2nd(d0,d1,FAccCarReg0,df(frame));
end
fll_frame(frame) = fll;
end
figure(1)
plot(fll_frame);
figure(4)
plot(PI);
hold on
plot(PQ);
hold on
频率跟踪示意图: I/Q幅度示意图 在两次频率跳变中,都正常相应,能够进行快速调整跟踪到与输入信号相同的频率。
但如果将第二次变频幅度变成300Hz的话 则频率锁定到错误的频率上去了。
如果使用atan2的鉴相器,在有码元翻转的情况下,鉴频结果会被干扰,如果不加额外的判断,那么只有在没有码元翻转的时候,才能正常工作
因此实际应用中,根据情况来确定使用哪一种鉴频器