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

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

3天内不再提示

FPGA应用技巧和诀窍:模拟DDS(调频调相)

黄博 2017-09-20 09:17 次阅读

DDS是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点。先说明一下,要产生真正的模拟信号,需要接A/D转换芯片,这次主要是产生FPGA发出的数字信号(在modelsim中以模拟量查看)。

首先先看一下整体的连接图:

01.png

其中sin_rom模块是存储正弦波形数据的rom(rom调用quartusip核),深度256,宽度8位,我们用产生好的mif文件(可以利用mif_make2010这个软件产生,也可以利用c语言matlab产生但要注意文件格式)去初始化rom,假如我们采用mif_make2010产生mif文件,波形如下:

02.png

其中行坐标是是0-255,表示rom的256个存储单元,纵坐标表示的是每个存储单元的数值大小,波峰为0xFF;波谷为0x00,即我们依次从rom的第一个地址读,一直读完,从rom中读出的数据就是正弦波形的数字量表示。所以程序中我们只需控制地址的产生就可以达到调相调频的目的,所以设置了gen_add模块。

调相原理:由于0-255个单元对应的相位是0-360度,所以我们只需调整初始相位的单元就可以到达调相的目的,例如假如初始单元就是0,那我们的波形就是标准的正弦波,如果我们的初始单元为64,那我们的波形就是余弦波。

调频原理:我们调整地址产生的频率快慢就可以调整波形频率。假如我们时钟50M,每个时钟上升沿从rom中读取一个数据,由于一个周期的sin波形是有256个点组成,所以我们相当于256个时钟产生一个完整的sin波,即周期为256*(1/50M);频率为50M/256;

从频率表达式我们可以看出波形的频率一是跟时钟有关,二是跟存储的rom单元数有关,我们上述采用的是256个单元,所以产生的频率为50M/256=195.3Khz,这是我们顺序从rom中读取数据,即地址每个时钟加一产生的频率,若我们的每个时钟地址加2(步长),则我们的产生的频率则为原来的2倍,即2*50M/256=195.3*2。但我们想一想如果我们的的rom深度数256,那产生的频率分辨率最高也就是50M/256即195.3Khz,,而且我们产生的频率只能是195.3Khz的整数倍,这个有点难以接受。我们自然想到可以增大rom的位数来提高分标率,这个当然可以,但是我们rom都是提前固定的,有没有其他办法呢?

假如我们设定一个32的寄存器address_temp,我们只把address_temp的前八位真正的交给rom读数据,这样相当于减慢了地址的变化速度,但我们实际上提高了频率分辨率,现在的分辨率为50M/2^32=0.011hz,同样我们产生的频率只能是0.011hz的倍数,但是我们可以认为任何整数都可是0.011的倍数,假设步长为span_fre,则产生的频率为span_fre*50M/2^32;这有点类似之前的应用篇(三)精准分频,事实上它的原理就来源于此。

同理我们根据频率来调节步长即可。

程序如下:

03.png

仿真结果如下:

04.png

从结果我们可以看为起始相位为90度即cos波形,(虽然我们rom中存储的是sin波形的数据),频率为500k,注意data的显示格式是一定设置为无符号的模拟量。当我们把phase改为0时结果如下:

可以看出此时起始相位为0度,为sin波形。

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

    关注

    1602

    文章

    21320

    浏览量

    593155
  • DDS
    DDS
    +关注

    关注

    21

    文章

    614

    浏览量

    151730
  • ModelSim
    +关注

    关注

    5

    文章

    172

    浏览量

    46756
收藏 人收藏

    评论

    相关推荐

    我了解的DDS

    得到)。DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。   ——另外,有些DDS芯片还具有调幅、调频
    发表于 06-20 15:51

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

    基于FPGADDS 调频信号的研究与实现
    发表于 08-17 11:41

    IP core调用DDS

    ISE软件,使用IP core调用DDS,产生正弦载波,使用调频200M时钟做为DDS输入,功能仿真没问题,但后仿真却不显示波形,只是一根红线,是不是频率过高啊,还是什么设置问题,请各位高人赐教,小弟初学
    发表于 03-20 20:37

    基于FPGADDS怎么控制幅值?

    本帖最后由 kandy286 于 2013-11-8 00:33 编辑 刚学FPGA,用FPGA+DAC设计的DDS,已实现调频调相
    发表于 11-08 00:32

    FPGA+DA怎么实现调相呢,不是数字调制

    FPGA+DA怎么实现调相呢,不是数字调制。就是用一个正弦波的峰值来控制载波的相位,这个要怎么在FPGA中实现呢?希望大神能给个思路,我开始是想调制波直接用DDS IP核生成,然后用起
    发表于 06-29 16:00

    FPGA控制DDS输出调频信号时,频谱仪上只出来一个下限值,没有调频

    FPGA控制AD9910产生一个调频信号,用Quartus II软件编程下载,JATG模式,程序很简单,只是采用DRG模式输出一个调频信号,但是我的输出结果只有一个下限值(正斜率调频
    发表于 11-30 15:15

    基于FPGA和PCI9054的LVDS数据通信卡的设计

    数据通信中应用广泛。DDS频率合成技术通过频率控制字、相位控制字及参考时钟的控制来实现输出信号的调频调相,并且输出信号具有频率转换快、频率分辨率高和相位噪声低等优点。综合上述特点,设计运用PCI9054
    发表于 07-18 06:35

    如何实现基于DDS芯片AD9858的线性调频信号的设计?

    本文介绍了一种采用DDS方式直接产生线性调频信号的全数字设计方法。
    发表于 04-12 06:14

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

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

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

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

    QPSK调制器的FPGA实现

    提出了一种基于FPGA 实现QPSK 调制器的方法。以FPGA 实现DDS,通过对DDS 信号输出相位的控制实现调相。仿真结果表明方案是可行
    发表于 12-18 11:57 66次下载

    间接调频调相电路

    间接调频调相电路 间接调频——调相电路 直接调频的优点是能够获得较大的频偏,但其缺点是中心频率稳定度低,即便是使用晶体振荡器直接
    发表于 03-23 16:01 142次下载

    FPGA配合NIOS技术的精确调频发生器

    本设计以Altera公司的APEX FPGA器件为核心,采用直接数字频率合成技术(DDS),辅以必要的模拟与数字转换电路,形成一个精确调频发生器。本系统的主要特色:可以产生任意波形的信
    发表于 08-06 15:08 25次下载

    一文读懂调频与调幅的差异

    调相的同时,频率一定会变化,但是调频的时候相位不一定变化。”的提法不对。调频调相都是角度调制,所以调频时相位一定变化的。
    发表于 04-24 09:26 4.7w次阅读
    一文读懂<b class='flag-5'>调频</b>与调幅的差异

    解析Vivado如何调用DDS的IP进行仿真

    本次使用Vivado调用DDS的IP进行仿真,并尝试多种配置方式的区别,设计单通道信号发生器(固定频率)、Verilog查表法实现DDS、AM调制解调、DSB调制解调、可编程控制的信号发生器(调频
    的头像 发表于 04-27 16:33 5699次阅读
    解析Vivado如何调用<b class='flag-5'>DDS</b>的IP进行仿真