资讯详情

FPGA信号处理系列文章——数字锁频环

提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档

FPGA信号处理系列文章-数字频环


前言

锁相环路的捕获时间与初始频差直接相关。初始频差越大,捕获时间越长。另一方面,锁相环的捕获带宽较小。因此,有必要在锁相环路前添加一级锁频环路,将载波频偏差控制在较小范围内,以便于锁相环的快速捕获。

科斯塔斯环

科斯塔斯环首先要介绍一个新概念 科斯塔斯环是科斯塔斯环 (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的鉴相器,在有码元翻转的情况下,鉴频结果会被干扰,如果不加额外的判断,那么只有在没有码元翻转的时候,才能正常工作

因此实际应用中,根据情况来确定使用哪一种鉴频器

标签: 300kg传感器accu

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台