原创 [博客大赛]DDS原理与应用

2014-4-29 16:59 1204 15 17 分类: FPGA/CPLD 文集: FPGA

DDS is short for “Direct Digital Synthesizer”

是从相位出发直接合成所需波形的一种频率合成技术。  原理是著名的采样定理。

1971 年,DDS由美国学者 J.TierneyM.Rader B.Gold等人提出 ,其论文可由google学术搜到 “A Digital Synthesizer” 。

特点: 任意波形周期信号,频率可控,相位可控。

流程如下: 按频率控制字累加,频率控制字就是相位累加的步长

111.jpg

实际应用

一个任意波形周期信号为g(t),周期为T,如果周期变为2T,那么信号变为f(t)=g(0.5t);若果周期变为0.5T ,那么信号变为f(t)=g(2t);不管周期扩大或缩小,相同相位的函数值是不变的。

 

FPGA+DA ,DA数据输入时钟频率ƒc ,数据位宽不考虑。其实ƒc就是采样频率。

g(t)是要产生的波形(任意形式周期信号,周期T),把一个周期时间T内按相位2π等分成2N份,各个相位点为[0,2π/2N,...,2π*(2N-1)/2N],把这些相位点对应的g(t)幅值根据DA输入数据位宽量化后按地址写入查找表中,地址顺序为[0,1,2,...,2N-1]。

 

K=2m,称为频率控制字,范围[1,2N-1]; P称为相位控制字,范围[0,2N-1];

以时钟ƒc按地址(步长为 K)顺序读取查找表数据,n时刻对应地址为 :

addr=nK+P=n2m + P =n2m + P ;注意:地址是循环的,超出部分从头开始

对应相位为 : (2π/2N)*addr=(2π/2N)*(n2m + P);

n时刻读出来的幅值即为g(t)在相位(2π/2N)*(n2m + P)对应的幅值。 

如果产生的是单频信号,那么产生波形的频率为 f=ƒc/2N-m ,相位为 P*2π/2N(弧度)。

如果不是单频信号,那么产生的基频是f=ƒc/2N-m

例子:

如果g(t)是单频正弦波,那么n时刻,从查找表读出数据为:

g(n)=sin((2π/2N)*(n2m + P))=sin(n*2π/2N-m+P*2π/2N)

上式可写成

g(n)=sin(n*2πf/2N-mf+P*2π/2N) ,令 ƒc=2N-mf

g(n)=sin(n*2πf/ƒc+P*2π/2N)

于是产生的正弦波频率为f=ƒc/2N-m,相位为 P*2π/2N(弧度)

通过DA恢复出的信号就是 g(t)=sin(2πft + P*2π/2N) ;

如果g(t)不是单频信号,三角波,方波,或者其他任意的周期性信号,由于有无数个谐波频率,也就是带宽无限大,所以根据采样定理,不可能完全恢复原信号。只能当成有限带宽信号,不考虑高次谐波,用采样定理近似恢复原波形。尽可能使2N-m大一些

如果g(t)是三角波,那么恢复出的信号基频是 f=ƒc/2N-m ;如果想产生的三角波周期为T=1/f,那么采样率等于ƒc=2f,肯定不行,因为只能恢复基频信号,应考虑到至少三次谐波分量,至少用ƒc=8f 。

这样经DA恢复出的信号为 g(t)=g(t+t0) ,其中 P/2π=t0/T;

任意波形周期信号之所以也能用DDS原理产生,因为周期信号都是由(无数正弦波)无数谐波叠加而成的。

 

关键参数:ƒc 和 N ; 满足  ƒc=2N-mf m=[0,N-1] ;
当ƒc 不变,N变,那么产生波形的频率范围就会变;N变化,要重新计算查找表。

当ƒc 变,N不变,那么产生波形的频率范围也会变;查找表不用改变。

文章评论2条评论)

登录后参与讨论

用户593939 2014-5-4 15:01

学习,参考一下

gaon2_614908070 2014-4-30 14:20

不了解,学习

644398774_263592779 2013-12-7 08:32

挤不出长点的时间来写,等忙完了这阵,会加快速度,赶在年前写完!

644398774_263592779 2013-12-7 08:29

互相学习,共同进步!

用户1726179 2013-12-4 10:16

很好很强大

用户403664 2013-12-3 16:12

坚持下去就是胜利!今年打算写几章?
相关推荐阅读
pengchengcheng082_593158939 2015-08-21 16:26
Linux 下 的 vi 编辑器
一、按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :q 不保存文件,退出vi :wq 保存文件并退出vi :q! 不保存文件,强制退出vi :w! 强制保存,不推出...
pengchengcheng082_593158939 2015-07-28 15:57
面向对象和面向过程区别
转自 http://blog.sina.com.cn/s/blog_4dd5955301000a2m.html     面向对象和面向过程的区别,实在是难用一两句话说明白。   ...
pengchengcheng082_593158939 2015-05-23 10:39
后仿真能否被形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)所取代
转自 http://www.cnblogs.com/jyaray/archive/2011/04/26/2029856.html 验证的主要目的:就是检查时间模型是否满足时间要求,是否实现了时...
pengchengcheng082_593158939 2015-05-19 11:18
两种代码方式
下面的两段程序等价,RTL图以及综合后的结果 完全一样。看似简单,其实是两种不同的思维方式。在复杂电路中能体现出两种方式各自的特点,第一种容易理解,第二种则结构更清晰,更接近综合后的结果。以前习惯用上...
pengchengcheng082_593158939 2015-05-14 16:28
Linux 下 的 cc 和 gcc
转自 http://www.cnblogs.com/zhouyinhui/archive/2010/02/01/1661078.html   在Linux下一会看到cc,另一会又看到gcc...
pengchengcheng082_593158939 2015-05-13 17:19
mips 编译器
1、linux 系统下编程的编译器 GNU toolchain(GNU工具链)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链,用于开发应用程序和操作系统。  ...
我要评论
2
15
关闭 站长推荐上一条 /2 下一条