0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

verilog轻松实现高分辨率DDS

电子工程师 来源:lq 2019-02-04 15:35 次阅读

DDS广泛应用于雷达系统、数字通信、电子对抗、电子测量等民用军用设备中。

它的优点:

➀工作频率范围很宽

➁极高的频率分辨率

➂极短的频率转换时间

➃数字调制性能好

➄频率转换连续

DDS基本原理

1.原理框图

图1. FPGA产生DDS框图

上图就是DDS的的FPGA实现框图,完整的DDS还应该在外面有DAC和低通滤波器的,然而很多时候我们是不需要这两个的,因为上图的DDS输出的信号就在数字域,凡是数学域的信号都可以用它参与处理了,所以正弦ROM查找表出来后的信号可以直接给到其他的逻辑使用。只有要在模拟域参与处理才会把DDS的数字信号用DAC和低通滤波变换成模拟信号。

2.DDS正弦波产生原理

正弦ROM查找表里面就是按地址存放的一个周期的正弦波,可以根据幅值精度要求分成256,1024,等点数,点数越多,波形越精细,越接近真实的模拟正弦波。但是由于FPGA资源有限,选择一个能够满足要求的点数就足够了。

相位调整器是控制输出波形的初相位,也就是波形输出起点从哪里开始。

相位累加器是控制ROM地址跳变的。相位累加器在每个时钟脉冲输入时,把频率控制字累加一次,相位累加器的输出数据就是信号的相位,也就是ROM的地址。由于相位累加器字长的限制,相位累加器累加到一定值后,其输出将会溢出,这样波形存储器的地址就会循环一次,即意味着输出波形循环一周。故改变频率控制字即相位增量,就可以改变相位累加器的溢出时间,在时钟频率不变的条件下就可以改变输出频率。改变查表寻址的时钟频率,同样也可以改变输出波形的频率。

也就是说通过相位调整器和相位累加器就可以控制你输出波形的相位和频率!

DDS实例说明

1. 16点DDS举例

下图是一个16点的DDS ROM存取示意图,横轴是二进制的ROM地址,纵轴是每个地址对应的幅值。

如果频率控制字K=1,相位控制字是0,那么ROM输出就是从0开始+1,一直到15再次归0,如此循环。如果DDS工作时钟是Fc,那么这种情况下,输出正弦波频率Fout就是Fc/(2^4)=Fc/16。如果K=2,输出则是一半的时间就输出完成整个周期所以是Fc/(2^4)*2=Fc/8。以此类推可以得到如下公式,N是ROM地址位宽,也就是频率控制字的二进制位宽:

图2. DDS输出 波形示意图

频率分辨率,也就是频率控制字每变化1,频率变化的大小,公式如下:

本质上也就是K=1和0的时候的输出频率之差,这个计算起来是最简单的。

2. 提高频率分辨率的方法

根据公式2我们可以得到:N越大,也就是频率控制字位宽越大,那么分辨率越高,我们设置的任意频率都可以做到更接近,频谱上就越看不出差别。而且我们可以知道,这和输出波形的位宽是无关的,输出位宽只和幅值精度有关。也就是说,我们可以用一个ROM存1024个点,每个点16bit精度,但是频率控制字是32bit,累加结果只用最高10bit,这样,就可以让ROM存储少,但是频率分辨率确很高。这种方法在实际中也是很实用的方法。

这里我写了一个高分辨率的DDS的例程,仅供参考,百度云链接如下:

源码:

链接:https://pan.baidu.com/s/18TSmRoSLG678bNnYYfZl5A

提取码:loie

tb:

链接:https://pan.baidu.com/s/1K8pvF8i9N6KL935KmXcbGA

提取码:ahig

仿真结果说明

如下图所示,rst为高电平时复位整个模块,en为高电平整个模块才会工作,dout_vld为高电平的时候输出数据才是有效的点。所以输出可以根据dout_vld为1的时候打印到文件里面,用matlab分析频谱。由于输出数字信号一定是离散的所以一定会有高频分量,只是占比多少的问题,后面的模拟滤波器如果设置合理是可以把基频分量取出来的,这样就可以实现DA功能。DDS输出频率越高,三角函数畸变也就越严重,但是实际处理过程中往往不需要他的波形多么接近正弦波,只要频谱的谱线足够干净就可以。详见下一节MATLAB分析。

matlab结果说明

tb默认设置DDS工作在100M时钟下,产生4M正弦波,输出2048点后用这些点去做FFT,结果如下图所示,结果显示正弦波频率是4.035M,和理论预测相差35KHz,准确度为0.875%。然而按照32bit的位宽精度应该比这个精确的多的。那么为什么会有这种差距呢?原因是100M的采样率,1024点FFT分辨率只有0.1M左右,远远大于DDS的输出频率分辨率,所以,即便DDS输出频率很准确,FFT也不会认为有那么准确,必须要FFT分辨率大于DDS分辨率的时候才能准确的计算出DDS的频谱。

