数字锁相环:二阶环的FPGA实现(基于quartus+matlab)

写在前面的话:本篇文章参考自杜勇工程师的《锁相环技术原理及FPGA实现》

二阶环的FPGA实现(基于quartus+matlab)

\quad \quad 在前面的文章中分析了的心脏——环路滤波器,也分析了一阶环的FPGA实现,这篇文章讨论的是二阶环的FPGA实现。

一.依据模拟环设计数字环

\quad \quad 根据信号与系统的分析理论,一个系统完全由系统函数来确定,因此我们可从系统函数的角度出发,找到模拟电路与数字电路的转换关系,最终根据环路滤波器的数字域系统函数进行数字化设计。

1.1从模拟到数字——双线性变换

\quad \quad 连续时间系统H(s)的极点有两种情况:单重节点和多重节点。但是一个多重节点环节可以看成由多个单重极点环节级联构成。例如,对二重极点的系统,有

H ( s ) = A ( s − p ) 2 = A s − p A s − p H(s)=\frac{A}{(s-p)^2}=\frac{\sqrt{A}}{s-p}\frac{\sqrt{A}}{s-p} H(s)=(sp)2A=spA spA

因此,可以将一阶环节

A s − p = K a s − p \frac{\sqrt{A}}{s-p}=\frac{K_a}{s-p} spA =spKa

看成构成 H ( s ) H(s) H(s)的最基本环节,其中, K a K_a Ka为基本环节的增益。它对应于一阶微分方程

d y ( t ) d t − p y ( t ) = K a x ( t ) \frac{dy(t)}{dt}-py(t)=K_ax(t) dtdy(t)py(t)=Kax(t)

其系统结构如图1所示。对该系统离散化,主要是对系统中的积分运算离散化。


在这里插入图片描述

图 1 图1 1

\quad \quad 一次积分运算可以用梯形作数值计算,即

在这里插入图片描述

将上式第二行的积分用梯形法近似,则有


在这里插入图片描述

该式为一次积分运算离散化后的数值计算公式,其中的T为采样间隔。将自变量中的符号 T T T隐去,可写成差分方程的习惯表示形式

y ( n ) = y ( n − 1 ) + T 2 [ x ( n − 1 ) + x ( n ) ] y(n)=y(n-1)+\frac{T}{2}[x(n-1)+x(n)] y(n)=y(n1)+2T[x(n1)+x(n)]

两边取单边 z z z变换,并考虑到当 y ( n ) = 0 , n < 0 y(n)=0,n<0 y(n)=0n0


Y ( z ) = z − 1 + T 2 [ z − 1 X ( z ) + X ( z ) ] Y(z)=z^{-1}+\frac{T}{2}[z^{-1}X(z)+X(z)] Y(z)=z1+2T[z1X(z)+X(z)]

对上式进行整理,得到一阶环节的离散系统函数

H 1 ( z ) = Y ( z ) X ( z ) = T 2 1 + z − 1 1 − z − 1 H_1(z)=\frac {Y(z)}{X(z)}=\frac{T}{2}\frac{1+z^{-1}}{1-z^{-1}} H1(z)=X(z)Y(z)=2T1z11+z1

也就是说,一次积分单元离散后,是上式描述的离散系统。
\quad\quad 对连续一阶系统离散化后,可以得到其系统结构如下图所示


在这里插入图片描述

\quad\quad 根据上图,可求得离散的系统函数为

H i ( z ) = K a H 1 ( z ) 1 − p H 1 ( z ) H_i(z)=\frac{K_a H_1(z)}{1-pH_1(z)} Hi(z)=1pH1(z)KaH1(z)


在这里插入图片描述

\quad\quad 将此式与连续的一阶环路做对比,得出连续时间系统和离散时间系统之间的转换公式


在这里插入图片描述

1.2 环路滤波器的数字化

\quad\quad 有了系统函数转换表达式,即可获得各种模拟环路滤波器所对应的数字化系统函数表达式,进而获取其数字化实现结构。
\quad\quad 对于有源比例环路积分滤波器(理想积分滤波器)来讲,其数字化系统函数为


F ( z ) = 1 + s τ 2 s τ 1 = 2 τ 2 + T 2 τ 1 + T τ 1 z − 1 1 − z − 1 F(z)=\frac{1+s\tau_2}{s\tau_1}=\frac{2\tau_2+T}{2\tau_1}+\frac{T}{\tau_1}\frac{z^{-1}}{1-z^{-1}} F(z)=sτ11+sτ2=2τ12τ2+T+τ1T1z1z1

