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

DDS信号发生器设计

一、基本概述

1.1 DDS简介

DDS信号发生器即直接数字频率合成(Direct Digital Frequency Synthesis,简称DDS)是一种利用数字技术生成信号的方法。它通过数字信号处理技术,将数字信号转换为模拟信号,从而生成高质量的正弦波、方波、三角波等信号。

1.2 DDS工作原理

1.2.1 核心组成部分

DDS系统主要由以下几个模块构成:

  • 相位累加器(Phase Accumulator)

  • 波形查找表(Waveform Look-Up Table, LUT)

  • 数模转换器(DAC)

  • 低通滤波器(LPF)

1.2.2 工作流程

(1)相位累加

相位累加器是DDS信号发生器的核心部分,用于生成相位信息。它由一个累加器和一个频率控制字(Frequency Control Word, FCW)组成。每次时钟周期,频率控制字会被加到累加器中,累加器的输出即为当前的相位值。

  • 输入:频率控制字(Frequency Tuning Word, FTW),由用户设定。

  • 作用:相位累加器在时钟信号(fclkfclk​)的驱动下,对FTW进行累加,生成线性递增的相位值(地址)。

  • 公式

     

    其中,NN 为相位累加器的位数(通常24~32位),决定频率分辨率。

(2)波形查找

查找表(Lookup Table, LUT)存储了正弦波或其他波形的幅度值。相位累加器的输出作为查找表的地址,查找表根据该地址输出对应的幅度值。查找表通常存储的是一个完整周期的波形数据。波形选择模块用于选择不同的波形,如正弦波、方波、三角波等。通过改变查找表的内容或逻辑控制,可以生成不同的波形。

  • 波形存储器(LUT):预存目标波形(如正弦波、方波)的离散采样值。

  • 寻址:相位累加器的输出作为地址,从LUT中读取对应的波形幅值数据。

  • 分辨率:LUT的深度和位宽影响波形精度。

(3)数模转换(DAC)

DAC将数字幅度值转换为模拟信号。DAC的分辨率(如8位、12位、16位)决定了输出信号的精度和质量。

  • 将查找表输出的数字幅值转换为模拟电压信号。

  • DAC的转换速度和位数直接影响输出信号的质量(如信噪比、谐波失真)。

(4)低通滤波

  • 滤除DAC输出的高频量化噪声和时钟馈通信号。

  • 截止频率通常略高于所需信号的最大频率。

1.2.3 输出频率计算

DDS的输出频率由以下公式决定:

  • fclkfclk​:系统时钟频率(如100 MHz)。

  • NN:相位累加器位数(如32位)。

  • FTW:频率控制字,由用户编程设置。

比如: 若 fclk=100 MHzfclk​=100MHz,N=32N=32,要输出 1 MHz1MHz 正弦波:

 1.3 常见的RAM、ROM、FIFO等IP核的参数设置和调用过程

IP软核是预先设计好的、可重复使用的数字电路模块,用于简化复杂系统的设计。它们通常以Verilog HDL或VHDL等硬件描述语言编写,可以在FPGA或ASIC中实现。

1.3.1 RAM IP核的参数设置和调用过程

RAM 是随机存取存储器(Random Access Memory)的简称,是一个易失性存储器。 RAM 工作时可以随时从任何一个指定的地址写入或读出数据,同时我们还能修改其存储的数据,即写入新的数据,这是 ROM 所并不具备的功能。在 FPGA 中这也是其与 ROM 的最大区别。ROM 是只读存储器,而 RAM 是可写可读存储器,在我们 FPGA 中使用这两个存储器主要也是要区分这一点,因为这两个存储器使用的都是我们 FPGA 内部的 RAM 资源,不同的是 ROM 是只用到了 RAM 资源的读数据端口。

 单端口RAM参数:

  • 数据宽度(Data Width):8/16/32/64位等

  • 存储深度(Depth):根据需求设置(如1024, 2048等)

  • 操作模式:通常为"Write First"、"Read First"或"No Change"

  • 初始化文件:可加载.mif或.hex文件初始化RAM内容

  • 寄存器选项:输出是否寄存(增加一个时钟周期延迟但提高时序性能)

