DDS基本原理与FPGA实现

1、字面解释

DDS(Direct Digital Synthesizer)技术是一种全新的频率合成方法,是从相位概念出发直接合成所需波形的一种频率合成技术,通过控制相位的变化速度,直接产生各种不同频率、不同波形信号的一种频率合成方法。

 输入:

  1. 系统时钟CLK;
  2. 频率字输入 F_word ;
  3. 相位字输入 P_word;

输出:

  1. 信号Data;

通俗一点

DDS是一种信号发生器,用于产生各种波形,且其产生的波形处于调制状态可随时修改。


学过通信的同学应该很容易理解,通过傅里叶变换可以将一个信号分解成不同频率的正弦波组合,并且每个频率的正弦波的振幅和相位都可以通过傅里叶变换得到。

图上的 f 信号就可以通过n个正弦信号组成。

那我们要产生一个特定的信号模拟),就要先产生不同频率的正弦波信号

所以首先我们需要先找到一个标准的正弦波信号,存在FPGA的ROM里面;然后通过控制参数进入这个ROM,我们就可以得到不同频率正弦波信号输出,然后就可以再叠加在一起,不就能得到我们需要的信号了。

那怎么得到不同不同频率正弦波信号呢?

扫描二维码关注公众号,回复: 15008198 查看本文章

先理解ROM里面的正弦波信号怎么来的

 ROM的值是一个周期的正弦波的幅度

 ROM的地址是正弦波一个周期相位

就是按一定的采样点数,对上面的sin函数进行采样

ROM的地址1,就是,sin的0相位

然后依次存下去,采样点数越多,包含sin相位就越多,看起来sin函数就越平滑,当然,ROM最后一个地址就越大。

然后这个ROM里面就有一直周期的sin函数了。

下一步就是按照我们的去求输出我们需要的sin函数。


假如我们的ROM存的是34个采样点,就是上图周期T2中的sin函数。

我们现在要输出这个一模一样的sin函数,我们也需要34个(相位累加器B)值来表示这个sin函数

然后就是B=1(为了方便理解取1)的时候,去ROM取地址1的值。

B=2的时候,去ROM取地址2的值。

......

B=34的时候,去ROM取地址34的值。

那我们需要得到为之前两倍频率的sin函数呢,时间不变的情况下,那我们就只能取17个点,那么就像TI中的sin函数,因为时间不变,我们在相同时间里面还是能取34个点,那么我们就能取出来两个这样的sin函数。这样就实现了控制输出sin函数的频率了

控制这个的参数叫频率控制字F_word

第一个例子中我们的F_word=1,所以去ROM是依次取的值出来。这个叫基频吧。

第二个例子中我们的F_word=2,所以去ROM是隔一个值取出来的。所以在相同时间内取两个sin函数出来。

那如果我们要得到一半频率的sin函数呢?那我们让取点的时候,延迟一个时钟,每次去两个相同的点就行了,这样取完一个sin函数就需要B=34*2个点了,时间也翻倍了,频率就减半了。


那如果我们想要得到的sin函数的起点不是0呢,就是要把sin函数进行左右平移

那我们在取点的时候整体平移一下不就行了,

本来B=0, 去ROM取地址1的值。给他加一个P_word(相位控制字,如果P_word=3)

那我们取的就是B=0+3=3,去ROM取地址3的值。

......

B超过一个周期之后会清零,所以最后的三个点,就等于取的前面三个点

这样我们就得到了平移后的sin函数了。


综上,我们通过控制P_word和F_word,就能得到我们想要的任意波形了

但是这样出来的是数字信号,还需要通过D/A转换滤波,就能得到平滑的模拟信号了(语音播放器)


相位累加器B(大小2^N)在每个时钟脉冲输入时,把频率控制字累加一次,相位累加器的输出数据就是信号的相位,用输出的数据作为波形存储器(ROM)的相位取样地址,这样就可以把存取在波形存储器内的波形抽样值经查找表查处,完成相位到幅值的转换

由于相位累加器字长的限制,相位累加器累加到一定值后,其输出将会溢出,这样波形存储器的地址就会循环一次,即意味着输出波形循环一周。

故改变频率控制字F_word相位增量,就可以改变相位累加器的溢出时间,在时钟频率不变的条件下就可以改变输出频率。改变查表寻址的时钟频率,同样也可以改变输出波形的频率。


公式的话就是两个,一个算输出频率的,和算相位控制字的

这里就参考这为老哥的了 

我也很疑惑N的取值,有知道的朋友能说一下吗,感谢。

猜你喜欢

转载自blog.csdn.net/weixin_44422853/article/details/129862049