- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
直接数字频率合成器DDS的设计规划
直接数字频率合成器DDS的设计
DDS的基本原理
DDS技术是一种把一系列数字量形式的信号通过DAC转换成模拟量形式的信号的合成技术,它是将输出波形的一个完整的周期、幅度值都顺序地存放在波形存储器中,通过控制相位增量产生频率、相位可控制的波形。DDS电路一般包括基准时钟、相位增量寄存器、相位累加器、波形存储器、D/A转换器和低通滤波器(LPF)等模块,如图1所示。
相位增量寄存器寄存频率控制数据,相位累加器完成相位累加的功能,波形存储器存储波形数据的单周期幅值数据,D/A转换器将数字量形式的波形幅值数据转化为所要求合成频率的模拟量形式信号,低通滤波器滤除谐波分量。
整个系统在统一的时钟下工作,从而保证所合成信号的精确。每来一个时钟脉冲,相位增量寄存器频率控制数据与累加寄存器的累加相位数据相加,把相加后的结果送至累加寄存器的数据输出端。这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。
相位累加器输出的数据的高位地址作为波形存储器的地址,从而进行相位到幅值的转换,即可在给定的时间上确定输出的波形幅值。
图1 DDS原理图
波形存储器产生的所需波形的幅值的数字数据通过D/A转换器转换成模拟信号,经过低通滤波器滤除不需要的分量以便输出频谱纯净的所需信号。信号发生器的输出频率fo可表示为:
( 1)
式中为系统时钟,为系统分辨率,N为相位累加器位数,M为相位累加器的增量。
参数确定及误差分析
首先确定系统的分辨率,最高频率,及最高频率下的最少采样点数
根据需要产生的最高频率以及该频率下的最少采样点数,由公式
(2)
确定系统时钟的下限值。同时又要满足分辨率计算公式
(3)
综合考虑决定的值。
选定了的值后,则由公式(9.3)可 得=,据此可确定相位累加器位数N。
然后由最高输出频率
(4)
推出M=,得出相位增量寄存器为S位。
确定波形存储器的地址位数W,本系统中决定寄存个数据值,因此RAM地址为Z位。
误差分析:
· 失真度:
除受D/A转换器本身的噪声影响外,还与离散点数N和D/A字长有着密切关系。
设q为均匀量化间隔,则其近似数学关系为
(5)
式中N为一周中输出的点数,D为量化字长,。
·相位舍位引起的误差:
在DDS中,由于相位累加寄存器的位数N大于RAM的寻址位数W,使得相位寄存器的输出寻址RAM时,其N-W个位须舍去,不可避免会产生误差,该误差是DDS输出杂散的主要原因。总的信噪比是
(6)
·相位量化误差:
由于波形是经过一系列有限的离散采样点转化而来,因此势必存在相位量化误差,通过增加采样点可减小此误差。
实现器件的选择
一般选用FPGA/CPLD器件作为DDS的实现器件,对于D/A转换器的选择,首先要考虑到D/A转换器的转换速率。要实现所需的频率,D/A的转换速度要大于,然后根据D/A转换器字长所带来的误差,决定D/A的位数。由此选择D/A转换器的型号。
DDS的FPGA实现设计
本设计要求DDS实现的性能指标为:分辨率0.01Hz,最高输出频率5MHz。
根据上面所列公式可以算出:时钟频率为85.9MHz;累加器位数N= 33;相位增量寄存器为29位。
如图2 所示,DDS系统包括相位增量寄存器、相位累加器、地址寄存器、波形存储器、时钟倍频器及地址发生部分等几个模块。内部所有模块均用Verilog语言编写,其顶层设计用原理图的方式进行模块间的连接。
图2 DDS内部组成模块图
1) 相位增量寄存器
图3 相位增量分段寄存器
相位增量分段寄存器的端口如图3所示。根据前面的计算可知,相位增量寄存器需要29位。相位增量寄存器的断口包括复位端RES,数据输入PSI(28:0),数据输出PSO(32:0)。RES高电平有效,复位后,PSO输出为0。PSO输出高4位总为0。其Verilog程序如下:
module PIR(PSI,PSO,RES);
input [28:0] PSI;
output [32:0] PSO;
input RES;
reg[32:0] PSO;
always@(PSI)
begin
if(RES)
begin
PSO=0;
end
else
begin
文档评论(0)