锁相环技术原理及FPGA实现(第四章4.1)

        经过前面几章的学习,我们已积累了设计锁相环电路的一些基本技能。根据作者的学习经验,这个阶段最期望的一定不是再去理解什么原理公式,学习什么方法思路。好比初次接触到羽毛球时,在网上看了一段中规中矩的教学视频,又刚好买回一支炫丽的球拍,走进球场,实在没有心情再听老师讲什么挥拍动作和击球技巧,只想痛痛快快地上球场打几拍了。这一章,我们将完成一个完整的一阶锁相环电路的 FPGA 设计及仿真测试过程。

4.1 一阶环的数字化模型

4.1.1 工程实例需求

        一般来讲,电路的数字化模型通常用 Z 域变换模型来描述。由于本章仅讨论一阶锁相环电路,环路中没有环路滤波器部件,锁相环路的模型得到了很大的简化,为便于讲述和理解,本章在讨论一阶环的设计时,仍采用模拟锁相环路设计方法,参数含义与模拟锁相环路相同。锁相环路的完整数字化模型将在本书后续章节进行讨论。设计任何一个电路,首要的是弄清设计需求。为便于比较分析,本章对第 3 章最后讨论的一阶锁相环电路进行 FPGA 实现。采用数字方式实现的一阶环的原理图如图 4-1 所示。

        这个框图如此简单,似乎只需要几行代码就可以完成。读者在实现过程中可以看到,
编写一阶锁相环的代码并不是一件困难的事,关键问题是分析理解各模块参数的设计及实
现方法。
例 4-1:一阶锁相环的 FPGA 设计

        在上面的设计需求中,系统采样频率及 FPGA 工作时钟为输入信号频率(数字振荡器
固有频率)的 20 倍。根据采样定理,理论上只需要大于输入信号最高频率的 2 倍即可,工
程上一般要求 5~8 倍。本实例选用较高的采样频率,便于更准确地查看输入输出信号波形,
减小因采样造成的波形失真。
        细心的读者可能已经注意到,需求中没有说明数控振荡器( Numerically Controlled
Oscillator, NCO)的频率控制灵敏度 K0 。根据第 3 章的讨论,这个参数( K0 与环路增益 K直接相关)对一阶环路起着关键性作用。在讨论数控振荡器工作原理及参数设计之前,先了解一下数字鉴相器的数字化设计方法。

4.1.2 数字鉴相器

