|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、DDS技术简介9 G' R) z3 J9 X% Q- A4 J/ f$ \
●随着电子技术的不断发展,传统的频率合成技术逐渐不能满足人们对于频率转换速度、频率分辨率等方面的追求,直接数字频率合成技术应运而生。
$ I- P; M3 ~& C2 C4 _" i( v●直接数字频率合成技术(DDS) 是把一系列数据量形式的信号通过D/A转换器转换成模拟量形式的信号合成技术。DDS具有很多优点,比如:频率转换快、频率分辨率高、相位连续、低功耗、低成本与控制方便。
, J, \( Z4 q& g# z9 v, X; b" u●DDS技术满足了人们对于速度稳定性的需求,但是在一些控制较为复杂的系统中,DDS专用芯片不能很好的贴合要求。利用现场可编程门阵列(FPGA)实现DDS具有很大的灵活性,基本能满足现在通信系统的使用要求。
, V; v. X% }( `. M J0 X2 ]! P$ D# C
2、DDS结构原理
- t% g1 h$ M- k' j" D2.1 基本结构! y6 L% Q0 `8 b6 h) Y' s* d
DDS基本结构框图主要由参考频率源、相位累加器、ROM查找表、DAC转换器、低通滤波器等构成。
+ }7 d; I0 O4 c6 R. l( k' V2 ?0 N) f
2 Z$ l) I' V& L3 `相位累加器以一定的步长做累加, 而波形函数存储在ROM查找表中, 将相位累加器输出的相位值作为地址,寻找存储在ROM查找表中的波形函数的幅度值,从而完成相位到幅值的转换。其中,参考频率源一般是一个晶体振荡器,要求具有高稳定性,用于DDS中各部件之间的同步。( Q2 P: G1 o s0 {& Y
2 d8 O& j3 u! o( H2.2 基本原理
$ @ B& a2 l7 V* X, s
! G W' v# D' |( H5 j) x6 Y6 a上图为DDS Core结构图,∆θ是相位增量(对应图1中的频率控制字K),B∆θ 为相位累加器的位数,clk是参考时钟(对应图1中的参考频率源),A1、D1构成积分器(相位累加器),θ(n)是相位累加器输出的相位,Q1为量化器,用于将相位累加器位数与查找表地址之间的匹配,ϑ(n)为查找表输入地址,Bϑ(n) 为查找表输入地址位数,T1为查找表。2 K1 X) ~, ~3 w0 s5 P1 s
下面介绍DDS设计过程中常用到的公式,主要是输出频率公式及其变形。
4 h6 b: I$ z' }+ K U4 F
7 S/ U- ^# _! u: W3 S2 j7 W9 U5 Z9 b5 K7 m& y* z. A0 {9 q# [) {
3、基于FPGA的 DDS实现! m: i! u* l1 x) @1 d) n1 O/ U
For example:) \) E X/ A+ Y9 o7 j5 `% y: s1 V0 E
设计一个参考时钟为100MHz,频率分辨率要求能够达到0.03Hz,输出sin信号频率为5.00000005MHz、查找表地址12位;1 L: L1 a' R6 c( H; U- p: R
理论分析:
: u7 t6 t u8 q3 c8 }: j已知频率分辨率∆f与参考时钟f_clk,带入相位累加器位数公式计算: `$ L. S& k% i& C C
B∆θ = 31.634318
+ O0 `" |% k! }& N8 s由于位数为整数,取整数32,所以实际的频率分辨率为
4 q8 L+ O! R3 ]$ ] ∆f = 0.023283064365386962890625Hz. q" p; i9 \# @7 E5 p9 L8 c
将其带入相位增量公式计算,取整数
6 H: q2 ^" I# W/ e( f: |- V ∆θ = 21474836694.7483648≈214748364 X4 L5 d% S$ W Y- c
相位累加器输出32位,而查找表输入地址为12位,取相位累加器高12位作为查找表输入地址" ^2 s; l" \/ h# d' Z0 v5 j0 W
# d0 m4 K1 u. W: m
3.1 利用RTL实现DDS
: D/ a9 V# W2 J$ K& ] _使用matlab产生sin(θ)数据,θϵ[0,π],点数为2^12=4096,并保存在FPGA的memory中。
8 m2 \( R' Y& U- y1 d3 S6 Bwid = 12;, R0 \+ [. o3 |6 ^, Y! z
len = 2^wid; & V/ i$ k7 Z d: x: z
amp = 10000;
: ~4 w- x1 A) N3 e( l! kt=0:2*pi/len:2*pi - 2*pi/len;
1 r s4 W" a8 ^y = round(sin(t)*amp);
$ y4 ^ x# Z; o# c& L) |plot(y);7 u* P6 N# l9 K! a Q
相位累加器就是一个积分器,很容易用FPGA实现。最终FPGA仿真结果如下,clk为参考时钟,phase为相位累加器输出,addr为查找表地址,cos_i、sin_q为信号输出。
3 R7 L) T" y/ [+ p1 Y' P: O$ U) a6 x$ N7 `4 e' o
|
|