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

目录

  • 二阶环的FPGA实现(基于quartus+matlab)
    • 一.依据模拟环设计数字环
      • 1.1从模拟到数字——双线性变换
      • 1.2 环路滤波器的数字化
      • 1.3 理想二阶环的参数设计
      • 1.4 理想二阶环的VerilogHDLVerilog HDLVerilogHDL设计
    • 二.二阶环路滤波器仿真相关结论

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

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

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

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

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

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

H(s)=A(s−p)2=As−pAs−pH(s)=\frac{A}{(s-p)^2}=\frac{\sqrt{A}}{s-p}\frac{\sqrt{A}}{s-p}H(s)=(s−p)2A​=s−pA​​s−pA​​

因此,可以将一阶环节

As−p=Kas−p\frac{\sqrt{A}}{s-p}=\frac{K_a}{s-p}s−pA​​=s−pKa​​

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

dy(t)dt−py(t)=Kax(t)\frac{dy(t)}{dt}-py(t)=K_ax(t)dtdy(t)​−py(t)=Ka​x(t)

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

图1图1图1

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

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

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

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

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

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

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

H1(z)=Y(z)X(z)=T21+z−11−z−1H_1(z)=\frac {Y(z)}{X(z)}=\frac{T}{2}\frac{1+z^{-1}}{1-z^{-1}}H1​(z)=X(z)Y(z)​=2T​1−z−11+z−1​

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

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

Hi(z)=KaH1(z)1−pH1(z)H_i(z)=\frac{K_a H_1(z)}{1-pH_1(z)}Hi​(z)=1−pH1​(z)Ka​H1​(z)​

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

1.2 环路滤波器的数字化

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

