AD9959四通道DDS工程详解:从原理图到STM32驱动与调试避坑

简介:AD9959开发资源包面向STM32嵌入式开发者与电子工程师,提供围绕ADI高性能DDS芯片AD9959的完整信号发生方案,涵盖可直接移植的驱动代码、技术资料与电路原理图,适用于频率特性测试、多路信号发生等实际工程场景。压缩包共223个文件,大小约11.97MB,主体为C源文件、头文件和Keil MDK工程文件,基于STM32F10x标准外设库,包含定时器、RCC、ADC、I2C、SPI等模块配置代码,同时附有PDF原理图与设计文档、hex烧录文件及编译调试过程文件,可在工程中直接打开、编译和烧录,便于对照源码逐行理解DDS控制流程。目前已有4581人学习/浏览,是同类DDS开发资料中较为完整的打包方案。借助包内代码可掌握通过GPIO或SPI接口配置AD9959频率、相位和幅度的寄存器操作方法,原理图则呈现电源管理、滤波与信号调理电路的设计要点,配套资料中的频率特性测试案例和底层驱动工程组织方式,能为实际项目开发、排错与二次开发提供直接参考。

1 一套能直接落地的四通道DDS工程:AD9959不只是写个频率字

调过AD9959的人多半有这种体验:看数据手册觉得寄存器就那么几个,写个SPI把频率字怼进去就完事,结果上电后示波器上看不到波形,或者四路输出相位乱跳。这个工程资源真正解决的问题,是把“原理图设计、寄存器配置、STM32驱动代码”三段链路一次打通,拿到手就能照着自己画板子、烧程序、出波形。它适合三类人:要做多通道信号源的学生、搞超声或相控阵驱动的工程师、还有想把DDS当可编程时钟源用的硬件爱好者。整套资料以原理图和源码为主,配合寄存器配置说明,属于能直接抄作业的工程包,不是纯理论文档。

2 硬件架构拆解:原理图里决定成败的链路

2.1 电源树设计:三个电压域的顺序与接地

AD9959是数模混合芯片,原理图上最容易被低估的就是电源。工程里采用的是典型的“主电源进LDO,再分两路”方案:5V输入经过一级降压到3.3V,供给数字IO和MCU侧;3.3V再经第二级LDO降到1.8V模拟电压,单独给DDS核心的模拟部分供电。数字3.3V和模拟1.8V之间用磁珠或0欧电阻做单点连接,模拟地和数字地在DDS芯片下方汇合成一个点,避免地环路把DAC的杂散带到输出端。

这里的关键是上电顺序。工程源码头文件里对PWR_DOWN引脚做了延时控制,MCU上电后先拉高复位,再等LDO输出稳定,最后才释放DDS的硬件复位。很多人在调试时遇到DDS输出全是直流分量,查了一圈发现是复位释放过早,芯片内部的寄存器还没完成自校准。这个坑在原理图评审阶段看不出来,只能靠时序控制来兜底。

2.2 参考时钟链路:没有内部PLL,别指望倍频

原理图上,AD9959的REFCLK引脚接的是100MHz有源晶振,经过AC耦合电容进入芯片。这个选择值得注意:AD9959内部没有集成PLL,系统时钟SYSCLK直接等于参考时钟频率,想要更高输出频率就得换更高频的晶振或外部时钟源。工程里没有用时钟芯片做倍频,而是老老实实让SYSCLK跑100MHz,四条通道的最大输出频率按奈奎斯特限制在50MHz以内,实际原理图上的低通滤波器截止频率也按这个来设计。

晶振旁边通常还会引出一路SYNC_CLK信号到MCU。这个引脚是SYSCLK的四分频输出,在需要多片DDS同步或者想让MCU感知DDS时序时非常有用。工程里SYNC_CLK只接到了MCU的输入捕获引脚,用于调试时确认SYSCLK是否真正起振。如果你拿到板子后怀疑晶振没工作,直接量这个引脚是最快的判断手段。

2.3 SPI与控制引脚:CS、SCLK、SDIO、IO_UPDATE的优先级

原理图的SPI部分走线很短,这符合AD9959的工作特点。芯片支持单线SDIO和四线SDIO两种串行模式,工程源码默认用的是四线模式,四个数据脚DIO0到DIO3全部接到MCU的GPIO上,这样每条寄存器写指令可以一次写入32位数据,比单线模式快四倍。代价是按四线模式的电平要求来配置IO状态,初始化时CS先拉高、SCLK空闲电平为高,这个时序细节在源码的SPI初始化函数里写得很清楚。