双端口RAM参数:

  • 除单端口参数外还需设置:

    • 端口A和端口B的操作模式

    • 是否允许同时读写

    • 冲突解决策略

1.3.2 ROM IP核的参数设置和调用过程

ROM 是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除,且资料不会因为电源关闭而消失。而事 实上在 FPGA 中通过 IP 核生成的 ROM 或 RAM(RAM 将在下一节为大家讲解)调用的都是FPGA 内部的 RAM 资源,掉电内容都会丢失(这也很容易解释,FPGA 芯片内部本来就没有掉电非易失存储器单元)。用 IP 核生成的 ROM 模块只是提前添加了数据文件(.coe 格式)(.mf/.nex格式),在 FPGA 运行时通过数据文件给 ROM 模块初始化,才使得 ROM 模块像个“真正”的掉电非易失存储器;也正是这个原因,ROM 模块的内容必须提前在数据文件中写死,无法在电路中修改。

常见参数设置

  • 数据宽度:同RAM

  • 存储深度:同RAM

  • 初始化文件:必须提供.mif或.hex文件

  • 输出寄存器:可选是否寄存输出

1.3.3 FIFO IP核的参数设置和调用过程

   FIFO(First In First Out,即先入先出),是一种数据缓冲器,用来实现数据先入先出的读写方式。与 ROM 或 RAM 的按地址读写方式不同,FIFO 的读写遵循“先进先出”的原则,即数据按顺序写入 FIFO,先被写入的数据同样在读取的时候先被读出,所以 FIFO存储器没有地址线。FIFO 有一个写端口和一个读端口外部无需使用者控制地址,使用方便。

        FIFO 存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用,后面实例中如:多比特数据做跨时钟域的转换、前后带宽不同步等都用到了FIFO。FIFO 根据读写时钟是否相同,分为 SCFIFO(同步 FIFO)和 DCFIFO(异步FIFO),SCFIFO 的读写为同一时钟,应用在同步时钟系统中;DCFIFO 的读写时钟不同,应用在异步时钟系统中。

数据的产生模块与数据使用模块不对应时就会使用到FIFO,如两者的时钟频率不同无法在同一时钟下进行传输(多比特数据做跨时钟域的转换) ;两者的数据带宽不同下传输(前后带宽不同步)。

基本参数:

  • FIFO实现方式:基于Block RAM或Distributed RAM

  • 数据宽度:8/16/32/64位等

  • FIFO深度:16/32/64/128/256等

  • 满/空标志:设置几乎满/几乎空的阈值

高级参数:

  • 读写时钟域:同步或异步FIFO

  • 握手信号:可选是否添加数据有效信号

  • 复位类型:同步或异步复位

二、波形仿真器的设计与制作

2.1 内容与要求

采用数字频率合成(Direct Digital FrequencySynthesis,简称DDS)设计制作一个波形发生器,仿真后,在DE2-115开发板上实践。要求:
1)利用DDS技术合成正弦波和方波;
2)输出信号的频率范围为10Hz~5MHz,最小频率分辨率小于1kHz;
3)使用嵌入式逻辑分析仪SignalTap II实时测试输出波形的离散数据。

2.2 具体步骤

(1)在Quartus中创建新工程,步骤在之前的博客中有具体说明

2.2.1 相位累加器

(2)编写代码

module addr_cnt(CPi,K,ROMaddr,Address);input CPi;input [12:0] K;output reg [9:0] ROMaddr;output reg [16:0] Address;always @(posedge CPi) beginAddress=Address+K;ROMaddr=Address[16:7];end
endmodule

(3)将 addr_cnt 设置为顶层文件

将Project Navigator 设置为 Files ,之后右键addr_cnt.v ,选中 Set as Top-Level Entity

 

