数字电路/DDS
一个直接数字合成器 (DDS) 允许创建频率由数字控制的周期性波形。
DDS 输出的频率与电路使用的石英的稳定性相同。频率步长可以非常小,频率值范围可达时钟频率的一半。
DDS 可用于实现函数发生器或振荡器,并将其用于更复杂的电路中,例如混频器、调制器和锁相环。
DDS 是一个自由运行的计数器。当计数器达到最大值时,它会折叠回零。
电路输出可以是三重的
- 计数器输出提供可编程频率的锯齿波信号
- 计数器 MSB 提供具有相同频率的二进制信号
- 将锯齿波输出视为相位信号,可以计算三角函数并提供正弦或甚至正交正弦和余弦输出
正弦和余弦值传统上是通过 ROM 或查找表 (LUT) 获得的。但是,CORDIC 运算符计算这些函数的精度相同,同时硬件成本大大降低。
如果计数器在每个上升沿递增 1,则其形状将是一个周期为
的锯齿波,其频率为
如果计数器在每个上升沿递增,它将计数 倍快,其频率为
计数器本身提供锯齿波信号。计数器 MSB 提供方波信号。将锯齿波视为相位信号可以产生正弦波输出。正弦函数可以通过 CORDIC 运算符进行计算。
下图显示了 DDS 的时间信号。
方波和正弦波的傅里叶变换在下图中给出。
正弦波给出两个蓝色的峰值,正如预期的那样。方波是周期性信号,只有奇次谐波。
前面的图像是使用一个很好的步长值:16 制作的。当步长值不能完全整除计数器范围时,锯齿波的齿会更加参差不齐,方波输出会显示一种抖动:其平均频率是所需的频率,但信号边沿会移到最接近的活动时钟边沿。
下图显示了具有奇数步长的 DDS 的时间信号。
方波和正弦波的傅里叶变换在下图中给出。
正弦波仍然是一个纯音。方波显示出更多的频率成分。
DDS 电路可以在 FPGA 等可编程电路中非常有效地实现。它由一个计数器组成,后面跟着一个从计数器输出计算正弦的模块,该输出被视为相位。正弦的计算最好使用 CORDIC 算法进行。
DDS 的 VHDL 源代码 可以在 opencores 上找到。这种实现更喜欢使用查找表而不是 CORDIC 来计算正弦函数。