IO_UPDATE引脚是整套同步机制的核心,原理图上直接从MCU的GPIO引出,没有加RC滤波。这个引脚必须保持干净,任何毛刺都会导致寄存器缓冲区的意外加载。工程里的做法是把IO_UPDATE和其他控制引脚分开走线,避免和SCLK长距离平行,减少串扰。FPGA或MCU侧控制时,一般情况下先写完整组寄存器,再统一拉一次IO_UPDATE,让四个通道的配置同时生效。

2.4 DAC输出链路:差分电流如何变成可用信号

AD9959的DAC输出是互补电流型,每个通道有两根输出脚,单独一根对地是电流,两根之间是差分信号。原理图上每两路输出先经过一对电阻把电流转成电压,再接一阶LC低通滤波器,最后通过SMA座输出。电阻取值直接影响输出幅度,工程里用的是200欧姆对地,差分阻抗400欧姆,满量程输出大约对应-4dBm左右,适合直接进频谱仪或做下变频实验。

低通滤波器的截止频率放在80MHz左右,略高于最大输出频率的1.5倍,这样既能抑制DAC的镜像频率,又不会让目标信号衰减太多。如果你的应用需要更高输出频率,原理图里的LC参数要重新计算,特别是电感值,频率往上走之后寄生电容的影响会变得非常明显。

3 软件工程结构:拿到源码包先从哪里读起

3.1 目录结构与关键文件定位

一个能跑的STM32工程的目录结构通常是这样,这个资源包也不例外:

Project/ ├── Core/ │ ├── Inc/ │ │ ├── ad9959.h │ │ ├── spi_driver.h │ │ └── main.h │ └── Src/ │ ├── main.c │ ├── ad9959.c │ └── spi_driver.c ├── Hardware/ │ ├── AD9959_SCH.pdf │ └── AD9959_EDA_Source/ └── Docs/ ├── AD9959_Datasheet_CN.pdf └── 寄存器配置说明.md

先看Hardware目录下的原理图PDF,确认你手上的板子和这份源码是同一套硬件定义,重点关注电源引脚、参考时钟频率和IO_UPDATE接到了MCU的哪个端口。然后打开ad9959.c,这个文件里是DDS相关的全部驱动代码,包括初始化、频率设置、相位设置和幅度设置。最后才是main.c,main里一般只做命令解析和状态机调度。

资源包里的寄存器配置说明文档建议从头到尾读一遍,里面把每一条初始化寄存器的值都注释了对应功能,比直接看数据手册省力很多。文档里写的寄存器地址和位定义和源码头文件保持一致,改代码时两边对照着看不容易出错。

3.2 寄存器映射与位定义头文件

ad9959.h里定义了芯片的全部寄存器地址和关键位,核心部分长这样:

/* AD9959寄存器地址定义 */ #define AD9959_CSR 0x00 /* 通道选择寄存器 */ #define AD9959_FR1 0x01 /* 功能配置寄存器1 */ #define AD9959_FR2 0x02 /* 功能配置寄存器2 */ #define AD9959_CFR 0x03 /* 通道功能配置寄存器 */ #define AD9959_CH_CFR 0x04 /* 通道CFR起始地址 */ #define AD9959_CH_FTW 0x07 /* 频率调谐字起始地址 */ #define AD9959_CH_POW 0x0B /* 相位偏移字起始地址 */ #define AD9959_CH_ACR 0x0E /* 幅度控制字起始地址 */ /* CSR中通道选择位 */ #define CSR_CH1 0x01 #define CSR_CH2 0x02 #define CSR_CH3 0x04 #define CSR_CH4 0x08 #define CSR_ALL_CHANNELS 0x0F

寄存器地址映射是整个驱动的基础。CSR用来选择当前要操作的通道,FR1和FR2是整个芯片的全局配置,CFR则是每个通道独立的功能配置。写通道频率字时,先通过CSR选中对应通道,再往CH_FTW地址写4字节数据,DDS会在IO_UPDATE上升沿把这4字节加载到工作寄存器。