打开生成的.bsf文件如下图所示:

生成并打开.bsf文件

右键addr_cnt.v,在弹出的选项中选择 Create Symbol Files for Current File,之后生成的 .bsf 文件会保存在工程目录下,找到对应的文件打开即可

2.2.2 波形存储器ROM

方波模块

代码如下:

module squwave(CPi,RSTn,Address,Qsquare);input CPi;input RSTn;input [16:0] Address;output reg [11:0] Qsquare;always @(posedge CPi)if (!RSTn)Qsquare=12'h000; else beginif(Address<=17'h0FFFF)Qsquare=12'hFFF;else Qsquare=12'h000;end
endmodule

将该模块设置为顶层文件,并编译生成 .bsf 如下图:

正弦波形存储器

首先编译一个C程序( Dev C++ 或者别的编译器都行),编译之前建议先在对应的Quartus工程目录下新建一个文件夹,将C程序保存在该文件夹内

/*myMIF.c*/
#include <stdio.h>
#include <math.h>
#define PI 3.141592
#define DEPTH 1024
#define WIDTH 12
int main(void)
{int n,temp;float v;FILE *fp;fp=fopen("Sine1024.mif","w+");if(NULL==fp)printf("Can not creat file!\r\n");else{printf("File created successfully!\n");fprintf(fp,"DEPTH=%d;\n",DEPTH);fprintf(fp,"WIDTH=%d;\n",WIDTH);fprintf(fp,"ADDRESS_RADIX=HEX;\n");fprintf(fp,"DATA_RADIX=HEX;\n");fprintf(fp,"CONTENT\n");fprintf(fp,"BEGIN\n");for(n=0;n<DEPTH;n++){v=sin(2*PI*n/DEPTH);temp=(int)((v+1)*4095/2);fprintf(fp,"%04x : %03x;\n",n,temp);}fprintf(fp,"END;\n");fclose(fp);}} 

 编译运行以上代码,会生成 myMIF.exe文件以及Sine 1024.mif 文件,如下图:

使用Quartus调用LPM_ROM定制正弦波形存储器:点击Tools--->IP Catalog,并在IP Catalog搜索框搜索 ROM ,双击 找到 ROM 1-PORT并双击

在弹出的弹框里面修改命名,如下图所示:

点击OK,会弹出如下界面:

修改以下参数:

取消 ‘q’output port的勾选

点击 Browse..,并选中之前生成好的 Sine1024.mif

之后一直Next,直到 Finish,ROM配置完成

锁相环倍频电路

在IP Catalog 搜索栏中搜索 ALTPLL,选中 ALTPLL 并双击

修改如图所示的参数 

之后一直 Next 默认选项,直到出现以下界面,修改Clock multi...的参数

之后也是一直默认选项,直到 Finish

2.2.3 顶层电路设计

代码如下:

module DDS_top (CLOCK_50,RSTn,WaveSel,K,
WaveValue,LEDG,CLOCK_100);input CLOCK_50;input RSTn;input [1:0] WaveSel;input [12:0] K;output reg [11:0] WaveValue;wire [9:0] ROMaddr/* synthesis keep */;wire [16:0] Address;wire [11:0] Qsine,Qsquare;output [0:0] LEDG;output CLOCK_100;wire CPi=CLOCK_100;myALTPLL PLL100M_CP_inst(.inclk0(CLOCK_50),.c0(CLOCK_100),.locked(LEDG[0]));addr_cnt U0_instance(CPi,K,ROMaddr,Address);myROM ROM_inst(.address(ROMaddr),.clock(CPi),.q(Qsine));squwave U1(CPi,RSTn,Address,Qsquare);always @(posedge CPi)begincase(WaveSel)2'b01:WaveValue=Qsine;2'b10:WaveValue=Qsquare;default:WaveValue=Qsine;endcaseend
endmodule

跟之前一样,将该模块设置为顶层文件并进行编译

三、DE2-115设计实现

配置引脚