\quad\quad 由于在二阶锁相环路中,理想二阶环路具有共他两种环路无法比拟的优异性能,因此接下来主要讨论这种环路滤波器及其构成的锁相环路。
\quad\quad 对于上式,令


在这里插入图片描述
则上式变换为


在这里插入图片描述
其对应的系统结构可用下图来表示


在这里插入图片描述

1.3 理想二阶环的参数设计

各项参数如下:

  • 软件:Quartus prime 18.0
  • FPGA系统工作时钟速率=系统采样频率 f s f_s fs= 8 k H z 8 kHz 8kHz
  • 数字震荡器固有频率 f o = 400 H z f_o=400Hz fo=400Hz
  • 输入为10bit二进制补码数据
  • 输出为10bit二进制补码数据
  • 鉴相乘法器输出位宽:19比特
  • 鉴相滤波器系数位宽:8比特
  • 鉴相滤波器输出数据位宽:30比特
  • 环路增益K=34 Hz
  • NCO频率字位宽:30比特
  • NCO相位字位宽:35比特

\quad\quad 为便于比较,我们仍根据一阶环实例要求进行设计。根据前面的分析,理想二阶环的FPGA实现过程,不过是在一阶环的基础上增加一个环路滤波器功能模块而已。
\quad\quad 根据前面的推导,求取环路滤波器系数C1、C2的值,需要获取采样周期 T T T,以及滤波器时间常数 τ 1 τ_1 τ1 τ 2 τ_2 τ2的值。由于系统采样频率 f s = 8000 H z f_s=8000Hz fs=8000Hz T = 1 / f s = 1 / 8000 T=1/f_s=1/8000 T=1/fs=1/8000s。需要注意的是, τ 1 τ_1 τ1 τ 2 τ_2 τ2是典型的模拟环路滤波器参数,这也是为什么我们将目前的方法称为依据模拟环设计数字环的原因。
\quad\quad 如何计算 τ 1 τ_1 τ1 τ 2 τ_2 τ2?根据第前面关于环路滤波器的讨论,从环路相位裕度参数出发设计这两个参数,而相位裕度与阻尼系数ξ直接相关。根据图6-38的仿真结论,一般取阻尼系数ξ=0.7。对于理想二阶环来讲

ω n = K τ 1 ω_n=\sqrt{\frac{K}{\tau_1}} ωn=τ1K
ξ = τ 2 2 K τ 1 ξ=\frac{\tau_2}{2}\sqrt{\frac{K}{\tau_1}} ξ=2τ2τ1K

\quad\quad 注意,在上式中, K K K的单位为 r a d / s rad/s rad/s ω n ω_n ωn的单位为 r a d / s rad/s rad/s。现在,我们已经获取了环路增益参数( K = 34 H z = 213.6283 r a d / s K=34 Hz=213.6283 rad/s K=34Hz=213.6283rad/s)、阻尼系数( ξ = 0.7 ξ=0.7 ξ=0.7),还需要获取一个参数,比如 τ 1 、 τ 2 τ_1、τ_2 τ1τ2之间的关系,才能计算出最终的时间常数值,进而计算出 C 1 、 C 2 C1、C2 C1C2的值。
\quad\quad 根据模拟环路的性能分析,环路滤波器 3 d B 3dB 3dB截止带宽的大小直接影响到 V C O VCO VCO输出的信号质量,要计算出 τ 1 、 τ 2 τ_1、τ_2 τ1τ2之间的关系,需要首先确定环路滤波器3dB截止带宽的 f c f_c fc大小。根据前面的分析,取 f c = 10 H z f_c=10 Hz fc=10Hz(注意,公式中的截止频率单位为Hz),则有

10 = 2 2 τ 1 2 − 2 τ 2 2 10=\sqrt{\frac{2}{{2}{\tau_1^2-2\tau_2^2}}} 10=2τ122τ222

\quad\quad 结合前面的公式,带入 K , ξ K,ξ K,ξ的值,得到 τ 1 , τ 2 \tau_1,\tau_2 τ1,τ2的值,再根据 τ 1 、 τ 2 τ_1、τ_2 τ1τ2的值,分别计算环路滤波器系数C1,C2。

1.4 理想二阶环的 V e r i l o g H D L Verilog HDL VerilogHDL设计