根据第 3 章的讨论,通常用正弦形式鉴相器,这种形式的鉴相器由乘法器与低通滤波器组成,如图 4-2 所示。

        在数字域中的乘法器与模拟乘法器相似, FPGA 中也有相对应的乘法器 IP 核,直接使用即可。第 3 章 SystemView 实例选用的滤波器模型只考虑了截止频率及阻带衰减因素,在数字域设计滤波器相对来讲要复杂些,涉及滤波器的结构问题,相关内容在 4.2 节专门讨论。
        数字鉴相器涉及鉴相增益 Kd (相当于鉴相器的最大输出电压Ud )。在模拟电路中,这个参数的确定十分简单,物理意义也十分明确,即输出的最大电压值。在数字域中,这个参数的确定涉及二进制数据有效字长、小数点位数、二进制数据格式等问题。
        根据前面讨论的设计实例需求,输入数据为 10 比特位宽的二进制补码数据。也就是说,无论工程中模拟输入信号的电压是多少,采样后均转换成了有效位宽为 10 比特的二进制补码数据。请大家注意“有效位宽”的概念,这里的有效位宽可以理解为,数据中的最大绝对值一定是 511( 10 比特可表示的最大正值为 29-1= 511)或 512( 10 比特可表示的最小值为-29=-512),即达到了 10 比特补码数据所能表示的最大数据值,这个最大值就是输入信号的幅值。如何保证采样后的数据能够达到这个“最大值”呢?这通常由电路中 A/D 采样器与采样前端的自动控制增益( Auto Gain Control, AGC)器件配合完成,读者可以查阅相关资料了解其工作原理。
        信号的幅值取 511 V 还是 512 V?这会影响到后续计算的环路增益等参数,工程上一般取 512 V 即可(对于二进制数据来讲,取 2 的整数次方更便于计算),如果 A/D 采样后确实没有出现-512,这就会造成一定的计算误差,这也是数字信号处理中有效字长效应带来的计算误差,好在这样的误差一般不会影响到工程设计的正确性。
        幅值取 512 V,就相当于将定点数的小数点默认地设置在了最低位右边。根据第 2 章的讨论,对于二进制补码数据来讲,我们可以将小数点的位置人为任意设定,只要保证在运算过程中考虑小数点位置的运算规则即可。比如,将小数点定在最高位与次高位之间,则二进制补码数据的幅值就确定为 1,且与数据位宽无关。如何确定小数点位置,取决于如何便于计算系统所有参数。事实证明,对于锁相环电路来讲,将小数点设置在最低位右边,更有利于理解并设计其他部件的参数。
        根据设计需求, NCO 的输出(即锁相环路的输出信号)位宽也是 10 比特,同样取小数位置为最低位右边,则其输出信号幅度也是 512 V。根据二进制乘法运算规则,输入信号与NCO 输出信号相乘后,需要采用 20 比特来无失真地表示乘法结果。根据 2.2.4 节的讨论,只有当两个乘数均出现负的最大值时,才需要用 20 比特来表示最终的乘法结果,也就是说此时的有效位数才是 20 比特。反过来讲,只要两个乘数不同时出现负的最大值,则乘法结果的有效位数为 19 比特。并且,由于这一级的乘法结果没有达到最大的负值,则后级的所有乘法运算就都不可能出现最大负值的情况。
        FPGA 设计的重要原则是速度(系统最高运行速度)与面积(占用硬件资源)权衡问题。一比特数据,其实就是 1 位寄存器资源,如果每级运算均增加 1 位寄存器,当系统规模较大时,整个系统所增加的资源就比较可观了。因此,工程上通常的做法,可以对第一级乘法运算结果进行限幅处理,即判断出第一级乘法器出现两个乘数均取最大负值的情况时,直 接 将 运 算 结 果 减 1 作 为 输 出 值 。 具 体 来 讲 , 当 输 入 信 号 及 NCO 输 出 信 号 均 为“ 10_0000_0000”时,设置运算结果为“ 0100_0000_0000_0000_0000”减 1 所得到的值“ 0011_1111_1111_1111_1111”,最终用 19 比特表示即可(“ 011_1111_1111_1111_1111”)。或者对输入数据进行限幅处理,当判断出输入数据为“ 10_0000_0000”时,将其限幅为“ 10_0000_0001”,这样乘法运算结果只需采用 19 比特有效数据位宽。如果不考虑数字滤波器的作用,根据第 3 章的讨论,此时鉴相增益很容易计算,即

根据本书第 2 章的讨论,鉴相增益是有单位的,为 V/rad 。

4.1.3 数控振荡器

        数字控制振荡器(简称数控振荡器或 NCO)是数字锁相环电路中的重要组成部分,相当于模拟电路中的 VCO 器件。 NCO 也是软件无线电、直接数据频率合成器( Direct Digital
Synthesizer, DDS)、快速傅里叶变换( Fast Fourier Transform, FFT)等的重要组成部分,
同时也是决定其性能的主要因素之一,用于产生可控的正弦波或余弦波。随着芯片集成度的提高、在信号处理、数字通信领域、调制解调、变频调速、制导控制、电力电子等方面得到越来越广泛的应用。
        如何计算及设计 NCO 的控制灵敏度、频率分辨率等参数是工程师必须掌握的知识,要了解这些,先要理解其工作原理。数控振荡器的作用是产生正交的正弦和余弦样本。最简单的方法是采用查表法( Look-Up-Table, LUT),即事先根据各个正余弦波相位计算好其对应的正余弦值,并按相位角度作为地址存储该相位的正余弦值,构成一个幅度-相位转换电路(即波形存储器)。在系统时钟的控制下,由相位累加器对输入频率字不断累加,得到以该频率字为步进的数字相位,再通过相位相加模块进行初始相位偏移,得到要输出的当前相位,将该值作为取样地址值送入幅度-相位转换电路,查表获得正余弦信号样本。
        估计只是通过阅读上面的介绍,仍然难以理解 NCO 的工作原理,我们还是以图示进行说明。图 4-3 是三角函数的相位字与幅值对应关系图。读者可以想象右侧的圆盘以速率 fclk 的频率逆时针旋转。圆盘中的每个相位值对应一个幅值,幅值向左在纵坐标上投影,横纵标为时间轴,时间轴的单位间隔T f clk clk 1/ 。圆盘每旋转一周,在左侧就形成一个周期的正弦波。显然,圆盘旋转的速度越快,正弦波的频率越高。我们来计算一下图 4-3 中的正弦波频率。
        由图可知,整个圆盘被分成了 16 个相位间隔(每个相位点用 4 比特表示)。由于旋转时钟频率为 fclk ,即每个相位间隔的旋转时间T f clk clk 1/ ,则旋转一周需要的时间为16/fclk ,则正弦波的频率 f f  clk /16 。推而广之,如果相位点用 Bnco 比特(通常称为相位累加字位宽)来表示,一个圆周内分成 2Bnco 个相位间隔,则形成的正弦波频率

        由前面的分析可知,正弦波的频率完全由圆盘旋转一周的时间决定。控制圆盘旋转一周的时间除了改变了 外,还可以改变每次旋转的相位步长。式(4-1)是每次旋转一个单位相位间隔时的正弦波频率,如果每次跳变2个相位间隔,则形成的正弦波频率就是式(4-1)的两倍,也就是说,我们可以通过控制跳变的相位步长来改变正弦波的频率。由于相位点只是存储幅值的地址信息,因此可以很方便地通过控制读取相位地址的顺序和方式来实现改变输出信号频率的目的。
        由于式(4-1)是顺序读取每个最小相位间隔点产生的信号频率,也是系统所能输出的最小频率。这个频率也称为 NCO 的频率分辨率。假定每次读取最小相位间隔数为F,则形成的正弦波频率为f=F xf/2.(Hz)
        当 NCO 驱动时钟频率, 及相位字位宽 B.确定后,输入信号的频率完全由F 决定。因此,通常将F…称为NCO 的频率控制字。F一定是自然数,且小于等于2…。实际上,根据奈奎斯特定理,NCO 输出信号的最高频率为」/2,此时F=2..-。大家可以想一下,此时的正弦波是一个什么样的形状?每个波形周期只有两个采样点!这样的正弦波显然无法满足设计需要。系统时钟频率越高、频率分辨率越低,F 越小则产生的信号频率越小,且波形的连续性越好。