参数说明:

  • CSR_ALL_CHANNELS(0x0F)表示一次操作同时作用于四个通道,多通道同步时特别有用,省去四次CSR切换。
  • CH_FTW后连续4个地址对应四路通道,因为每路频率字占4字节,实际写入时地址是按通道自动偏移的。
  • 每个寄存器写入都是先发地址字节,再发数据字节,这个顺序在spi_driver里固定。

3.3 SPI底层驱动的两种模式

工程里两种SPI驱动方式都实现了,一种用MCU硬件SPI外设,一种用GPIO模拟时序。硬件SPI写法效率高,但AD9959的四线模式需要在每次传输前把IO方向切成输入或输出,硬件SPI处理起来有点绕,所以工程默认用的是GPIO模拟:

void spi_write_frame(uint8_t addr, uint32_t data, uint8_t channel_sel) { uint8_t i; uint8_t addr_with_sel = ((channel_sel & 0x0F) << 4) | (addr & 0x0F); CS_LOW(); /* 地址阶段:一次传输7位地址和通道选择 */ for (i = 0; i < 8; i++) { SCLK_LOW(); if (addr_with_sel & 0x80) SDIO_HIGH(); else SDIO_LOW(); SCLK_HIGH(); addr_with_sel <<= 1; } /* 数据阶段:32位数据按MSB先发 */ for (i = 0; i < 32; i++) { SCLK_LOW(); if (data & 0x80000000) SDIO_HIGH(); else SDIO_LOW(); SCLK_HIGH(); data <<= 1; } CS_HIGH(); }

这段代码把地址字节的高四位用作通道选择,低四位放寄存器地址,正好对应AD9959的指令格式。**参数说明:**channel_sel传入的是CSR中的通道掩码,比如CSR_CH2(0x02)就只操作第2通道;data是完整的32位寄存器值,频率字、相位字、幅度字都统一走这个函数,区别只是调用时传入的地址和值不同。GPIO模拟的好处是时序完全可控,不依赖SPI外设的极性配置,出问题时用逻辑分析仪抓波形很容易对照手册排查。

4 核心代码拆解:一次波形更新的完整链路

4.1 上电初始化序列

初始化代码的目标是让DDS进入已知状态,四通道关闭、输出静音,等MCU配置好再逐个打开:

void ad9959_init(void) { /* 硬件复位:拉低复位引脚至少10us */ RESET_LOW(); delay_us(20); RESET_HIGH(); delay_us(10); /* 全局配置:关闭四倍频,使能SYNC_CLK输出 */ spi_write_frame(AD9959_FR1, 0x00C00000, CSR_ALL_CHANNELS); /* 通道配置:DAC电流设为中档,关闭通道使能 */ spi_write_frame(AD9959_CH_CFR, 0x00000000, CSR_ALL_CHANNELS); /* 清空所有通道频率字和相位字 */ spi_write_frame(AD9959_CH_FTW, 0x00000000, CSR_ALL_CHANNELS); spi_write_frame(AD9959_CH_POW, 0x00000000, CSR_ALL_CHANNELS); /* 统一触发IO_UPDATE,让上述配置生效 */ io_update_pulse(); }

初始化里最后一步的io_update_pulse是必须的。前面所有spi_write_frame操作都只是往缓冲区写数据,只有IO_UPDATE上升沿才会把缓冲数据真正加载进芯片的工作寄存器。很多人第一次调这个芯片,写了寄存器后直接读,发现读回来全是0,就是因为没触发IO_UPDATE。

**参数说明:**FR1写入0x00C00000,高字节里的位表示使能SYNC_CLK并关闭片上倍频,这个值要和原理图上的100MHz参考时钟匹配,如果你的板子时钟频率不同,这里需要调整。CH_CFR里清0表示DAC输出电流默认值、不使能任何通道,属于安全启动状态。

4.2 频率字、相位字、幅度字的计算与写入

AD9959用32位频率调谐字(FTW)控制输出频率,计算公式是FTW = (f_out / SYSCLK) x 2^32。工程里封装了浮点转整数的计算函数:

uint32_t ad9959_calc_ftw(double freq_hz) { double sysclk = 100.0e6; /* 与原理图晶振一致 */ double ratio = freq_hz / sysclk; uint32_t ftw = (uint32_t)(ratio * 4294967296.0); return ftw; } void ad9959_set_freq(uint8_t ch, double freq_hz) { uint32_t ftw = ad9959_calc_ftw(freq_hz); spi_write_frame(AD9959_CH_FTW + (ch - 1) * 1, ftw, ch_sel(ch)); io_update_pulse(); }

