基于FPGA的DDS算法实现(可调幅值,附ISE联合Modelsim仿真结果) | 您所在的位置:网站首页 › modelsim时钟信号激励产生 › 基于FPGA的DDS算法实现(可调幅值,附ISE联合Modelsim仿真结果) |
基于FPGA的DDS算法实现(附ISE联合Modelsim仿真结果)
声明:这篇博客是在充分参考前人成果的基础上写成的,如有侵权,请联系我作进一步处理。此外,这是我第一次写博客,描述不准确之处敬请指出。如有疑问,可在下方留言。祝好。 1.DDS原理介绍随着数字技术在仪器仪表和通信系统中的广泛使用,可从参考频率源产生多个频率的数字控制方法诞生了,即直接数字频率合成DDS(Direct Digital Frequency Synthesis)[1]。DDS可根据需要产生指定频率的波形信号,如正弦波、三角波、锯齿波、方波等,其结构框图如下图所示。 如上图所示,通过串口发送频率控制字、幅值控制字、波形选择,就能在DAC处得到相应的波形信号。其具体过程如下:首先,给定的频率控制字作为累加值,每当时钟信号1有效时,相位累加器就进行一次累加;然后,对相位累加器的输出值进行截位操作,并将截位的结果赋给相位寄存器;相位寄存器的输入值作为地址值读取事先存储在查找表上的波形信息,其输出进入幅值放大器并结合给定的幅值控制字调整波形幅值,最后将信号输入到DAC进行输出,得到对应的指定频率和幅值的波形。简而言之,就是事先将不同波形存储在不同的ROM上,通过改变频率控制字来控制波形频率,实现变频的功能,再通过幅值控制器进行相应增益处理,可实现调幅功能。 2.数学分析DDS的数学过程比较简单,主要的几个参数为输入时钟频率fc,输出频率fo,相位累加器位宽n,频率控制字K,幅值控制字A。输出信号的频率计算公式如下[2]: fo=fc* K/2^n 记DDS输出最小频率,即分辨率为vf,则其表达式为[3]: vf=fc/2^n 记DDS输出最大频率为fmax,它由奈奎斯特定理决定,即fmax=fc/2。实际中考虑有其它影响因素,一般有不超过时钟频率的40%。 记输出为y(t),以Waveform表示所选波形,则最终波形表达式如下: y(t)=AWaveform(2πfot) 3.DDS实现下面分别介绍相位累加器(包含相位寄存器部分内容)、查找表、幅值控制器的实现方法,并给出关键代码语句。 相位累加器[4] module PHASE_ADDER (//input clk,rst,fre_value, //output cnt ); input clk; input rst; input [15:0] fre_value;//频率控制字 output [15:0] cnt; wire [15:0] fre_value; reg [15:0] cnt; //相位累加寄存器 always @(posedge clk or posedge rst) if(rst) cnt |
CopyRight 2018-2019 实验室设备网 版权所有 |