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

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

3天内不再提示

DDS的工作原理及基于FPGA的实现方法

FPGA设计论坛 来源:CSDN技术社区 作者:雷凌峻毅 2022-04-21 09:04 次阅读

DDS原理及FPGA实现

一个按一定速度沿x轴行进,同时半径按一定频率在圆周上滑动的圆,最后留下的痕迹就是一个正余弦波。

DDS全称直接数字频率合成(Direct Digital Synthesis),简单来讲,分以下几步:

1.抽样

既然是数字频率合成,那么从模拟信号变成数字信号的过程必不可少。这个过程就是抽样的过程。根据奈奎斯特采样定律,我们在采样过程要保留源信号的信息,那么采样率至少为源信号频率的两倍。换句话说,我们想要在数字合成出来的波形还能还原原始信号的信息的话,我们一个周期中至少要有两个以上的“点”。

但一般来讲,为了波形的完整,我们一个周期中最少保留的点还会多一些。如果假设一个周期最小4个点,采样频率为为100MSPS,那我们可以还原的源信号的频率最大为25M

我们通常对一个周期采样的点数为2^N个,在这里,我采样为2的8次方,即256个。

采样的过程可以通过matlab进行模拟,设置好采样的位宽和深度便可以生成采样数据。

6938cf34-c100-11ec-bce3-dac502259ad0.png

得到的部分采样数据如下

694e9c7e-c100-11ec-bce3-dac502259ad0.png

6964a7a8-c100-11ec-bce3-dac502259ad0.png

2.合成

DDS技术的核心,简单来说就是将我们的抽样数据还原成模拟信号。还原的方式和文章讲到的一样:以一定的频率将抽样数据依次输出,就可以还原波形。

假设,以100M的频率输出我们的1024个抽样数据,则将会得到一个频率为

697c4c1e-c100-11ec-bce3-dac502259ad0.png

的正弦波。这就达到了最初的信号输出。

那如何调频呢?

调频的方案有两种:一种是改变我们的时钟频率,将我们读取抽样数据的速度变快或者变慢,这样就可以改变频率。这种方法对于当下很多开发板固定的晶振频率来说比较难以实现。

另一种方案就是减少我们输出的抽样数据,输出的抽样数据越少,按照上面的公式,频率便会越高。

比如说,我们最开始查数据是按照依次加一的方式,那我们改成依次加二,显然,这样做之后,输出频率便会提高。但也会带来一个问题,我们输出的点数少了,那么点与点之间不再平滑,输出的波形会变得阶梯化。

显然加一会得到一个频率,加二会得到另一个频率,但这两个频率都不是我想要的怎么办?

如何精准调频?

假设我们需要得到一个频率很低的信号,1KHZ,而我们的时钟频率为100M,我们在一个周期内输出1024个点也达不到这样的频率。因此我们就需要在输出的每个数据之间进行等待,可以通过设置计数器来解决这个问题。为了使输出的信号尽可能的低,我们设置一个32位的累加器。将高10位作为查表的地址。对于1KHZ,有

699196a0-c100-11ec-bce3-dac502259ad0.png

所以,累加值f w o r d fwordfword为4295。

其余频率对应的累加值均可以按此公式计算。

如何解决阶梯化?

从数字上来看,波形变得阶梯化是因为我们输出的抽样数据减少,点与点之间不再平滑。但是从另一个角度理解,波形变得阶梯化的原因是因为叠加了其他杂波

我们简单地波形变得阶梯化理解为趋近于方波。下图是方波的合成。

69a6992e-c100-11ec-bce3-dac502259ad0.png

由方波的傅里叶级展开式

69c99078-c100-11ec-bce3-dac502259ad0.png

可以得出,方波是由无数个奇次谐波叠加起来的,频率为2n-1倍,幅度为

69df1a42-c100-11ec-bce3-dac502259ad0.png

因此,若我们的波形也是叠加了高频的谐波导致波形阶梯化,那么就通过低通滤波器来滤除高频谐波,得到平滑的波形。

DDS的原理图如下:

69f4fa10-c100-11ec-bce3-dac502259ad0.png

3.实现

基于FPGA的DDS,就是按照上面的原理来实现的。

6a0da89e-c100-11ec-bce3-dac502259ad0.png

我这里只储存了256个数据,至于原因,后面会讲到。

(2)累加

设置一个32位相位控制字和频率控制字,进行累加。

6a2588b0-c100-11ec-bce3-dac502259ad0.png

6a3d2d6c-c100-11ec-bce3-dac502259ad0.png

这里我只储存了2^8个波形数据,是为了节省寄存器资源。因为一个周期的正弦波的四个相位实际上数据是有关联的,知道第一相位的数据,便可推导出另外三个相位的数据。

代码中,00表示第一相位,此时按照正常的查表顺序即可。

01表示第二相位,此时,查表的顺序应当是2^8-地址值。但实际上这个减法的操作就是异或的操作。

相减后,地址值8位中原本的“1”变为0,原本的“0”变为1,正好和异或的原理相同。这里为了方便,就直接写了异或。实际上写256-addr_cache[7:0]也是一个效果。

