秒懂 DDS 信号发生器

文章来源:FPGA入门到精通

在数字信号处理的奇妙世界里,DDS(直接数字式频率合成器)信号发生器是一个极其重要的工具。它能够生成各种精确的波形,如正弦波、方波、三角波和锯齿波等,广泛应用于通信、雷达、电子测量等众多领域。

今天,我们就来一起探索如何基于 FPGA 实现一个简易的 DDS 信号发生器,即使你是 FPGA 小白,也能轻松上手!

一、DDS的工作原理

DDS(直接数字合成器,Direct Digital Synthesizer)是一种全新的数字信号频率合成方法,具有低成本、低功耗、高分辨率和快速转换时间等优点。

1、DDS结构

DDS常见结构示意图如下:

DDS常见结构示意图.png

从上图中可以看到,DDS组成主要有相位累加器、相位调制器、波形数据表 ROM、D/A 转换器等。

结构说明:

(1)系统时钟CLK,周期表示为Tclk,频率表示为fclk。
(2)频率字输入F_WORD
一般为整数,控制输出信号的频率大小,数值越大,输出频率越高,常用K表示。
输入后接入了一个寄存器,主要作用是避免影响到后续的相位累加器。
(3)相位字输入P_WORD
一般为整数,控制输出信号的相位偏移,常用P表示。
输入后也接入了一个寄存器,主要作用是避免影响到后续的相位调制器。
(4)输出信号为CLK_OUT,频率为fout。
(5)相位累加器
输入为频率字输入K,表示相位增量,位宽用N表示。
(6)相位调制器
接收相位累加器输出的相位码, 再加上一个相位偏移值P,主要用于信号的相位调制,位宽用M表示,与ROM地址线位数相同。
(7)波形数据表ROM
存储了一个完整周期的波形信号数据(正弦波等等)。
例如假设ROM的地址位宽为13bit,数据位宽为16bit,即有8192个存储空间,每个存储存储2字节数据。
相位调制器传入的相位码为ROM读地址,查表获取对应的波形数据。
(8)D/A转换器
将查表获取的波形数据,转换成模拟信号输出。

说明:其中N一般大于M,所以一般传入相位调制器的是高M位,低N-M位用于K值计数。

2、DDS数字信号示意图

DDS数字信号示意图.png

3、DDS理论计算分析
(1)相位累加器
低N-M位用于K值累加计算,直至累加到2^(N-M)或溢出到高M位,所以需要累加的次数为2^(N-M)/K。
累加运算:phase_acc = phase_acc + K
相位累加器phase_acc(高M位)一次进位用时为
      Tacc = 2^(N-M)*Tclk/K。
(2)相位调制器
相位累加器phase_acc高M位,再加上相位字输入P,可得到ROM读取地址,即
   rom_addr = phase_acc高M位 + P
ROM中存储的是一个周期的信号数据,所以输出一个完整周期的信号,需要2^M次读取。
一次读取的用时就是相位累加器高M位进位一次的时间。
所以输出信号的周期计算:
Tout = 2^M*Tacc
       = 2^M*2^(N-M)*Tclk/K
       = 2^N*Tclk/K
转换成频率:
fout = K*fclk / 2^N
再来分析一下相位字P,ROM寻址加了相位偏移P, 也就是说是从第P个地址开始读,而不是从0开始读,这就是相位发生了变化。
一个周期2π 等于 一个周期读取2^M次。
那么相位字P = 相位偏移量 / 2π * 2^M
例如相位偏移 π/2(90度),那么相位字:
P = π/2 / 2π * 2^M

  = 2^(M-2)

二、DDS实现

根据前面的分析,使用FPGA可以快速实现简易的DDS信号发生器。

最新文章

最新文章