基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

ops/2025/3/19 17:26:06/

DDS_0">基于FPGA实现频率、幅度、相位可调的DDS

1 摘要

直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函数发生器、混频器、调制器、声音合成器以及作为数字锁相环的一部分。

DDS_6">2 DDS技术优点

(1)频率分辨率较高,一般在0.01Hz左右,有的能做到1uHz,甚至更小;
(2)转换时间快,系统无反馈环节,其开环结构使得频率转换时间很短,最快可以达到纳秒级;
(3)具有输出任意波形的能力,只要将任意波形数据加载到ROM中,通过DAC输出,即可得到ROM存储的任意波形;
(4)具有调制能力,DDS是相位控制系统,有利于各种调制功能。DDS技术的这些优点,使它成为卫星定位、移动通信、数字通信等系统中信号源的首选。

3 功能原理

3.1 模型结构

DDS 是从相位出发,直接采用数字技术产生波形的一种频率合成技术。基本模型如图所示,主要由时钟频率源、相位累加器、波形存储器、及后级数模转换器(DAC)、低通滤波器(LPF)组成。频率控制字M和相位控制字分别控制DDS输出正(余)弦波的频率和相位。每来一个时钟脉冲,相位寄存器以步长M递增。相位寄存器的输出与相位控制字相加,其结果作为正(余)弦查找表的地址。正(余)弦查找表的数据存放在ROM中,内部存有一个周期的正弦波信号的数字幅度信息,每个查找表的地址对应于正弦波中 0°~360°范围内的一个相位点。查找表把输入的址信息映射成正(余)弦波的数字幅度信号,同时输出到数模转换器DAC的输入端,DAC 输出的模拟信号经过低通滤波器 (LPF),可得到一个频谱纯净的正(余)弦波。
在这里插入图片描述(1)累加器:通过频率控制字和相位控制字的累加,来取出波形数据表中相对应位置的数据。
(2)波形数据表:存储波形数据(我们主要采取matllab工具生成波形数据)
(3)数模转换器:将离散数据变成连续的。
(4)低通滤波器:对数模转换器出来的波形进行滤波,达到一个平滑波形的作用。在这里插入图片描述

DDS_20">3.2 DDS原理

1、工作原理频率字B,数值大小控制输出信号的频率大小,数值越大输出信号频率越高,反之越小。
假设ROM的深度的位宽为N,所以ROM一共有 2N 个数据。读取ROM的时钟为fclk ,如果一个时钟周期读地址+1,那么读出一个完整的波形需要的时间为:

在这里插入图片描述
则读出的波形频率fout
在这里插入图片描述
如果每一个时钟周期读地址+B,那么读出一个完整的波形需要的时间为
在这里插入图片描述
频率控制字B,由上述式计算得
在这里插入图片描述

2、工作原理相位字P,数值大小控制输出信号的相位偏移,主要用于相位的信号调制。
我们用一个矢量图来描述相位,已知我们整个波形的采样点是2N个,当改变读rom的起始地址,就能改变读出来的波形相位,假设每次相位变换为1°,则相位控制字p_word

在这里插入图片描述
根据矢量图计算相位分辨率
在这里插入图片描述
当需要对信号改变N°时,则计算出相应的相位字P为
在这里插入图片描述

3、波形数据表 ROM波形数据表 ROM 以相位调制器传入的相位码为 ROM 读地址,将地址对应存储单元中的电压幅值数字量输出。
4、波形DAC输出自波形数据表 ROM 输出的波形数据传入 D/A 转换器转换为模拟信号。D/A 转换器即数/模转换器指将数字信号转换为模拟信号的电子元件或电路。

DDS_46">4 DDS的现实

4.1 ROM波形数据生成

使用MATLAB来生成正弦波、方波、三角波、锯齿波的波形,通过FPGA ROM IP核加载COE文件存储相应的波形数据,MATLAB代码