可以直接导入DE2_115_pin_assignments.csv文件进行配置,也可以手动进行配置

module DE2_115_DDS_top(CLOCK_50,KEY,SW,GPIO_0,LEDG);input CLOCK_50;input [3:3] KEY;input [17:0] SW;output [12:0] GPIO_0;output [0:0] LEDG;wire CLOCK_100;assign GPIO_0[12]=CLOCK_100;wire RSTn=KEY[3];wire [1:0] WaveSel=SW[17:16];wire [12:0] K=SW[12:0];wire [11:0] WaveValue;assign GPIO_0[11:0]=WaveValue;DDS_top DE2(CLOCK_50,RSTn,WaveSel,K,WaveValue,LEDG,CLOCK_100);
endmodule

引脚配置完成要再次编译运行

接下来就可以使用SignalTap ll实时测试输出波形的离散数据,选择Tools-->SignalTap ll Logic Analyzer

右键 Setup 上方空白处,点击 Add Node... 进行添加

全部确认无误后,保存文件并编译(要连接开发板)

波形图如下:

四、总结

通过这次DDS信号发生器的设计和实现,学习了数字信号处理的强大能力和FPGA设计的灵活性。从理论学习到实际操作,我不仅了解到了DDS技术的基本原理和实现方法,还学会了如何在Quartus软件中进行模块化设计和引脚配置。这次实践让我认识到了细节的重要性,每一个小的配置错误都可能导致整个系统无法正常工作。

参考博客:

20【FPGA】FPGA开发中常用的IP核——PLL/ROM/RAM/FIFO_fpga ip核-CSDN博客

【DE2-115】Verilog实现DDS+Quartus仿真波形-CSDN博客

相关文章:

DDS信号发生器设计

一、基本概述 1.1 DDS简介 DDS信号发生器即直接数字频率合成&#xff08;Direct Digital Frequency Synthesis&#xff0c;简称DDS&#xff09;是一种利用数字技术生成信号的方法。它通过数字信号处理技术&#xff0c;将数字信号转换为模拟信号&#xff0c;从而生成高质量的正…...

23黑马产品经理Day01

今天过了一遍23黑马产品经理的基础视频 问题思考维度 抓住核心用户 为什么需要抓住核心用户&#xff1f; 主要原因&#xff1a;用户越来越细分&#xff0c;保持市场竞争力&#xff0c;产品开发推广更聚焦 做产品为什么要了解用户&#xff1a;了解用户的付费点&#xff0c;…...

18-21源码剖析——Mybatis整体架构设计、核心组件调用关系、源码环境搭建

学习视频资料来源&#xff1a;https://www.bilibili.com/video/BV1R14y1W7yS 文章目录 1. 架构设计2. 核心组件及调用关系3. 源码环境搭建3.1 测试类3.2 实体类3.3 核心配置文件3.4 映射配置文件3.5 遇到的问题 1. 架构设计 Mybatis整体架构分为4层&#xff1a; 接口层&#…...

东方潮流亮相广州益民艺术馆|朋克编码“艺术家潮玩”系列开幕引爆热潮

4月15日&#xff0c;由我的宇宙旗下公司朋克编码携“艺术家潮玩”系列亮相广州白云益民艺术馆&#xff0c;标志着其全国文化推广计划正式启航。本次展览围绕“潮玩艺术东方文化”展开&#xff0c;融合传统文化与当代潮流&#xff0c;以年轻化方式赋能中国文化出海。 展览现场潮…...

充电宝项目:规则引擎Drools学习

文章目录 规则引擎 Drools1 问题2 规则引擎概述2.1 规则引擎2.2 使用规则引擎的优势2.3 规则引擎应用场景2.4 Drools介绍 3 Drools入门案例3.1 创建springboot项目 引入依赖3.2 添加Drools配置类3.4 创建实体类Order3.5 orderScore.drl3.6 编写测试类 4 Drools基础语法4.1 规则…...

C++零基础实践教程 文件输入输出

