数控振荡器(NCO)

在数字信号处理领域,数控振荡常被用于DDC(数字下变频)和DUC(数字下变频)中产生所需频率信号。关于DDC和DUC的部分后面再整理(也可参考该网址:数字下变频(DDC)和数字上变频(DUC)_ddc duc-CSDN博客),下面主要从以下几个方面整理笔记:

1 模块结构

NCO在DDC或者DUC中的位置如下图所示,用于产生所需频率信号,然后再通过滤波器选择最终所需的频率信号,如果滤波器为低通滤波器,则对应的DDC,如果滤波器为高通滤波器,则对应的DUC:

关于NCO的结构主要包括相位累加器和正弦波存储ROM,其框图如下紫色框所示,黄色框为相位累加器,红色为存储正弦波形数据。

2 实现原理

先说结论:生成的特定频率信号为上图中的y信号,该y信号的频率为f1,f1和系统频率f0、频率控制字M以及DFF的位宽N bit之间的关系如下:

f_{1}=\frac{Mf_{0}}{2^{N}}

ROM里存储的是正弦波一个周期的数值,其存放地址对应的数值是和相位值相符的正弦波值,比如0地址存放的是相位为0的正弦波值。而ROM存放的数据个数由DFF的数据位宽N决定,即DFF的输出数据即是ROM的地址(这里考虑的是存储的整个正弦波周期的数据,一个地址存储一个正弦波数据,未考虑数据的对称性等因素)。

频率控制字M是一个可配置的参数,它的位宽为N bit,具体配置参数可根据系统时钟和所需输出信号频率决定。M决定了相位累加器的步进值,即一个周期对应2\pi相位,被分成了2^{N}份,如果M=1,则相位累加器的步进值为\frac{2\pi }{2^{N}},即对应一个ROM的地址空间。如果M=2,则相位累加器的步进值为2\frac{2\pi }{2^{N}},即ROM的地址空间每次增加2.

输出信号y的频率f1的理解:系统时钟为T0,若M=1,则需要2^{N}个系统时钟周期y才能完成一个周期;如果M=2,则需要\frac{2^{N}}{2}个系统时钟周期y才能完成一个周期,即T_{1}=\frac{2^{N}}{M}T_{0},即f_{1}=\frac{Mf_{0}}{2^{N}}

3 其他关注点

NCO的工作原理捋清楚后,剩下的就是具体的硬件设计。设计时需要从芯片的PPA(performance、power、area)三个方面考虑。在NCO的设计中主要考虑的点需要从功耗(power)和面积(area)出发,下面列出三个点:

(1)ROM的设计

由于正弦波在四个现象具有对称性,所以在存储正弦波数值时可以不用把全周期的数值都存下,从功耗和面积考虑,只需存下半个周期或者甚至四分之一个周期的数值。

(2)频率字M的设计

频率控制字M是由寄存器配置好的,因此从功耗考虑,可以采用clock_gate将不需要配置时把时钟关掉。

4 参考资料

mt-085_cn.pdf (analog.com)

数控振荡器原理及实现-原理 - Vinson88 - 博客园 (cnblogs.com)

通信原理及系统系列37——FPGA实现NCO原理分析-CSDN博客

笔记就暂时整理到此,如有新内容会及时更新,如有错误欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值