相位偏移字和幅度字走同样的流程,不同的是它们不是32位全用。相位字是14位有效值,写入时左对齐到高14位;幅度字是10位有效值,同样左对齐。工程里专门写了两个函数处理这种对齐,直接传0到16383的相位值或0到1023的幅度值,函数内部帮你移位。

**参数说明:**AD9959每通道频率字地址连续,ch传入1到4,地址计算时ch-1就是通道偏移。计算FTW时一定要用实际的SYSCLK频率,如果晶振标称100MHz但实际偏了100ppm,输出频率也会有同等比例的偏差,窄带应用里这个误差不可忽略。

4.3 IO_UPDATE时序:什么时候触发最稳

多通道同步是这个芯片的加分项,但同步效果完全取决于IO_UPDATE的使用方式:

void ad9959_set_freq_all_channels(double f1, double f2, double f3, double f4) { /* 第一阶段:只写缓冲区,不触发更新 */ spi_write_frame(AD9959_CH_FTW + 0, ad9959_calc_ftw(f1), CSR_CH1); spi_write_frame(AD9959_CH_FTW + 1, ad9959_calc_ftw(f2), CSR_CH2); spi_write_frame(AD9959_CH_FTW + 2, ad9959_calc_ftw(f3), CSR_CH3); spi_write_frame(AD9959_CH_FTW + 3, ad9959_calc_ftw(f4), CSR_CH4); /* 第二阶段:统一触发IO_UPDATE */ io_update_pulse(); }

这段代码的顺序是四通道同步的玄学所在。如果每写完一个通道就触发一次IO_UPDATE,四个通道的频率更新点会散布在几十微秒的时间窗口里,相位关系全乱。正确做法是把所有寄存器的写入当作事务处理,全部写完再提交。

**参数说明:**io_update_pulse是MCU的GPIO拉高再拉低,高电平持续时间建议保持在10ns以上即可,工程里为了稳妥延时至1us,哪怕再小的电容负载也足够。SYNC_CLK信号如果引到MCU,可以在IO_UPDATE之前等待一个SYNC_CLK边沿,让所有DDS芯片共享同一个参考时刻,对于多片级联同步尤为重要。

4.4 串口指令解析:快速验证波形的小例子

资源包里的main.c还有一个串口指令解析示例,通过UART接收类似“F1 1000000”的文本,解析后调用频率设置函数:

void uart_command_handler(char *cmd) { uint8_t ch = 0; double freq = 0.0; if (sscanf(cmd, "F%d %lf", &ch, &freq) == 2) { if (ch >= 1 && ch <= 4) { ad9959_set_freq(ch, freq); printf("CH%d set to %.2f Hz\r\n", ch, freq); } } }

这个处理函数放在串口中断的环形缓冲区里,每次完整收到一行就调用一次。频率值用double类型传参,1Hz步进在100MHz系统时钟下完全可分辨,32位频率字对1Hz的分辨率是100MHz / 2^32 ≈ 0.023Hz,实际精度远超需求。这个指令接口留下的扩展点很清晰,后面加扫频功能时只需要扩展命令格式。

5 避坑记录:上电不输出波形的排查清单

5.1 上电与时钟相关的坑

现象一:DDS输出始终是直流电平,完全没有正弦波。

原因是初始化代码写完后没有触发IO_UPDATE,寄存器缓冲区的内容永远没进工作区。工程代码里如果是手动单步调试,很容易跳过这个函数。解决方法是检查init函数结尾和每次set函数的结尾,确保都调用了io_update_pulse。如果用的是别人改过的代码,全工程搜一下这个函数名,看是否有地方把它注释掉了。

现象二:频率设置值和示波器实测值差一大截,比如设置10MHz实际输出只有9.6MHz。

这是典型的SYSCLK实际频率和代码计算值不一致。工程假定的是100MHz参考时钟,但如果原理图实际用的是80MHz晶振,代码里sysclk变量没跟着改,FTW计算全盘偏差。解决办法是先量REFCLK引脚上的实际频率,再回头改ad9959_calc_ftw里的sysclk常量。还有一种少见情况是晶振旁边的负载电容焊错,导致起振频率偏移几十ppm,对高精度应用影响明显。