F(z)=1+sτ2sτ1=2τ2+T2τ1+Tτ1z−11−z−1F(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τ1​1+sτ2​​=2τ1​2τ2​+T​+τ1​T​1−z−1z−1​

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


则上式变换为


其对应的系统结构可用下图来表示

1.3 理想二阶环的参数设计

各项参数如下:

  • 软件:Quartus prime 18.0
  • FPGA系统工作时钟速率=系统采样频率fsf_sfs​=8kHz8 kHz8kHz
  • 数字震荡器固有频率fo=400Hzf_o=400Hzfo​=400Hz
  • 输入为10bit二进制补码数据
  • 输出为10bit二进制补码数据
  • 鉴相乘法器输出位宽:19比特
  • 鉴相滤波器系数位宽:8比特
  • 鉴相滤波器输出数据位宽:30比特
  • 环路增益K=34 Hz
  • NCO频率字位宽:30比特
  • NCO相位字位宽:35比特

\quad\quad为便于比较,我们仍根据一阶环实例要求进行设计。根据前面的分析,理想二阶环的FPGA实现过程,不过是在一阶环的基础上增加一个环路滤波器功能模块而已。
\quad\quad根据前面的推导,求取环路滤波器系数C1、C2的值,需要获取采样周期TTT,以及滤波器时间常数τ1τ_1τ1​、τ2τ_2τ2​的值。由于系统采样频率fs=8000Hzf_s=8000Hzfs​=8000Hz,T=1/fs=1/8000T=1/f_s=1/8000T=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​=τ1​K​​ ξ=τ22Kτ1ξ=\frac{\tau_2}{2}\sqrt{\frac{K}{\tau_1}}ξ=2τ2​​τ1​K​​

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

10=22τ12−2τ2210=\sqrt{\frac{2}{{2}{\tau_1^2-2\tau_2^2}}}10=2τ12​−2τ22​2​​

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

1.4 理想二阶环的VerilogHDLVerilog HDLVerilogHDL设计

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

F(z)=Y(z)X(z)=C1+C2z−11−z−1F(z)=\frac{Y(z)}{X(z)}=C_1+\frac{C_2 z^{-1}}{1-z^{-1}}F(z)=X(z)Y(z)​=C1​+1−z−1C2​z−1​

\quad令

C2z−11−z−1X(z)=D(z)\frac{C_2 z^{-1}}{1-z^{-1}}X(z)=D(z)1−z−1C2​z−1​X(z)=D(z)
由 zzz变换的性质,上式的时域表达式为: C2x(n)+d(n)=d(n+1)C_2x(n)+d(n)=d(n+1)C2​x(n)+d(n)=d(n+1)
结合整个 ZZZ域表达式,可得出其最终的时域表达式为: y(n)=C1x(n)+d(n)y(n)=C_1x(n)+d(n)y(n)=C1​x(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;/ACHIEVEMENTassign pd_c1={{1{pd[29]}},pd[29:1]};//C1
assign pd_c2={{9{pd[29]}},pd[29:9]};//C2always @(posedge clk or posedge rst)  if (rst)sum_d <= 0;elsesum_d <= sum;assign sum = pd_c2 + sum_d;
assign frequency_df = sum_d + pd_c1;endmodule

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

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

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

  • 理想二阶环路增益直接影响环路的锁定性能,当环路参数设定后,环路的最大增益就确定了,当增益超过这个值时,环路不能锁定。
  • 环路能够正常锁定的情况下,增益越大,锁定时间越大,锁定速度越快。
  • 理想二阶环路的捕获带宽在工程设计中是有限的。
  • 仅改变环路增益,对捕获带宽的影响不大。

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

  1. FPGA信号处理系列文章——数字锁相环

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA信号处理系列文章--数字锁相环 锁相环的一些概念 鉴相器 Matlab 程序 锁相环的一些概念 1.捕获.锁定与跟踪的概念 捕 ...

  2. 数字锁相环的matlab仿真

    1.简介与仿真结论 2.理论分析 全数字锁相环路的工作原理:环路的输入信号通常为时间上连续的信号,如单频正弦波.模拟调频信号或移频键控信号等.环路的输出信号,即数字控制振荡器的输出信号为周期性脉冲序列 ...

  3. matlab中电压跟踪型pwm,新型数字锁相环实现对电压信号的无差跟踪

    描述 为获得PWM整流器的控制信号,需要利用网侧电压的相位进行坐标变换,但是在三相电网电压频率偏移时,普通锁相环存在响应速度慢.锁相精度差等缺点.本文基于坐标变换理论,提出一种通过电压矢量变换的数字信 ...

  4. 全数字锁相环基本原理讲解

    锁相环基本介绍 1.锁相环基本原理 锁相环是一个典型的负反馈系统.振荡器 负责产生振荡时钟信号,振荡器的输出时钟信号被反馈环路采样后与输入参考时钟信号 经由相位检测器进行比较,生成相位误差信号,经过滤 ...

  5. 全数字锁相环的基本原理

    全数字锁相环(Digital Phase-Locked Loop,DPLL)的基本原理是将被锁定的参考信号与产生的本地信号进行比较,并通过数字控制环路的方式调节本地信号的频率和相位,使其与参考信号同步 ...

  6. STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop

    ** 数字锁相环 ** Digital phase locked loop数字锁相环是一个通过PID算法使PWM调频改变相位,以达到与目标模型同频同相或同频稳定相位差的目的,在实际应用中较为常见,其中 ...

  7. 使用 MATLAB 编程,设计一个数字锁相环,用于数字通信系统同步, 并给出仿真结果

    好的,我们可以使用 MATLAB 来设计一个数字锁相环.首先,我们需要输入锁相环的参数,包括输入信号的频率.锁相环的增益和阈值等.然后,我们可以使用 MATLAB 的函数来生成输入信号,并将其作为锁相 ...

  8. 通信原理学习笔记2-1:模拟调制——相干解调的载波恢复、锁相环(平方环/Costas环)、变频/混频技术

    原始信号为基带模拟信号,要想在空气中传播信号,必须使用频带信号(频率高则天线长度降低,且可能进行频分复用等) 要产生频带信号,需要频谱搬移,这就是调制:基带信号经过调制,得到已调信号/调制信号/频带信 ...

  9. 全数字伺服系统中位置环和电子齿轮的设计

    全数字伺服系统中位置环和电子齿轮的设计 摘要:分析了伺服系统中位置环和电子齿轮的工作原理,同时介绍了一种位置环和电子齿轮的数字实现方法.最后通过实验验证了该设计的可行性. 关键词:伺服系统:位置环:电 ...

  10. 判断单链表是否有环及环的链接点(转)

    这篇文章是转载自蒙恩的罪人的博文:判断单链表是否有环及环的链接点(转),博文网址:http://blog.sina.com.cn/s/blog_725dd1010100tqwp.html 给定一个单链 ...

最新文章

  1. PAT甲级1098 Insertion or Heap Sort:[C++题解]堆排序和插入排序
  2. java exec mvn_maven---常用插件之EXEC
  3. sklearn、theano、TensorFlow 以及 theras 的理解
  4. BugkuCTF-WEB题矛盾
  5. 终于去掉了location.reload()弹出的问题。
  6. 例子:10秒后同意按钮可点击
  7. el-menu实现路由跳转及当前页的导航
  8. win10设置Python程序定时运行(设置计划任务)
  9. Android 解决EditText和ScrollView的滚动冲突
  10. L2Dwidget.js L2D网页动画人物添加
  11. [转]SQL Server 2000执行计划成本(2/5)
  12. 使用apktool+dex2jar+xjad进行反编译
  13. 我在淘宝做前端的这三年 — 第二年
  14. QTcpSocket的读写操作
  15. 开发一个APP到底要多少钱?
  16. Python爬虫实战--小猪短租爬虫
  17. 最新WIN10系统封装教程2019系列(七)——封装
  18. 为什么Jmeter 运行时时到达持续时间不停止?
  19. redis案例1--标签实现
  20. ZOJ Yukari's Birthday

热门文章

  1. 习题7-3 判断上三角矩阵
  2. Ubuntu安装无线网卡驱动
  3. 信息搜集 - 二层发现 arping
  4. 华为交换机密码重置(在S5720系列上验证)
  5. JS -获取屏幕/浏览器高度
  6. 影响计算机关键性能参数测试研究,基于Labview软件的ADC计算机辅助测试系统设计...
  7. 国产6678开发记录
  8. 基于知识图谱的古诗词推荐(python+爬虫+mysql+neo4j)(一)
  9. Android期末复习题库
  10. vue 自定义打印CLodop