基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现
基于FPGA实现频率、幅度、相位可调的DDS
1 摘要
直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函数发生器、混频器、调制器、声音合成器以及作为数字锁相环的一部分。
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)低通滤波器:对数模转换器出来的波形进行滤波,达到一个平滑波形的作用。
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 转换器即数/模转换器指将数字信号转换为模拟信号的电子元件或电路。
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相关文章:
基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现
基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…...
k8s高可用集群安装
一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …...
WPF Reactive 数据绑定
文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…...
WSL 环境桥接与雷达通信配置笔记
作者: DWDROME 维护时间: 2025-03-22 参考文章:Windows子系统(WSL)通过桥接网络实现被外部局域网主机直接访问 WSL 环境桥接与雷达通信配置笔记 环境说明 Windows 11 专业版(启用 Hyper-V)WSL2 Ubuntu 20.04物理网线(…...
3DMAX曲线生成器插件CurveGenerator使用方法
1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具,用户可以通过简单的UI界面输入参数,快速生成多条样条线。每条样条线的高度值随机生成,且可以自定义以下参数: 顶点数量:每条…...
六十天前端强化训练之第二十六天之Vue Router 动态路由参数大师级详解
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、知识讲解 1. Vue Router 核心概念 2. 动态路由参数原理 3. 参数传递方案对比 二、核心代码示例 1. 完整路由配置 2. 参数接收组件 3. 导航操作示例 三、实现效果示…...
Model Context Protocol:下一代AI系统集成范式革命
在2023年全球AI工程化报告中,开发者面临的核心痛点排名前三的分别是:模型与业务系统集成复杂度(58%)、上下文管理碎片化(42%)、工具调用标准化缺失(37%)。传统API集成模式在对接大语言模型时暴露明显短板:RESTful接口无法承载动态上下文,GraphQL缺乏工具编排能力,gR…...
Java多线程与高并发专题——Future 是什么?
引入 在上一篇Callable 和 Runnable 的不同?的最后,我们有提到和 Callable 配合的有一个 Future 类,通过 Future 可以了解任务执行情况,或者取消任务的执行,还可获取任务执行的结果,这些功能都是 Runnable…...
DeepSeek本地搭建
1. 软件下载安装 Miniconda Miniconda下载地址 选择对应的版本下载,此处下载如下版本 Python 3.10 conda 25.1.1 安装完成后,配置环境变量,打开cmd命令窗口验证 Python Python的版本为 3.10 PyTorch PyTorch下载地址 后面通过命令下…...
维普AIGC降重方法有哪些?
在学术写作和论文创作中,重复率过高是许多人面临的一大难题。随着科技的发展,维普 AIGC 为我们提供了一系列有效的降重方法。那么,维普AIGC降重方法有哪些呢?接下来就为大家详细介绍。 语义理解与改写 维普 AIGC 具备强大的语义理…...
设计模式之命令模式:原理、实现与应用
引言 命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使你可以用不同的请求对客户进行参数化。命令模式支持请求的排队、记录日志、撤销操作等功能。本文将深入探讨命令模式的原理、实现方式以及实际应用…...
2025年十大AI工具对比
2025年十大AI工具对比 以下是2025年各大AI工具的详细对比,涵盖性能、功能、用户评价等方面,并以表格形式呈现。数据来源于多个权威来源,确保信息全面且准确。 对比表格 排名AI工具名称主要功能性能特点用户评价适用场景1DeepSeek多模态AI、…...
100道C#高频经典面试题及答案解析:C#程序员面试题库分类总结
分类一:C#基础语法 1. 值类型与引用类型的核心区别? 答案: 存储位置:值类型存栈/堆内联,引用类型存堆赋值方式:值类型复制内容,引用类型复制地址示例类型:int(值类型&…...
南京审计大学:《 面向工程审计行业的DeepSeek大模型应用指南》.pdf(免费下载)
大家好,我是吾鳴。 今天吾鳴要给大家分享的是由南京审计大学出品的《面向工程审计行业的DeepSeek大模型应用指南》,这份报告与《面向审计行业DeepSeek大模型操作指南》不同,这份报告更多的讲述DeepSeek怎么与工程审计行业结合,应该…...
DeepSeek AI大模型工作机制及未来方向
DeepSeek模型作为一款先进的人工智能模型,其工作原理结合了深度学习的前沿技术与工程优化策略,以下是其核心工作机制的分步解析: 1. 模型架构:基于Transformer的演进 - 核心结构:采用多层Transformer解码器堆叠&am…...
第十七章:Future Directions_《C++ Templates》notes
Future Directions 核心重难点:示例代码: 设计题多选题答案设计题详解 核心重难点: 泛型非类型模板参数 允许任意类型作为非类型模板参数(如template<typename T, auto N>)需解决类型推导和链接问题 编译期控制…...
NVIDIA Dynamo源码编译
Ref https://github.com/PyO3/maturin Rust 程序设计语言 代码库: https://github.com/ai-dynamo/dynamo https://github.com/ai-dynamo/nixl dynamo/container/Dockerfile.vllm 相关whl包 官方提供了4个whl包 ai_dynamo # 这个包ubuntu 22.04也可以用&…...
【前端】Canvas画布实现在线的唇膏换色功能
【前端】Canvas画布实现在线的唇膏换色功能 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【前端】Canvas画布实现在线的唇膏换色功能背景概述以下是我们的实现方法!第一步 — 找…...
arcgispro加载在线地图
World_Imagery (MapServer)https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer添加arcgis server WMTS 服务 by xdcxdc.at xdc的个人站点。博客请转至 http://i.xdc.at/ http://xdc.at/map/wmts 添加WMTS服务器...
华为网路设备学习-16 虚拟路由器冗余协议(VRRP)
VRRP是针对干线上三层网络设备(如:路由器、防火墙等)的网络虚拟化技术,提供冗余和状态监测等功能。确保在网络中的单点故障发生时,能够快速切换到备份设备,从而保证网络通信的连续性和可靠性。 VRRP通过…...
使用请求调用本地部署的stable-diffusion接口
stable-diffusion-webui项目地址 具体部署教程请去B站寻找或者直接使用整合包 这里直接编写工具类 public class StableDiffusionUtil {private static final String BASE_URL "http://127.0.0.1:7860";private static final OkHttpClient CLIENT new OkHttpClien…...
封装一个分割线组件
最终样式 Vue2代码 <template><div class"sep-line"><div class"sep-label"><span class"sep-box-text"><slot>{{ title }}</slot> <!-- 默认插槽内容,如果没有传递内容则使用title -->&…...
网络HTTPS协议
Https HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 协议的加密版本,它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说: • 加密通信:在用户请求访问一个 HTTPS 网站时,客户端&#x…...
CMake 函数和宏
CMake 函数 CMake 函数定义语法如下, 其中 name 为函数名, <arg1> 为参数名, <commands> 为函数体. 函数定义后, 可以通过 name 调用函数. 函数名允许字母数字下划线, 不区分大小写. function(name [<arg1> ...])<commands> endfunction()如下的样例…...
OSASIS(One-Shot Structure-Aware Stylized Image Synthesis)
文章目录 摘要abstract论文摘要方法损失函数实验结论 总结 摘要 本周阅读了一篇关于新型图像风格化的论文《One-Shot Structure-Aware Stylized Image Synthesis》,旨在解决现有GAN模型在风格化过程中难以保持输入图像结构的问题。通过分离图像的结构和语义信息&am…...
C++学习之网盘项目单例模式
目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…...
Leetcode—15. 三数之和(哈希表—基础算法)
题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…...
Apache Flink技术原理深入解析:任务执行流程全景图
前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…...
DeepBI:重构流量逻辑,助力亚马逊广告实现高效流量增长
在日益激烈的跨境电商竞争环境中,广告投放早已从“粗放撒网”走向“精细化运营”。尤其是在亚马逊这样一个成熟且竞争白热化的平台,如何在广告预算有限的前提下实现高效曝光、精准触达、稳定转化,成为众多卖家和运营团队面临的核心挑战。 De…...
RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”
嘿,亲爱的算法工程师们!今天咱们聊一聊PDF解析的那些事儿,简直就像是在玩一场“信息捉迷藏”游戏!PDF文档就像是个调皮的小精灵,表面上看起来规规矩矩,但当你想要从它那里提取信息时,它就开始跟…...
