苏州建设网站制作/青岛网站建设方案

苏州建设网站制作,青岛网站建设方案,赣州市建设局建管科网站,网站日志管理基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地JAR批量传私服

在有网络隔离的环境下&#xff0c;Maven项目如果没有搭建私服就得把用到的通用组件通过U盘在每个组员间拷贝来拷贝去。非常的麻烦跟低效。搭建私服&#xff0c;如果通用组件很多的时候手工一个一个上传更是非常的麻烦跟低效&#xff1b; 我就遇上这问题&#xff0c;跟A公司合作…

【ROS实战】02-ROS架构介绍

1. 简介 你是否曾有过这样的疑问&#xff1a;我按照文档安装了ROS&#xff0c;依照要求写了一些示例节点&#xff08;node&#xff09;、消息&#xff08;msg&#xff09;和话题&#xff08;topic&#xff09;&#xff0c;但觉得过程既麻烦又繁琐。也许你开始怀疑&#xff1a;…

LeetCode算法题(Go语言实现)_07

题目 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复…

网络华为HCIA+HCIP 网络编程自动化

telnetlib介绍 telnetlib是Python标准库中的模块。它提供了实现Telnet功能的类telnetlib.Telnet。这里通过调用telnetlib.Telnet类里的不同方法实现不同功能。 配置云

查看GPU型号、大小;CPU型号、个数、核数、内存

GPU型号、大小 nvidia-smiCPU型号 cat /proc/cpuinfo | grep model name | uniqCPU个数 cat /proc/cpuinfo | grep "physical id" | uniq | wc -lCPU核数 cat /proc/cpuinfo | grep "cpu cores" | uniqCPU内存 cat /proc/meminfo | grep MemTotal参考…

Android Handler 通过线程安全的 MessageQueue 和底层唤醒机制实现跨线程通信

目录 一、MessageQueue 的线程安全实现 1. 消息队列的同步锁&#xff08;synchronized&#xff09; 2. 消息顺序与延时处理 二、底层唤醒机制&#xff1a;从 Java 到 Linux 内核 1. 消息插入后的唤醒逻辑 2. Native 层实现&#xff08;基于 Linux 的 eventfd 和 epoll&am…

MySQL中的锁机制:从全局锁到行级锁

目录 1. 锁的基本概念 2. 全局锁 2.1 全局锁的定义 2.2 全局锁的类型 2.3 全局锁的使用场景 2.4 全局锁的实现方式 2.5 全局锁的优缺点 2.6 全局锁的优化 3. 表级锁 3.1 表级锁的类型 3.2 表级锁的使用场景 3.3 表级锁的优缺点 4. 意向锁&#xff08;Intention Lo…

基于WebRTC的嵌入式音视频通话SDK:EasyRTC跨平台兼容性技术架构实时通信的底层实现

EasyRTC的核心架构围绕WebRTC技术构建&#xff0c;同时通过扩展信令服务、媒体服务器和NAT穿透机制&#xff0c;解决了WebRTC在实际部署中的痛点。其架构可以分为以下几个核心模块&#xff1a; 1&#xff09;WebRTC基础层 媒体捕获与处理&#xff1a;通过getUserMediaAPI获取…

微服务架构中的API网关:Spring Cloud与Kong/Traefik等方案对比

微服务架构中的API网关&#xff1a;Spring Cloud与Kong/Traefik等方案对比 一、API 网关的概念二、API 网关的主要功能2.1 统一入口与路由转发2.2 安全与权限控制2.3 流量管理与容错2.4 API 管理与聚合2.5 监控与日志2.5 协议转换与适配2.6 控制平面与配置管理 三、API 网关选型…

NewStar CTF web wp

文章目录 week1headach3会赢吗智械危机谢谢皮蛋PangBai 过家家&#xff08;1&#xff09; week3include meblindsql1臭皮的计算机臭皮踩踩背这照片是你吗 week4Pangbai过家家四blindsql2chocolateezcmsssezpollute隐藏的密码 weeek5pangbai过家家(5)redissqlshell臭皮吹泡泡臭皮…

Linux驱动开发-①中断②阻塞、非阻塞IO和异步通知

Linux驱动开发-①中断②阻塞、非阻塞IO和异步通知 一&#xff0c;中断1.中断的流程2.上半部和下半部2.1上半部2.2下半部2.2.1 tasklet2.2.2 工作队列 3.按键延时消抖中断程序 二&#xff0c;阻塞和非阻塞IO和异步通知1.阻塞IO1.1 常见结构11.2 常见结构2 2.非阻塞IO2.1 驱动结构…

Docker和Dify学习笔记

文章目录 1 docker学习1.1 基本命令使用1.1.1 docker ps查看当前正在运行的镜像1.1.2 docker stop停止容器1.1.3 docker compose容器编排1.1.4 docker网络[1] 进入到容器里面敲命令[2] docker network ls[3] brige网络模式下容器访问宿主机的方式 2 Dify的安装和基础使用2.1 下…

探秘Transformer系列之(16)--- 资源占用

探秘Transformer系列之&#xff08;16&#xff09;— 资源占用 文章目录 探秘Transformer系列之&#xff08;16&#xff09;--- 资源占用0x00 概述0x01 背景知识1.1 数据类型1.2 进制&换算数字进制存储度量换算 1.3 参数显存占用有参数的层无参数的层所需资源 1.4 计算量 0…

jaeger安装和简单使用

文章目录 jaeger安装和使用什么是jaegerjaeger安装 jaeger安装和使用 什么是jaeger 官网&#xff1a;https://www.jaegertracing.io/ Jaeger 是一个分布式追踪系统。Jaeger的灵感来自 Dapper 和 OpenZipkin&#xff0c;是一个由 Uber 创建并捐赠给 云原生计算基金会&#xf…

【Mybatis-plus】在mybatis-plus中 if test标签如何判断 list不为空

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【递归,搜索与回溯算法篇】- 名词解释

一. 递归 1. 什么是递归&#xff1f; 定义&#xff1a; 函数自己调用自己的情况关键点&#xff1a; ➀终止条件&#xff1a; 必须明确递归出口&#xff0c;避免无限递归 ➁子问题拆分&#xff1a; 问题需能分解成结构相同的更小的子问题缺点&#xff1a; ➀栈溢出风险&#x…

大屏技术汇集【目录】

Cesium 自从首次发布以来&#xff0c;经历了多个版本的迭代和更新&#xff0c;每个版本都带来了性能改进、新功能添加以及对现有功能的优化。以下是 Cesium 一些重要版本及其主要特点&#xff1a; 主要版本概述 Cesium 1.0 (2012年) 初始版本发布&#xff0c;确立了Cesium作为…

图解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模块详细说明 基于AUTOSAR标准的EEPROM抽象层技术解析 目录 1. 概述 1.1 核心功能1.2 模块地位2. 架构概览 2.1 架构层次2.2 模块交互3. 配置结构 3.1 主要配置容器3.2 关键配置参数4. 状态管理 4.1 基本状态4.2 状态转换5. 接口设计 5.1 主要接口分类5.2 接…

C++相关基础概念之入门讲解(下)

1. 引用 ​ int main() {const int a10;int& aaa;aa;cout<<aa<<endl; } 引用 不是新定义一个变量&#xff0c;而 是给已存在变量取了一个别名 &#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量 共用同一块内存空间&#xff08;初…

注意力机制,本质上是在做什么?

本文以自注意机制为例&#xff0c;输入一个4*4的矩阵 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时&#xff0c;计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…