数控振荡器
数控振荡器(NCO,numerically controlled oscillator)是软件无线电、直接数据频率合成器(DDS,Direct digital synthesizer)、快速傅立叶变换(FFT,Fast Fourier Transform)等的重要组成部分,同时也是决定其性能的主要因素之一,用于产生可控的正弦波或余弦波。
数控振荡器有多种实现方法,最常用的方式就是基于直接数字频率合成技术(DDS,Direct digital synthesizer)的三角函数发生器。与传统的频率合成器相比,DDS 具有成本低、功耗低、分辨率高和转换时间短等优点。
DDS 算法原理
DDS结构如上图所示,在参考时钟的驱动下,相位累加器对频率控制字进行线性累加,得到的相位码对波形存储器寻址,使之输出相应的幅度码,经过数模转换器得到相应的阶梯波,最后再使用低通滤波器对其进行平滑,得到所需频率的平滑连续的波形。
相位累加器
相位累加器的结构如上图所示,由 N 位加法器与 N 为累加寄存器级联构成。每来一个时钟 \(f_{CLK}\),加法器将频率控制字 K 与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。这样在相位累加器在时钟的控制下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟周期里,将频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是 DDS 的输出的信号频率。
DDS 的输出的信号频率计算方式如下: \[ f_{OUT} = \frac{f_{CLK}K}{2^N} \] 频率分辨率(即频率的变化间隔)为: \[ \Delta f=\frac{f_{CLK}}{2^N} \]
波形存储器
波形存储器所存储的幅度值与余弦信号有关。用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可以将存储在波形存储器内的波形抽样值取出,完成相位到幅值的变换。
余弦信号在一个周期内相位和幅度的变化关系如上图所示。一个 \(N\) 位的相位累加器对应着圆上的 \(2^N\) 个相位点,其分辨率为 \(\Delta \phi = 2\pi/2^N\)。上图 \(N = 4\),共存在 16 种相位值与 16 种幅度值相对应,波形存储器的字节数决定了相位量化误差,量化的比特数决定了幅度量化误差。在实际的 DDS 中,可以利用余弦波形的对称性,将 \(2\pi\) 范围内的幅值相位点减小到 \(\pi/2\) 内以降低所需的存储量。
D/A 转化器 & 低通滤波器
波形存储器的输出送到 D/A 转换器,D/A 转换器将其转化为合成信号的模拟量幅值,低通信号用于滤除不需要的取样分量,以便输出频谱纯净的余弦信号。
DDS 算法的 Verilog 实现
待完成