NCO 的输出信号频率表达式( 4-2)与第 3 章介绍的 VCO 特性似乎不完全一致,我们
将式( 4-2)简单变换一下,得到

4.1.4 计算环路增益

        前面讨论了数字鉴相器的增益(不考虑鉴相滤波器对增益的影响)、 NCO 的控制灵敏度,根据一阶环工作原理,以及第 3 章讨论的内容,容易得到数字一阶锁相环的环路增益

        至此,如果不考虑鉴相滤波器的影响,一阶环路的主要参数就设计完成了。乘法器和 NCO 都可以采用 Quartus 工具提供的 IP 核进行设计,根据上面的分析就可以着手实现。接下来需要对滤波器的设计问题进行讨论。第 3 章讨论环路的 SystemView 仿真时,滤波器的设计十分容易,只需设计带宽等几个参数就行了。在 FPGA 实现时,这才是设计的重点。

4.2 数字鉴相滤波器设计

        FIR 滤波器与 IIR 滤波器是最常用的数字滤波器,大多数常规通信中的滤波器都可以采用这两种滤波器来实现对噪声或干扰的滤除。这两种滤波器有一个共同的特点,即均是在时域对信号进行各种处理的,以实现滤除干扰获取有用信号的功能。读者如果有兴趣了解更多与滤波器的 FPGA 实现相关的内容,可以参考《数字滤波器的 MATLAB 与 FPGA 实现》一书。

4.2.1 FIR 与 IIR 滤波器

1. FIR 滤波器原理
        FIR 滤波器,即有限脉冲响应滤波器,顾名思义,指单位脉冲响应的长度是有限的滤波器。具体来讲, FIR 滤波器的突出特点是其单位取样响应 h(n)是一个 N 点长的有限长序列,0≤n≤N-1。滤波器的输出 y(n)可表示为输入序列 x(n)与单位取样响应 h(n)的线性卷积。

        从系统函数很容易看出, FIR 滤波器只在原点上存在极点,这使得 FIR 系统具有全局稳定性。 FIR 滤波器是由一个“抽头延迟线”加法器和乘法器的集合构成的,每一个乘法器的操作系数就是一个 FIR 系数。因此, FIR 的这种结构也被人们称为“抽头延迟线”结构。
        FIR 滤波器的一个突出优点是具有严格的线性相位特性。是否所有 FIR 滤波器均具有这种严格的线性相位特性呢?事实并非如此,只有当 FIR 滤波器单位取样响应满足对称条件时, FIR 滤波器才具有线性相位特性。
2. IIR 滤波器原理
IIR 滤波器,即无限脉冲响应滤波器,其单位脉冲响应是无限长的,其系统传递函数为