模块八&#xff1a;文件输入输出 (数据持久化) 在之前的模块中&#xff0c;我们学习了如何使用程序处理数据。然而&#xff0c;当程序结束运行时&#xff0c;这些数据通常会丢失。数据持久化 (Data Persistence) 指的是将程序中的数据存储到非易失性存储介质&#xff08;如硬盘…...

SpringAI+DeepSeek大模型应用开发——1 AI概述

AI领域常用词汇 LLM&#xff08;LargeLanguage Model&#xff0c;大语言模型&#xff09; 能理解和生成自然语言的巨型AI模型&#xff0c;通过海量文本训练。例子&#xff1a;GPT-4、Claude、DeepSeek、文心一言、通义干问。 G&#xff08;Generative&#xff09;生成式: 根据上…...

数据中台进化史:从概念萌芽到价值变现的蜕变之路

在数字化转型的浪潮中&#xff0c;数据中台已成为企业驾驭数据、驱动业务创新的关键力量。回顾数据中台的发展历程&#xff0c;犹如一场从混沌到有序、从萌芽到成熟的精彩蜕变&#xff0c;它由湖仓一体、数据治理平台、数据服务平台三大核心要素逐步构建而成&#xff0c;每一个…...

【Java学习笔记】运算符

运算符 运算符的类型 算数运算符 赋值运算符 关系运算符&#xff08;比较哦啊运算符&#xff09; 逻辑运算符 三元运算符 位运算符&#xff08;需要二进制基础&#xff09; 一、算数运算符 运算符计算范例结果正号77-负号b11; -b-11加法9918-减法10-82*乘法7*856/除法9…...

【python】OpenCV—Tracking(10.6)—People Counting

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考来自 更多有趣的代码示例&#xff0c;可参考【Programming】 1、功能描述 借助 opencv-python&#xff0c;用 SSD 人形检测模型和质心跟踪方法实现对人群的计数 基于质心的跟踪可以参考 【pyt…...

JavaSE学习(前端初体验)

文章目录 前言一、准备环境二、创建站点&#xff08;创建一个文件夹&#xff09;三、将站点部署到编写器中四、VScode实用小设置五、案例展示 前言 首先了解前端三件套&#xff1a;HTML、CSS、JS HTML&#xff1a;超文本标记语言、框架层、描述数据的&#xff1b; CSS&#xf…...

智慧城市像一张无形大网,如何紧密连接你我他?

智慧城市作为复杂巨系统&#xff0c;其核心在于通过技术创新构建无缝连接的网络&#xff0c;使物理空间与数字空间深度融合。这张"无形大网"由物联网感知层、城市数据中台、人工智能中枢、数字服务入口和安全信任机制五大支柱编织而成&#xff0c;正在重塑城市运行规…...

Linux常用命令

一、history 用于显示历史命令。 history 10显示最近10条历史命令。!200使用第200行的指令。history -c清空历史记录。 二、pwd 用于显示当前绝对路径。 pwd显示当前绝对路径。 三、ls 用于以行的形式显示当前文件夹下所有内容。 ls -a显示所有内容&#xff0c;包括隐藏文…...

【AI】SpringAI 第二弹:接入 DeepSeek 官方服务

一、接入 DeepSeek 官方服务 通过一个简单的案例演示接入 DeepSeek 实现简单的问答功能 1.添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> 2…...

QT的信号槽的直接触发,队列触发,自动触发

在Qt中&#xff0c;信号槽机制是一个非常强大的特性&#xff0c;它用于实现对象之间的通信。除了默认的直接触发方式之外&#xff0c;Qt还提供了队列触发等不同的触发方式。 1. 直接触发&#xff08;Direct Connection&#xff09; 直接触发是最常见的连接方式&#xff0c;信…...

typescript html input无法输入解决办法

input里加上这个&#xff1a; onkeydown:(e: KeyboardEvent) > {e.stopPropagation();...

工厂能耗系统智能化解决方案 —— 安科瑞企业能源管控平台

