数字控制振荡器NCO

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数控振荡器的仿真结果及性能分析
利用 ALTERA 公司的 QuartusII 软件,采用 VHDL 硬件描述语言对上述数控振荡器结构进 行描述,在 Modlesim 上通过功能仿真,结果正确后综合出电路网表,最后将程序下载至 ALTERA 公司生产的 Stratix 器件 EP1S20B780C6 实现。
数字振荡器
高精百度文库范围
在正交数字混频器中,采用数字频率合成技术,可以将数字处理延续到正交调制之后或 正交解调之前,滤波器和增益控制就可以用数字方法实现,I、Q 两路也就不会存在增益的 不平衡,加上数控振荡器(NCO)的低正交误差,可以使系统误差降低到数据的最低比特(LSB) 的高精度范围。
调制灵活性
此外,正交数字混频器更容易与数字信号处理技术结合,使得数字调制更加灵活,进而 实现软件无线电所要求的软件可更改的调制解调。 数控振荡器是正交数字混频器的核心部 分,它具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正弦 P 余弦信号 正交特性好等特点。而且 NCO 的相位、幅度均已数字化,可以直接进行高精度的数字调制解 调。随着数字通信的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号 是实现高速数字通信系统必须解决的问题。
足够的精度
为了避免使用大容量存储器,可以考虑利用算法来产生正余弦样本。基于矢量旋转的 CORDIC 算法正好满足了这一需求,该算法主要用于计算三角函数、双曲函数及其它一些基 本函数运算。它有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的 精度。
运算公式
Walther JS 于 1971 年提出了统一的 CORDIC 形式。假定初始向量 V1(x1 ,y1)旋转角度 θ 后得到向量 V2(x2,y2):
结语
研究了正交数字混频器中数控振荡器的设计与实现方法,着重分析了如何在 FPGA 器件 中利用 CORDIC 迭代算法产生正余弦信号。结果表明,基于 CORDIC 迭代算法的数控振荡器, 仅用移位寄存器和加法器就可产生正余弦信号,不但省去了传统 NCO 庞大的存储器资源,而 且保留了一般数控振荡器频率分辨率高、频率变化速度快、相位可连续线性变化、生成的正 弦 P 余弦信号正交特性好等特点,非常适用于在正交数字混频器中进行高速高精度的数字调 制解调。
数字控制振荡器(NCO,numerically controlled oscillator)是软件无线电、直接数 据频率合成器(DDS,Direct digital synthesizer)、快速傅立叶变换(FFT,Fast Fourier Transform) 等的重要组成部分,同时也是决定其性能的主要因素之一,用于产生可控的正 弦波或余弦波。随着芯片集成度的提高、在信号处理、数字通信领域、调制解调、变频调速、 制导控制、电力电子等方面得到越来越广泛的应用。
即: 若 每 次 旋 转 的 角 度 θ 是 正 切 值 为 2 的 倍 数 , 即 θi=arctan(2-i) , 则 cosθi=(1+2-2i)-1/2 。假设以 δi 代表矢量的旋转方向,+1 表示逆时针旋转,-1 表示顺 时针旋转,故第 i 步旋转可用下式表示: 其中:(1+2-2i)-1/2 为模校正因子。对于字长一定的运算,该因子是一个常数,用 K 表示,以 16 bits 字长为例,则: 可见,迭代运算不能使幅值比例因子恒为 1。为了抵消因迭代产生的比例因子的影响, 可将输入数据 X,Y 校正后再参与运算,以避免在迭代运算中增加校正运算,降低 CORDIC 算法的速度。由此运算迭代式可以简化成: 公式(5)运算仅通过加法器及移位器就可以实现。此外,若用 Zi 表示第 i 次旋转时与目 标角度之差, 则: 经过 n 次旋转后,式(5)的 n 次迭代可以得到以下结果: 本文介绍的数控振荡器的设计是在式(7)的基础上,给定 x0=K ,y0=0,则迭代结果为: 将所需产生的角度值作为 z0 输入,通过式(5)、(6)的迭代运算,迭代结果输出的 xn 和 yn 就是所需要的三角函数值。
因此在实际设计中,采用的是图 2 所示的由 16 级 CORDIC 运算单元组成的流水线结构, 正常工作时只需 1 个时钟周期就能输出 1 个数据,为数据实现高速实时处理提供了前提。每 一级实现的功能是根据式(5)进行一次迭代,移位的位数等于当前的迭代级数,加减法选择 由该级中 Z 的最高位(符号位)决定,得到下一级的 X 、Y 和 Z 的值。经过 16 级流水线运 算后,Z 的值变为 0,X 和 Y 的值则为初始值 z0 的余弦和正弦值。每一级电路结构主要包 括 2 个移位器和 3 个加(减)法器,级与级之间直接相连,不需要额外的寄存器。θi 的值为 arctan(2-i),可将该小数转换为二进制数后,存储于存储单元中,为每一级流水线提供查 找表。若对于 16 级的流水线结构,则的范围是 0~15。
其中:Φword 为输入的频率控制字;fclk 为工作时钟;N 为相位累加器位数,可算出 NCO 输出的正余弦信号的频率;fout 为 30MHZ ;频率分辨率 Δf ≈1.5 kHz。频率分辨率说 明了若通过输入频率控制字来改变输出正余弦信号的频率时,可以达到 1.5 kHz 的最小步 进。另外,也可以根据实际需要的频率改变输入频率控制字值。当然,NCO 输出频率的上限 要受到 Nyquist 定律的限制,即 fout 的最大值为 fclkP2,实际设计一般不大于 0.4fclk。 图 3 为数控振荡器的部分仿真时序图。
经过上述相位的处理之后,即可获得具有所设定初始相位的一定频率的正余弦相位序 列,将此序列送入基于 CORDIC 算法的波形发生器,最终获得两路正交的正余弦输出序列。
NCO 的顶层电路结构
CORDIC 迭代算法的一种最直接的实现方法是,只设计一级 CORDIC 运算迭代单元,然后 在系统时钟的驱动下,将本级的输出作为本级的输入,通过同一级迭代完成运算。这种方法 虽然很直观,但是为了将计算结果提供给下一级运算而导致占用了大量的寄存器,带来许多 额外的资源消耗。而最大的缺点是运算速度较慢(需要 n-1 个时钟周期才能输出一个数据), 不利于数据的高速实时处理。
数控振荡器的基本实现原理
数控振荡器的作用是产生正交的正弦和余弦样本。传统方法是采用查表法(LUT),即事 先根据各个正余弦波相位计算好相位的正余弦值,并按相位角度作为地址存储该相位的正余 弦值,构成一个幅度 P 相位转换电路(即波形存储器)。在系统时钟的控制下,由相位累加器 对输入频率字不断累加,得到以该频率字为步进的数字相位,再通过相位相加模块进行初始 相位偏移,得到要输出的当前相位,将该值作为取样地址值送入幅度 P 相位转换电路,查表 获得正余弦信号样本。对于一个相位位数为 n ,输出信号幅度位数为 M 的数控振荡器,所 需查找表大小为 M×2n 。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的 容量,造成存储资源的大量消耗。而且,当需要外挂 RAM 来存储波形时,由于受到 RAM 读 取速度的影响,数控振荡器的输出速率必然受到制约。因此,当需要设计高速、高精度的数 控振荡器时,不宜采用查表法。
数控振荡器的 FPGA 实现
图 1 是数控振荡器的顶层电路。由图可见,频率控制字寄存器将接收到的的频率控制字 送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进 行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位进行相加, 得到当前的相位值。其中,相位累加器是决定 NCO 性能的一个关键模块,可以利用 FPGA 器 件的进位链实现快速、高效的电路结构。然而,由于进位链必须位于临近的逻辑阵列块 CLB 和逻辑单元 LC 内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链 也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。所谓 流水线技术,即把在一个时钟内要完成的逻辑操作分成几步较小的操作,并插入几个时钟周 期来提高系统的数据吞吐率。采用以上做法实现的相位累加器既能保证具有较高的资源利用 率,又能大幅提高系统的性能和速度。
CORDIC 迭代算法的流水线结构
设计中还应该注意迭代序列所能覆盖的角度范围,若直接采用 n 级迭代序列:0 ,1 , 2 ,…,n - 1 ,则迭代所能覆盖的角度范围仅有- 99.9°~99.9°。本设计采用了增加迭 代次数的方法来扩大角度覆盖范围,即增加两个 i = 0 的迭代,将迭代序列扩展为 0,0,0, 1,2,…,n-1,从而使角度覆盖范围也扩大到-π~π。
由于设计中采用了 Stratix 器件,该器件的 32 位加减器工作频率可以达到 90MHZ 以上, 为产生高速的正交信号提供高速可靠的的工作时钟。考虑到 NCO 的工作时钟瓶颈是在相位累 加器,因此可以根据具体需要缩减相位累加器的位数来提高 NCO 的工作时钟。
本文设计的 NCO 工作时钟为 100MHz,相位累加器的位数为 16 位,输入的频率控制字为 4CCCH,根据公式:
相关文档
最新文档