当前位置: 首页 > ds >正文

DDS原理及FPGA实现

DDS原理及FPGA实现

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

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

1.抽样

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

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

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

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

  width=10;   %rom的位宽depth=1024; %rom的深度x=linspace(0,2*pi,depth);  %在一个周期内产生1024个采样点y_sin=sin(x);   %生成正弦数据y_sin=round(y_sin*(2^(width-1)-1))+2^(width-1)-1;  %将余弦数据全部转换为整数fid=fopen('C:\Users\Leixx\Desktop\sin_txt.txt','w');  %创建.txt文件fprintf(fid,'%d;\n',y_sin);  %向.txt文件中写入数据fclose(fid);  %关闭.txt文件

得到的部分采样数据如下

511;
514;
517;
520;
524;
527;
530;
533;
536;
539;
542;
545;
549;
552;
555;
558;
561;
564;
567;
570;
574;
577;
580;
583;
586;
589;
592;
595;
598;
602;
605;
608;
611;
614;
617;
620;
623;
626;
629;
632;
635;
638;
641;
644;
647;
650;
653;
656;

2.合成

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

假设,以100M的频率输出我们的1024个抽样数据,则将会得到一个频率为
f o u t = 100 M / 1024 = 97 K H Z fout=100M/1024=97KHZ fout=100M/1024=97KHZ
的正弦波。这就达到了最初的信号输出。

那如何调频呢?

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

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

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

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

如何精准调频?

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

http://www.xdnf.cn/news/11796.html

相关文章:

  • Codeforces(1500题目汇总)
  • 全文发布|SmartX 金融行业跑批类业务场景探索与实践合集
  • 单例模式详解
  • Java图像编程之:Graphics
  • sudo命令及权限管理命令
  • UEDITOR1.4.3.3整合教程
  • ACM竞赛及备战建议
  • 对IOC和DI的通俗理解
  • JAVA环境变量配置详解(全网最新详细教程)
  • 用RStudiod的界面来读取数据
  • Thread、ThreadLocal、ThreadLocalMap
  • 一文带你详细了解JVM运行时内存
  • POM及POM设计原理
  • Umi安装教程
  • 沉没成本
  • 整合StarRocks主键表全部知识点
  • iframe标签常见问题和解决方法(持续更新)
  • 我们公司用了7年的Dubbo架构技术栈(稳的一批),这套架构真绝了!
  • VNC虚拟网络控制台(概述、windows系统连接linux系统演示)
  • Spring Boot核心原理
  • 《康熙王朝》剧情分集介绍【全】
  • 新鲜出炉的JSON,拿走不谢!
  • 充分且简单!使用 Express 打造专属“轻量代理神器”
  • Java小白一文简单普及Java中的String关键字
  • VS Code :下载、安装、常用插件、工作空间概念、运行html
  • VMware虚拟机、VMware Tools、常用设置、资源分配和卡顿问题、其他常见问题
  • 使用BASE64实现编码和解码
  • php 能否制作图形,PHP制作 3D图形之自定义图形及矢量图[多图]
  • Wi-Fi 6(802.11ax)解析24:802.11ax中MU-MIMO和OFDMA的区别
  • 10个可爱的外国互动型网站