那么按照以上理论,只需要提高FFT点数,DDS的结果应该更接近理想结果,于是我们输出131072点之后我们做FFT,结果如下:

频谱显示为4.001MHz,准确度为0.025%,确实比2048点精准了很多倍。然而这里的FFT分辨率其实还是不够的,只不过输出太多点数需要花时间,有兴趣的读者可以继续增大点数看看分辨率究竟有多高,可能会让你吓一跳哦!

这里其实也体现了DDS的优点,输出频率精度非常高,而且相位稳定可靠,消耗资源又少!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1323

    浏览量

    109218
  • DDS
    DDS
    +关注

    关注

    21

    文章

    611

    浏览量

    151676
  • 调整器
    +关注

    关注

    3

    文章

    69

    浏览量

    19575

原文标题:verilog轻松实现高分辨率DDS

文章出处:【微信号:HaveFunFPGA,微信公众号:玩儿转FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用SPU实现MUSIC或ESPRIT算法以获得超高分辨率

    如何使用SPU实现MUSIC或ESPRIT算法以获得超高分辨率? 谢谢。
    发表于 01-23 07:59

    高分辨率相机的设计,分辨率6千万,有没有做相机方面的大神们!

    高分辨率相机的设计,分辨率6千万,有没有做相机方面的大神们!
    发表于 11-12 10:48

    高分辨率示波器测量微小信号

    8位,故而极少提及垂直分辨率。实时示波器由于采样高,ADC位数很难提高。在需要高分辨率测量的场合经常由低采样的数据采集卡来实现。为满足
    发表于 03-21 10:43

    增强高分辨率图像捕获的选择

    可能有一连串的妥协,但有时只有最好的。工业成像也如此。有时,一个应用的要求相当重要而不能更换。分辨率是个很好的例子-如果您的应用需要高分辨率捕获,您不能用这换取其它性能,如更高的帧速率或更小的摄像机尺寸
    发表于 10-25 09:04

    采用高分辨率位置插值的Sin/Cos编码器工业接口

    到 MCU,同时凭借插入式兼容 14 或 12 位 ADC 还可满足成本优化待决的分辨率要求借助适用于 C2000 MCU 且带以 16kHz 算得的高分辨率角度以及通过 USB 虚拟 COM 端口实现
    发表于 11-09 17:04

    高分辨率ADC解决实际难题

    高分辨率ADC—概览(媒体精选)
    发表于 09-27 12:44

    如何利用单片机内置ADC实现高分辨率采样

    相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是高分辨率
    发表于 01-28 07:37

    ADC信噪比要怎么分析?高速高分辨率ADC电路要怎么实现

    实际分辨率受器件自身误差和电路噪声的影响很大。ADC信噪比要怎么分析?高速高分辨率ADC电路要怎么实现
    发表于 04-14 06:16

    如何设计高速高分辨率ADC电路?

    影响ADC信噪比因素有哪些?如何设计高速高分辨率ADC电路?基于AD6644AST一65的高速高分辨率ADC电路设计实例
    发表于 04-23 06:01

    如何实现DCP的高分辨率控制?

    实现高分辨率的原理是什么如何使用X9241实现高分辨率
    发表于 04-27 06:54

    如何实现连续脉冲信号的高分辨率延迟?

    如何实现连续脉冲信号的高分辨率延迟?
    发表于 04-30 06:07

    如何利用先进的热电偶和高分辨率Δ-ΣADC实现高精度温度测量?

    如何利用先进的热电偶和高分辨率Δ-ΣADC实现高精度温度测量?
    发表于 05-12 07:01

    单片机内置ADC实现高分辨率采样的方法

    关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可
    发表于 12-06 07:25

    单片机内置ADC实现高分辨率采样的方法

    关注、星标嵌入式客栈,精彩及时送达[导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是
    发表于 12-08 07:03

    教你如何利用verilog轻松实现高分辨率DDS

    上图就是DDS的的FPGA实现框图,完整的DDS还应该在外面有DAC和低通滤波器的,然而很多时候我们是不需要这两个的,因为上图的DDS输出的信号就在数字域,凡是数学域的信号都可以用它参
    的头像 发表于 06-28 10:36 979次阅读
    教你如何利用<b class='flag-5'>verilog</b><b class='flag-5'>轻松</b><b class='flag-5'>实现</b><b class='flag-5'>高分辨率</b><b class='flag-5'>DDS</b>