现象三:只有一个通道输出正常,其他通道静音。

AD9959的每个通道都有独立的通道使能位,位于该通道的CFR寄存器中。初始化时如果只使能了通道1,其他通道自然没输出。排查时逐通道写CFR,读数确认使能位是否正确,顺便检查CSR通道选择掩码有没有写错。

5.2 SPI与寄存器写入相关的坑

现象四:SPI写完寄存器后再读,数据全对不上。

优先怀疑CS和SCLK的时序关系。GPIO模拟方式下,常见的错误是SCLK空闲电平极性弄反。工程里默认配置是SCLK空闲为低、数据在上升沿采样,如果你参考的数据手册是英文原版,注意看串行时序图里SCLK的默认极性。逻辑分析仪挂上抓一次写操作波形,对照手册时序图逐bit检查,比自己瞎试快得多。

现象五:四通道输出有相位差,而且每次上电都不一样。

这个现象通常源自IO_UPDATE触发的时机不统一,或者四线模式下DIO引脚方向切换时有毛刺。解决办法是严格遵循“先写全部缓冲区,最后统一IO_UPDATE”的流程。如果已经这样做了还不同步,检查SYNC_CLK是否接好,多片DDS级联时所有片的SYNC_CLK要接到同一个外部参考,保证内部时序对齐。

提示:排查寄存器问题时,读回验证是最后的手段,但不要在IO_UPDATE之前读,缓冲区和工作区不一致时读回来的值没有任何参考意义。

6 二次开发方向:把固定频率输出改成线性扫频

拿到手的第一版工程只能设置固定频率,如果要做扫频信号源或雷达回波模拟,就得自己加一个扫频状态机。改造思路不复杂:在定时器中断里按步进间隔更新FTW,每次更新前计算当前频率值,重走“写寄存器、拉IO_UPDATE”的链路。

void sweep_timer_isr(void) { if (sweep_enabled) { current_freq += sweep_step; if (current_freq > sweep_stop) current_freq = sweep_start; ad9959_set_freq(sweep_channel, current_freq); } }

这个定时器中断频率决定扫频的连续程度。定时器设在100us触发一次,每步频率步进设成100Hz,就能得到从10MHz到20MHz、周期1秒的线性扫频。验证时用示波器的余辉模式观察扫频包络,理想情况能看到一个完整的正弦波幅度包络从低到高再折返,配合频谱仪能看到频率谱线随时间连续移动。

改代码时有两点值得留意:一是定时器中断里调用ad9959_set_freq会连带触发IO_UPDATE,如果中断频率过高,SPI传输占用时间会挤占主循环,建议把扫频计算和SPI写入拆到两个优先级,中断里只做频率累加和标志位赋值,主循环里统一执行寄存器写入。二是扫频过程中相位连续性取决于每次FTW更新的步进量,步进越小相位跳变越不明显,这在调频连续波雷达的锯齿波模拟里特别关键。

调试这个功能时我吃过一次亏。最初我把频率步进设成1MHz,定时器100us触发一次,示波器上看到的不是连续扫频,而是一串离散的点频,后来把步进降到1kHz,波形立刻连续了。从那以后我每次做扫频类功能都先估算一下频率变化率和更新率的比值,再确定步进量,不再想当然地随手填参数。这个工程给你的是一套可运行的基础框架,真正的价值在于从单频到扫频、从单通道到四通道同步的改造路径足够短,按上述思路改完第一版扫频,就能体会到DDS这类芯片在信号生成上的灵活之处。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

全自动螺丝机:产线背后的工业朋克美学与自动化逻辑

全自动螺丝机:产线背后的工业朋克美学与自动化逻辑

开篇&#xff1a;产线边上那台被低估的机器如果你在自动化产线边上站过半小时&#xff0c;你多半会注意到这样一台机器&#xff1a;铝型材搭出方正的骨架&#xff0c;透明亚克力罩住锁付区域&#xff0c;细小的螺丝从振动盘里列队排出&#xff0c;气动夹爪“咔哒”一下咬住料&a…

2026/10/19 19:22:33 阅读更多 →
BERT微调实战:酒店评论情感分类完整流程与代码实现

BERT微调实战:酒店评论情感分类完整流程与代码实现