安科瑞顾强 政策背景与“双碳”战略驱动 2025年《政府工作报告》明确提出“单位国内生产总值能耗降低3%左右”的目标&#xff0c;要求通过产业结构升级&#xff08;如高耗能行业技术革新或转型&#xff09;、能源结构优化&#xff08;提高非化石能源占比&#xff09;及数字化…...

栅格数据处理

一、栅格数据的引入与基本操作 &#xff08;一&#xff09;加载栅格数据 在 ArcPy 中&#xff0c;栅格数据可以通过 arcpy.Raster 类来加载。例如&#xff0c;如果你有一个存储在本地路径下的栅格数据文件&#xff08;如 GeoTIFF 格式&#xff09;&#xff0c;可以这样加载&a…...

C语言文件操作

本文重点: 什么是文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭 文件的顺序读写 文件的随机读写 文件结束的判定 什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 程序文件 包括源程序文…...

毛笔书体检测-hog+svm python opencv源码

链接&#xff1a;https://pan.baidu.com/s/1l-bw8zR9psv1HycmMqQBqQ?pwd2ibp 提取码&#xff1a;2ibp --来自百度网盘超级会员V2的分享 1、毛笔字检测运行流程 如果解压文件发现乱码&#xff0c;可以下载Bandizip 解压文件 数据集在百度网盘里面 将文件名字改成images c…...

基于YOLOV11的道路坑洼分析系统

基于YOLOV11的道路坑洼分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】图形化界面与实时检测统计可视化功能 【技术栈】 ①&#xff1a;系统环境&#xff1a;Windows/MacOS/Linux多平台支持&#xff0c;推荐NVIDIA GPU加速 ②…...

【系统搭建】DPDK安装配置与helloworld运行

一&#xff0c;安装相关依赖 1. 安装依赖 sudo apt update && sudo apt install -y \build-essential libnuma-dev meson ninja-build pciutils#安装Python3与PIP3 sudo apt install python3-pip2. 升级 pip 和 setuptools sudo apt install python3-pip python3-de…...

Distortion, Animation Raymarching

这节课的主要目的是对uv进行操作&#xff0c;实现一些动画的效果&#xff0c;实际就是采样的动画 struct texDistort {float2 texScale(float2 uv, float2 scale){float2 texScale (uv - 0.5) * scale 0.5;return texScale;}float2 texRotate(float2 uv, float angle){float…...

架构风格(高软59)

系列文章目录 架构风格 文章目录 系列文章目录前言一、架构风格定义&#xff1f;二、架构风格分类总结 前言 本节讲明架构风格知识点。 一、架构风格定义&#xff1f; 二、架构风格分类 总结 就是高软笔记&#xff0c;大佬请略过&#xff01;...

免费使用RooCode + Boomerang AI + Gemini 2.5 Pro开发套件

若您正在寻找利用免费AI工具简化应用开发的方法,这份指南将为您揭开惊喜。 我们将详解如何免费整合RooCode、Boomerang AI智能代理与Google Gemini 2.5 Pro API,在Visual Studio Code中实现自动化编程加速。 这套方案能让您在几分钟内从创意跃迁至可运行原型。 套件构成与…...

《MAmmoTH2: Scaling Instructions from the Web》全文翻译

《MAmmoTH2: Scaling Instructions from the Web》 MAmmoTH2&#xff1a;从网络规模化采集指令数据 摘要 指令调优提升了大语言模型&#xff08;LLM&#xff09;的推理能力&#xff0c;其中数据质量和规模化是关键因素。大多数指令调优数据来源于人工众包或GPT-4蒸馏。我们提…...

解决Ubuntu终端命令不能补全的问题

使用命令&#xff1a; sudo vi /etc/bash.bashr 把框出的部分取消注释&#xff0c;取消后截图如下&#xff0c;保存退出&#xff1a; 使用命令env -i bash --noprofile --norc, 进行测试&#xff0c;查看tab自动补全是否可以使用。 tab键可正常使用&#xff0c; env -i bash …...