其余两个相位,查表的方式类似。

(4)转换

因为我这里的256个数据是第一相位的,而第三第四相位的数据是等于2^10减去第一相位的值,因此这里需要将输出的数据转换一下。

6a5419b4-c100-11ec-bce3-dac502259ad0.png

(5)测试

通过串口分别发送01999b60和031a5f60,由上面公式

6a691418-c100-11ec-bce3-dac502259ad0.png

6a8b92e0-c100-11ec-bce3-dac502259ad0.jpg

可以算出分别是1M和2M的频率控制字

6aa3dfa8-c100-11ec-bce3-dac502259ad0.jpg

6ab79066-c100-11ec-bce3-dac502259ad0.jpg

6acf2d02-c100-11ec-bce3-dac502259ad0.jpg

以上便是DDS的FPGA实现。

原文标题:FPGA学习-DDS原理及FPGA实现

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

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

    关注

    1628

    文章

    21722

    浏览量

    602879
  • DDS
    DDS
    +关注

    关注

    21

    文章

    632

    浏览量

    152625

原文标题:FPGA学习-DDS原理及FPGA实现

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA实现直接数字频率合成(DDS)的原理、电路结构和优化...

    FPGA实现直接数字频率合成(DDS)的原理、电路结构和优化方法介绍了利用现场可编程逻辑门阵列FPGA
    发表于 08-11 18:10

    如何利用FPGA设计DDS信号发生器?

    DDS工作原理和基本结构基于FPGADDS信号发生器的设计如何建立顶层模块?
    发表于 04-09 06:46

    如何利用FPGADDS技术实现正弦信号发生器的设计

    DDS电路的工作原理是什么如何利用FPGADDS技术实现正弦信号发生器的设计
    发表于 04-28 06:35

    如何利用现场可编程逻辑门阵列FPGA实现实现DDS技术?

    介绍了利用现场可编程逻辑门阵列FPGA实现直接数字频率合成(DDS)的原理、电路结构和优化方法。重点介绍了DDS技术在
    发表于 04-30 06:29

    如何利用FPGA设计DDS电路?

    ACEX 1K具有什么特点DDS电路工作原理是什么如何利用FPGA设计DDS电路?
    发表于 04-30 06:49

    DDS工作原理是什么?如何去设计DDS

    DDS工作原理是什么?基于DSP Builder和DDS设计基于FPGADDS设计
    发表于 05-06 06:27

    怎么实现基于FPGA+DDS的正弦信号发生器的设计?

    介绍了DDS的发展历史及其两种实现方法的特点,论述了DDS的基本原理,并提出一种基于FPGADDS
    发表于 05-11 06:58

    什么是DDSDDS工作原理是什么

    什么是DDSDDS工作原理是什么?怎么做出一个DDS模块呢?
    发表于 01-26 06:31

    基于FPGADDS调频信号的研究与实现

    本文从DDS 基本原理出发,利用FPGA实现DDS 调频信号的产生,重点介绍了其原理和电路设计,并给出了FPGA 设计的仿真和实验,实验
    发表于 06-26 17:29 72次下载

    基于FPGADDS信号源设计与实现

    基于FPGADDS信号源设计与实现 利用DDSFPGA 技术设计一种信号发生器.介绍了该信号发生器的
    发表于 02-11 08:48 225次下载

    DDS方式的工作原理电路图

    DDS方式的工作原理电路图
    发表于 07-14 17:08 3610次阅读
    <b class='flag-5'>DDS</b>方式的<b class='flag-5'>工作原理</b>电路图

    基于FPGADDS杂散分析及抑制方法

    首先介绍了采用直接数字频率合成(DDS)技术的正弦信号发生器的基本原理和采用FPGA实现DDS信号发生器的基本方法,然后结合
    发表于 11-26 16:23 49次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>DDS</b>杂散分析及抑制<b class='flag-5'>方法</b>

    基于FPGADDS设计

    利用现场可编程门阵列(FPGA)设计并实现直接数字频率合成器(DDS)。结合DDS 的结构和原理,给出系统设计方法,并推导得到参考频率与输出
    发表于 04-01 16:14 25次下载

    DDS的基本结构和工作原理及Matlab在DDS系统仿真中的应用说明

    介绍了直接数字频率合成器(Direct Digital fiequency Synthesizer,DDS)的基本结构和工作原理,并在此基础上着重论述了利用舭软件建立DDS的理想和杂散仿真模型的
    发表于 11-06 17:48 15次下载
    <b class='flag-5'>DDS</b>的基本结构和<b class='flag-5'>工作原理</b>及Matlab在<b class='flag-5'>DDS</b>系统仿真中的应用说明

    如何使用FPGA实现DDS数字移相信号发生器的原理

    本文讨论了基于FPGA芯片的直接数字频率合成器(DDS)的设计方法。因为DDS实现依赖于高速、高性能的数字器件,使用现场可编程器件
    发表于 03-02 17:11 36次下载
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b><b class='flag-5'>DDS</b>数字移相信号发生器的原理