%*****************************************square_wave *******************************%
%参数设置
% bitWidth = 14;   % 位宽
% depth = 2048;    % 深度
% maxValue = 2^bitWidth - 1; % 无符号数的最大值
% 
% % 生成方波
% t = linspace(0, 1, depth);
% halfCycle = depth / 2; % 半个周期的样本数
% squareWave = zeros(1, depth); % 初始化方波数组
% 
% % 生成方波
% for i = 1:depth
%     if i <= halfCycle
%         squareWave(i) = maxValue; % 高电平
%     else
%         squareWave(i) = 0; % 低电平
%     end
% end
% 
% % 将方波限制在无符号范围内
% squareWave = uint16(squareWave);
% plot(squareWave)
% % 打开文件以写入
% fileID = fopen('square_wave.coe', 'w');
% 
% % 写入COE文件头
% fprintf(fileID, 'memory_initialization_radix=10;\n');
% fprintf(fileID, 'memory_initialization_vector=\n');
% 
% % 写入数据
% for i = 1:depth
%     fprintf(fileID, '%d', squareWave(i));
%     if i < depth
%         fprintf(fileID, ',\n');
%     else
%         fprintf(fileID, ';\n');
%     end
% end
% 
% % 关闭文件
% fclose(fileID);
% 
% disp('COE文件生成成功!');%*****************************************sin_wave *******************************%
% % 参数设置
% bitWidth = 14;   % 位宽
% depth = 2048;    % 深度
% maxValue = 2^bitWidth - 1; % 无符号数的最大值
% offset = maxValue / 2; % 为了将正弦波移动到无符号范围内
% 
% % 生成正弦波
% t = linspace(0, 2 * pi, depth); % 生成一个周期
% sineWave = offset + round((maxValue / 2) * sin

http://www.ppmy.cn/ops/167069.html

相关文章

【R语言】pmax和pmin函数的用法详解

pmax和pmin函数的用法 以pmax为例&#xff0c;这个函数的返回值是一个向量而不是一个数值&#xff0c;这也是他跟max函数的最大区别&#xff0c;记住一个口诀&#xff1a; pmax是设置下限的&#xff0c;pmin是设置上限的&#xff0c;两个函数组合使用可以同时设置上限和下限&…

华为供应链的变革模式和方法P105(105页PPT)(文末有下载方式)

资料解读&#xff1a;华为供应链的变革模式和方法 详细资料请看本解读文章的最后内容。 华为作为全球领先的通信技术公司&#xff0c;其供应链管理一直是业界关注的焦点。本文将从华为供应链的变革历程、理论基础、转型要素、流程再造、模式升级以及未来展望等多个维度&#…

ETL中的实用功能以及数据集成方式

在企业数字化转型的进程中&#xff0c;数据集成扮演着至关重要的角色。它不仅是实现信息流动和系统协同的关键步骤&#xff0c;更是提升企业运营效率和决策能力的核心驱动力。ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作为数据集成的重要工具&…

程序化广告行业(26/89):深入了解广告投放计划与供应商入库流程

程序化广告行业&#xff08;26/89&#xff09;&#xff1a;深入了解广告投放计划与供应商入库流程 大家好&#xff01;一直以来&#xff0c;我都希望能和大家在技术领域共同探索、共同进步。随着互联网的发展&#xff0c;程序化广告在营销领域占据着越来越重要的地位。今天&am…

联邦学习(Federated Learning)

1. 概念 联邦学习&#xff08;Federated Learning, FL&#xff09;是一种分布式机器学习技术&#xff0c;它允许多个参与方&#xff08;如设备、机构或企业&#xff09;在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式&#xff0c;保护…

java学习总结(六)Spring IOC

一、Spring框架介绍 Spring优点&#xff1a; 1、方便解耦&#xff0c;简化开发,IOC控制反转 Spring 就是一个大工厂&#xff0c;可以将所有对象创建和依赖关系维护交给Spring 2、AOP 编程的支持 Spring 提供面向切编程&#xff0c;可以方便的实现对序进行权限拦截、运监控等…

关于深度学习参数寻优的一些介绍

在深度学习中&#xff0c;参数是十分重要的&#xff0c;严重影响预测的结果。而具体在深度学习中&#xff0c;如何让模型自己找到最合适的参数&#xff08;权重与偏置等&#xff09;&#xff0c;这就是深度学习一词中“学习”的核心含义。在本文中&#xff0c;我将介绍除梯度下…

【漫话机器学习系列】141.灵敏度(Sensitivity)

灵敏度&#xff08;Sensitivity&#xff09;详解 在统计学和机器学习领域&#xff0c;灵敏度&#xff08;Sensitivity&#xff09;&#xff0c;也称为召回率&#xff08;Recall&#xff09;&#xff0c;是一种衡量分类模型在检测正例时的能力的重要指标。灵敏度的计算公式如下…