知识图谱与其它知识库的关系

知识图谱与其它知识库的关系 知识图谱与传统知识库&#xff1a;解构数据连接的哲学知识图谱的商业价值&#xff1a;连接带来的革命选择知识图谱还是传统数据库&#xff1f;一个实用指南 知识图谱的出现&#xff0c;正在改变了我们组织和理解信息的方式。 这种技术不仅仅是一种数…...

STM32基础教程——DMA+ADC多通道

目录 前言 ​编辑 技术实现 连线图 代码实现 技术要点 实验结果 问题记录 前言 DMA(Direct Memory Access)直接存储器存取&#xff0c;用来提供在外设和存储器 之间或者存储器和存储器之间的高速数据传输。无需CPU干预&#xff0c;数据可以通过DMA快速地移动&#xff0…...

波束形成(BF)从算法仿真到工程源码实现-第十一节-非线性波束形成算法工程化

一、概述 本节我们对非线性波束形成算法进行工程化&#xff0c;运行在respeaker core v2平台上&#xff0c;算法实时率在0.046左右。更多资料和代码可以进入https://t.zsxq.com/qgmoN &#xff0c;同时欢迎大家提出宝贵的建议&#xff0c;以共同探讨学习。 二、算法实现 2.1 …...

Windows安装Rust版本GDAL

前言 笔者想安装GDAL&#xff0c;这是一个开源的地理数据库&#xff0c; 笔者到处搜索&#xff0c;最后看到这位大佬写的这篇文章&#xff0c;终于成功了。 aliothor/Windows-Install-Rust-Gdal-Tutorial: Windows Install Rust Version Gdal Stepshttps://github.com/aliot…...

OpenCv高阶(六)——图像的透视变换

目录 一、透视变换的定义与作用 二、透视变换的过程 三、OpenCV 中的透视变换函数 1. cv2.getPerspectiveTransform(src, dst) 2. cv2.warpPerspective(src, H, dsize, dstNone, flagscv2.INTER_LINEAR, borderModecv2.BORDER_CONSTANT, borderValue0) 四、文档扫描校正&a…...

常用正则化技术dropout

在深度学习中&#xff0c;​​Dropout​​ 是一种常用的正则化技术&#xff0c;用于防止神经网络过拟合。它的核心思想是​​随机丢弃&#xff08;临时关闭&#xff09;网络中的部分神经元​​&#xff0c;迫使模型不依赖单一神经元&#xff0c;从而提升泛化能力。 1. Dropout…...

66.加1

目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#…...

Tecnomatix Plant Simulation 2302安装教程

Tecnomatix Plant Simulation 2302安装教程&#xff0c;这个比较简单&#xff0c;只有4步即可完成。 第1步&#xff1a;获取并下载安装包 Follow WX account and reply: 2302, get the installation package link. 下载安装包至电脑本地&#xff0c;打开安装包文件如下图所示…...

Flutter 与原生通信

Flutter 与原生之间的通信主要基于通道机制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 与原生之间的方法调用&#xff0c;实现双向通信&#xff0c;适合一次性的方法调用并获取返回值&#xff0c;如 Flut…...

关于postman的使用(一)

postman创建被测系统结构 改为被测系统名称 添加一级功能 添加接口测试 请求发起前脚本和请求发起后脚本 请求前运行脚本&#xff08;需要一个随机的岗位名称&#xff09;&#xff1a; 上述脚本功能是自动生成一个岗位名称并且配置它为postman的变量下面是调用 请求后运行脚本…...

【c语言】深入理解指针1

深入理解指针1 一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、二级指针 一、数组名的理解 数组名就是数组首元素的地址&#xff0c;类型是指针类型&#xff0c;但是存在两个例外&#xff1a; sizeof(arr) : 整个数组在内存中的大小 &arr : 整个数组的地址…...

leetcode14.最长公共前缀