从系统函数很容易看出, IIR 滤波器有以下几个显著特性。
( 1) IIR 滤波器同时存在不为零的极点和零点。要保证滤波器为稳定的系统,需要使系统的极点在单位圆内,也就是说系统的稳定性由系统函数的极点决定。
( 2)由于线性相位滤波器所有的零点和极点都是关于单位圆对称的,所以只允许极点
位于单位圆的原点。由于 IIR 滤波器存在不为零的极点,因此只可能实现近似的线性相位特
性。也正是因为 IIR 滤波器的非线性相位特性限制了其应用范围。
( 3)在 FPGA 等数字硬件平台上实现 IIR 滤波器,由于存在反馈结构,因此受限于有限
的寄存器长度,无法通过增加字长来实现全精度的滤波器运算,滤波器运算过程中的有限
字长效应是工程实现时必须考虑的问题。
3. IIR 与 FIR 滤波器的比较
IIR 滤波器与 FIR 滤波器是最常见的数字滤波器,两者的结构及分析方法相似。为更好
地理解两种滤波器的异同,下面对其进行简单的比较,以便在具体工程设计中更合理地选
择滤波器种类,以更少的资源获取所需的性能。
( 1)通常在满足同样幅频响应设计指标情况下, FIR 滤波器的阶数等于 5~10 倍 IIR 滤波器的阶数。
( 2) FIR 滤波器能得到严格的线性相位特性(当滤波器系数具有对称性时), IIR 滤波器在相同的阶数情况下,具有更好的幅度特性,但相位特性是非线性的。
( 3) FIR 滤波器的单位脉冲响应是有限长的,一般采用非递归结构,必是稳定的系统,即使在有限精度运算时,误差也较小,即受有限字长效应影响较小。 IIR 滤波器必须采用递归结构,极点在单位圆内时才能稳定。这种具有反馈的结构,由于运算的舍入处理,易引起振荡现象。
( 4) FIR 滤波器的运算是一种卷积运算,它可以利用快速傅里叶变换和其他快速算法来实现,运算速度快。 IIR 滤波器无法采用类似的快速算法。
( 5)在设计方法上, IIR 滤波器可以利用模拟滤波器现成的设计公式、数据和表格等资料, FIR 滤波器不能借助模拟滤波器设计成果。由于计算机设计软件的发展, FIR、 IIR 滤波器的设计均可以采用现成的函数,因此在工程设计中两者的设计难度均已大大降低。
( 6) IIR 滤波器主要用于设计规格化的、频率特性为分段恒定的标准滤波器, FIR 滤波器要灵活得多,适应性更强。
( 7)在 FPGA 设计中, FIR 滤波器可以采用现成的 IP 核进行设计,工作量较小, IIR 滤波器的 IP 核很少,一般需要手动编写代码,工作量较大。
( 8)当给定幅频特性,而不考虑相位特性时,用 IIR 滤波器较好。当要求严格线性相位特性时,或幅度特性不同于典型模拟滤波器特性时,通常选用 FIR 滤波器。
本章中的实例采用 FIR 滤波器设计。
 

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于FPGA(Field-Programmable Gate Array)的全数字锁相环是一种数字电路设计,在Verilog语言中实现。下面是一个简单的Verilog代码来实现基于FPGA的全数字锁相环: module PLL ( input wire clk_in, // 输入时钟信号 input wire reset, // 复位信号 input wire sel_div, // 选择分频器 output wire clk_out // 输出时钟信号 ); reg [7:0] counter = 8'b00000000; // 计数器,用于分频器 reg [7:0] threshold = 8'b01100100; // 阈值,用于比较器 reg locked; // 锁定信号 always @(posedge clk_in or posedge reset) begin if (reset) begin counter <= 8'b00000000; // 复位计数器 locked <= 0; // 解锁状态 end else begin if (counter >= threshold) begin counter <= 8'b00000000; // 计数器归零 locked <= 1; // 锁定状态 end else begin counter <= counter + 1; // 计数器增加 locked <= 0; // 解锁状态 end end end // 输出时钟信号 always @(posedge clk_in or posedge reset) begin if (reset) begin clk_out <= 0; end else begin if (locked && sel_div) begin clk_out <= ~clk_out; end end end endmodule 在这段Verilog代码中,我们定义了一个名为PLL的模块,该模块接收输入时钟信号clk_in、复位信号reset和选择分频器信号sel_div,并输出时钟信号clk_out。 内部包含一个8位计数器counter和一个8位阈值threshold,用于分频器。当计数器达到阈值时,就会将其归零,并切换到锁定状态(locked为1),否则,计数器会增加并保持在解锁状态(locked为0)。 输出时钟信号的逻辑是,当锁定状态为1且选择分频器信号为1时,时钟信号会切换。 这是一个基本的Verilog代码实现数字锁相环的例子,你可以根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值