\quad 这里只介绍二阶环的环路滤波器的 v e r l i o g verliog verliog 设计,由前面推导得到的二阶锁相环的Z域公式,将Z域公式转换到时域中,才能转换为我们可以用的形式。

F ( z ) = Y ( z ) X ( z ) = C 1 + C 2 z − 1 1 − z − 1 F(z)=\frac{Y(z)}{X(z)}=C_1+\frac{C_2 z^{-1}}{1-z^{-1}} F(z)=X(z)Y(z)=C1+1z1C2z1

\quad

C 2 z − 1 1 − z − 1 X ( z ) = D ( z ) \frac{C_2 z^{-1}}{1-z^{-1}}X(z)=D(z) 1z1C2z1X(z)=D(z)

z z z变换的性质,上式的时域表达式为:
C 2 x ( n ) + d ( n ) = d ( n + 1 ) C_2x(n)+d(n)=d(n+1) C2x(n)+d(n)=d(n+1)

结合整个 Z Z Z域表达式,可得出其最终的时域表达式为:
y ( n ) = C 1 x ( n ) + d ( n ) y(n)=C_1x(n)+d(n) y(n)=C1x(n)+d(n)
具体实现代码如下:

/*

MODULE DECLARATION

*/
module LoopFilter(
rst,
clk,
pd,
frequency_df
);




/*

FUNCTION DECLARATION

*/


/*

LOCAL PARAMETER

*/


/*

PORT DECLARATION

*/
input  rst;                              //复位信号,高电平有效
input  clk;                              //FPGA系统时钟:8 kHz
input  signed [29:0]  pd;                // 输入数据:8 kHz,数据源来自fir滤波器的输出
output signed [29:0]  frequency_df;      // 环路滤波器输出数据



/*

REG & WIRE DECLARATION

*/
reg signed[29:0]sum_d;
wire signed[29:0]pd_c2,pd_c1,sum;


/ACHIEVEMENT

assign pd_c1={{1{pd[29]}},pd[29:1]};//C1
assign pd_c2={{9{pd[29]}},pd[29:9]};//C2


always @(posedge clk or posedge rst)  
       if (rst)
          sum_d <= 0;
       else
          sum_d <= sum;
		  
assign sum = pd_c2 + sum_d;
assign frequency_df = sum_d + pd_c1;

endmodule

这里需要说明的是,为了简化运算,C1和C2以移位代替了乘法,所以数值采用了近似的方法。
\quad 再结合一阶环中的其他代码,就可以得到完整的二阶环 v e r l i o g verliog verliog代码。

二.二阶环路滤波器仿真相关结论

\quad 经过对二阶环的仿真,我们得出了下面的结论:

  • 理想二阶环路增益直接影响环路的锁定性能,当环路参数设定后,环路的最大增益就确定了,当增益超过这个值时,环路不能锁定。
  • 环路能够正常锁定的情况下,增益越大,锁定时间越大,锁定速度越快。
  • 理想二阶环路的捕获带宽在工程设计中是有限的。
  • 仅改变环路增益,对捕获带宽的影响不大。
  • 4
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
锁相环(Phase-Locked Loop,简称PLL)是一种常用的信号处理技术,用于在一个系统中将输入信号的相位和频率与参考信号同步。锁相环通常由相位比较器、低通滤波器和振荡器组成。 在Matlab中可以实现二阶锁相环。首先,需要定义相位比较器的函数。常见的相位比较器有边沿触发相位比较器和恒幅差分相位比较器。这些函数可以通过建立输入信号和参考信号的数学模型来实现。 接下来,需要设计一个二阶低通滤波器来滤除相位比较器输出信号中的高频噪声。常见的二阶低通滤波器有巴特沃斯滤波器和巴特沃斯型滤波器等。这些滤波器可以通过Matlab中的滤波函数设计。 最后,需要设计一个振荡器来产生输出信号。振荡器可以通过建立一个数学模型来实现,例如正弦函数或方波函数。然后,将锁相环的输出信号连接到相位比较器的输入端,形成一个闭控制系统。 在Matlab中,可以通过建立系统的传递函数、状态空间模型或直接描述差分方程来模拟锁相环的运行过程。通过使用Matlab的控制系统工具箱,可以进行系统的设计、模拟和性能评估。 总之,通过使用Matlab,可以方便地实现锁相环的设计和仿真。通过调整系统参数和优化设计,可以使锁相环对输入信号的相位和频率更加精确同步,并适用于不同的应用领域,例如通信系统、数据采集和信号处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值