暴力逐个比对最长前缀 class Solution {public String longestCommonPrefix(String[] strs) {String prefix strs[0];for (int i 1; i < strs.length; i) {prefix longestCommonPrefix(prefix, strs[i]);}return prefix;}private String longestCommonPrefix(String st…...

云服务器X86计算和Arm计算架构有什么区别?

阿里云服务器架构X86计算和ARM计算有什么区别?x86架构是最常见的,CPU采用Intel或AMD处理器;ARM架构具有低功耗的特性,CPU采用Ampere Altra / AltraMax或阿里自研倚天710处理器。如何选择?阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择,X86架构兼容性更广,适合…...

leetcode0079. 单词搜索-medium

1 题目&#xff1a; 单词搜索 官方标定难度&#xff1a;中 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字…...

ShellScript脚本编程

语法基础 脚本结构 我们先从这个小demo程序来窥探一下我们shell脚本的程序结构 #!/bin/bash# 注释信息echo_str"hello world"test(){echo $echo_str }test echo_str 首先我们可以通过文本编辑器(在这里我们使用linux自带文本编辑神器vim)&#xff0c;新建一个文件…...

【leetcode100】整数拆分

1、题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36…...

leetcode:2899. 上一个遍历的整数(python3解法)

难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中 nums[i] 要么是一个正整数&#xff0c;要么是 -1 。我们需要为每个 -1 找到相应的正整数&#xff0c;我们称之为最后访问的整数。 为了达到这个目标&#xff0c;定义两个空数组&#xff1a;seen 和 ans。 从数组 …...

Mysql读写分离(2)-中间件mycat和实践方案

系统环境要求 Mysql版本5.5版本以上jdk1.7Mycat1.6 mycat使用Java开发&#xff0c;因为用到了JDK 7的部分功能&#xff0c;所以在使用前请确保安装了JDK 7.0&#xff0c;并设置了正确的Java环境变量&#xff08;可在命令行窗口输入&#xff1a;“java –version”获知是否安装…...

QT之在多线程中如何优雅的处理资源泄漏

概述 在多线程编程中,资源泄漏是一个常见且需要特别关注的问题。资源泄漏通常指的是程序未能正确释放分配给它的资源(如内存、文件句柄、数据库连接等),这可能导致系统性能下降甚至崩溃。尤其是在多线程环境中,由于多个线程可能同时访问相同的资源,增加了管理这些资源的…...

SPA 收入支出/技师提成自动统计系统——仙盟共创平台——未来之窗

支出 spa服务 使用开始&#xff1a;https://mp.weixin.qq.com/s/Ok3wuSYAPhd-6N8DrK7jwg 收入清晰呈现&#xff1a;自动整合 SPA 门店各类服务项目收入数据&#xff0c;包括面部护理、身体按摩、特色疗程等。通过对接收银系统&#xff0c;实时记录每笔消费金额&#xff0c;按不…...

Linux的应用领域,测试与Linux,Linux的介绍,VirtualBox和Ubuntu的安装,VMware的安装和打开虚拟机CentOS

目录 Linux的应用领域 测试人员在Linux的工作 测试人员需要掌握Linux的程度 Linux的介绍 Linux的介绍 Linux发行版 Unix和Linux的渊源 虚拟机和Linux的安装 VirtualBox和Ubuntu的安装 安装VirtualBox 安装Ubuntu 下载Ubuntu操作系统的镜像文件 创建虚拟机 虚拟机…...

《Not All Tokens Are What You Need for Pretraining》全文翻译

《Not All Tokens Are What You Need for Pretraining》 不是所有的词元都是预训练所需 摘要 先前的语言模型预训练方法通常对所有训练词元均匀地应用下一词预测损失。对此常规做法提出挑战&#xff0c;我们认为“语料库中的并非所有词元对于语言模型训练同等重要”。我们的…...

vscode终端运行windows服务器的conda出错

远程windows服务器可以运行&#xff0c;本地vscode不能。 打开vscode settings.json文件 添加conda所在路径...