做文本分类这几年&#xff0c;我从最原始的词典匹配一路换到word2vec、textCNN&#xff0c;再到BERT&#xff0c;每一步升级感受都很明显&#xff0c;但最让我觉得“省心”的&#xff0c;还是BERT。省心不是因为它精度一定最高&#xff0c;而是它几乎把特征工程这件事从流程里彻…

2026/10/19 19:22:33 阅读更多 →
明华澳汉读卡器驱动安装与串口调试避坑指南

明华澳汉读卡器驱动安装与串口调试避坑指南

简介&#xff1a;明华澳汉读卡器驱动程序包面向需要安装调试或二次开发明华澳汉读卡器的用户与软件工程师。压缩包内含驱动安装程序、USB写卡机驱动、IC卡读写器说明书及配套IC卡程序&#xff0c;可解决操作系统无法识别读卡器或无法正常读写IC卡与存储卡的问题。整包共包含69个…

2026/10/19 19:21:31 阅读更多 →

最新新闻

AI率过高怎么办?九款降AI率工具与避坑指南

AI率过高怎么办?九款降AI率工具与避坑指南

上个月帮一位在外地项目上常驻的在职朋友看论文。他发来一张截图&#xff0c;检测系统提示“疑似AI生成内容占比接近四成”&#xff0c;导师在批注里连续写了好几遍——这几段请你按自己的话重写。他挺委屈&#xff1a;内容确实是自己对着调研材料一点一点整理出来的&#xff0…

2026/10/19 23:26:19 阅读更多 →
开源代码评审工作流:本地化、可审计、可定制的LLM实践方案

开源代码评审工作流:本地化、可审计、可定制的LLM实践方案

1. 项目概述&#xff1a;这不是一个“工具”&#xff0c;而是一套可落地的开源代码评审工作流“open-code-review”这个名字乍一听像某个新发布的 CLI 工具&#xff0c;或者某家大厂刚开源的 AI 代码审查平台。但实际翻遍 GitHub、Hugging Face 和主流技术社区&#xff0c;你会…

2026/10/19 23:26:19 阅读更多 →
基于YOLO11的无人机检测识别系统设计与实现

基于YOLO11的无人机检测识别系统设计与实现

一提到毕设做深度学习目标检测&#xff0c;十个里有八个都在刷COCO、VOC数据集&#xff0c;真正能落到现实问题上的反而不多。但“空域安全无人机检测识别”这个方向不一样&#xff0c;它直接对准了一个真实且刚需的场景——机场周边、重要场馆、活动安保都需要防范低空慢速小目…

2026/10/19 23:23:08 阅读更多 →
BP-PID残差补偿控制:Simulink中可解释的神经网络增强型PID实现

BP-PID残差补偿控制:Simulink中可解释的神经网络增强型PID实现

简介&#xff1a;本资源是一套基于Simulink实现BP神经网络自整定PID控制器的完整工程实践材料&#xff0c;面向自动化、控制工程及人工智能交叉领域的高校学生、科研人员与工业控制工程师&#xff0c;解决传统PID参数依赖经验整定、适应性差、动态响应不足等实际问题。压缩包共…

2026/10/19 23:18:58 阅读更多 →
STM32 SD卡数据落盘实战:fatfs移植与CSV文件生成

STM32 SD卡数据落盘实战:fatfs移植与CSV文件生成

简介&#xff1a;这份资源面向嵌入式开发学习者与STM32工程师&#xff0c;聚焦在STM32F429平台上集成FatFS文件系统、驱动SD卡写入数据并生成.csv文件&#xff0c;同时结合以太网驱动搭建TCP服务器接收网络数据。内容覆盖FatFS的移植与参数配置、SDIO或SPI方式下的SD卡初始化与…

2026/10/19 23:16:55 阅读更多 →
AI视频生成工作流:从产品拆解到批量成片的完整指南

AI视频生成工作流:从产品拆解到批量成片的完整指南

去年年底接了一个电商代运营团队的活儿&#xff0c;帮他们把带货短视频从“每周人工憋3条”改成“一天批量出20条成片”。项目做完以后&#xff0c;团队里负责剪辑的同事跟我说了一句话&#xff0c;让我印象特别深&#xff1a;以前最怕的不是剪片子&#xff0c;而是想不出脚本、…

2026/10/19 23:05:36 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →