用Quartus原理图设计FPGA电子琴:从按键消抖到音符分频

简介:一套基于Quartus原理图设计方法的电子琴FPGA工程文件包,面向数字逻辑与FPGA入门及进阶学习者,完整呈现从原理图规划、模块例化到编译仿真、下载调试的完整设计流程。设计围绕音符频率生成、定时计数、数模转换、播放控制与乐曲存储等核心环节展开,通过查找表存放频率值,并利用计数器产生精确时长,整体构架清晰,便于逐级拆解。压缩包内共413个文件,主要包含原理图文件、符号文件、仿真波形文件,以及工程设置、编译报告、乐曲初始化数据和少量文本描述代码,压缩后仅5.42兆字节,方便快速下载和导入Quartus环境学习。资源已有1045人学习使用,适合课程设计、竞赛准备或业余电子琴制作项目参考。通过研读,可学习如何将音乐理论中的音名编码转换为硬件可处理的频率参数,理解计数器分频与节拍控制机制,并借助现成工程模板修改乐谱和音色,避开常见编译时序陷阱,显著提高设计效率与成功率。

1. 原理图电子琴不是玩具:它把时序电路变成了听得见的反馈

用 Quartus 原理图画一台电子琴,听起来像教科书里的教学实验,但实际做出来的东西可以直接在 FPGA 开发板上弹奏,甚至能跑出一段完整旋律。这个项目最特别的地方在于,从按键消抖到音符分频,所有关键逻辑都以原理图符号的形式呈现,没有一行 HDL 代码,它把一个时序电路的真实运行状态直接转化为声音反馈——跑对了耳朵能听见,跑错了同样听得出来。适合正在学 FPGA 基础、想验证计数器与触发器行为的初学者,也适合需要一份能快速改造成课程设计原型的开发者。下文从一个可运行的工程角度,把模块划分、分频系数、连线方式和改造路径逐一讲透,尽量让你看完就能照着搭。

2. 工程拆解:Quartus 原理图输入与电子琴发声链路

2.1 原理图工程的文件构成与设计流程

用原理图方式做项目,最容易翻车的地方是把所有逻辑都堆在一张 BDF 图里,最后复杂到连自己都看不清连线。我拿到一套电子琴工程时,第一反应是先看文件组织。一个规范的 Quartus 原理图工程通常由三类文件组成:.bdf 块设计文件作为顶层图纸,.bsf 符号文件作为可复用的模块封装,.v 或 .vhd 文件承载底层逻辑。一个 8 音符电子琴工程的典型目录结构长这样:

project/ ├── top.bdf -- 顶层原理图,模块之间的连线都在这里完成 ├── keyboard_ctrl.bsf -- 按键扫描与消抖模块的符号文件 ├── tone_divider.bsf -- 音符分频模块的符号文件 ├── freq_table.mif -- 音符分频系数存储表,供 ROM 读取 ├── pin_assignments.qsf -- 引脚分配文件,避免每次重新分配引脚 └── sim/ └── ekey_tb.v -- 可选仿真激励,验证分频输出波形

不要小看这个结构。顶层 BDF 只做连线,不写逻辑;分频器、扫描器都封装成独立符号。这样做的直接收益是:改一个模块的参数不需要动顶层图纸,Quartus 在重新生成网表时会自动同步,排查问题时也能按图索骥,单独仿真某一个模块。

实际操作顺序我一般这样排:先新建工程,指定顶层实体名;然后新建 Block Diagram/Schematic File,在 Symbol 库中搜索需要的计数器、触发器或自己生成的模块符号,放置到图纸中;接下来用连线工具把符号引脚连起来,再用引脚属性指定输入输出;最后编译一次,打开 Pin Planner 分配引脚下载到板子。每完成一步就编译一次,不要等到全部画完再一次性编译,否则几十个错误堆在一起,神仙也难定位。

2.2 音符频率与分频系数:先算清楚再连线

电子琴发声的本质是产生不同频率的方波。以常见的 50MHz 开发板主时钟为例,要得到 262Hz 的中央 C,需要把时钟频率分频到 262Hz。不同音符对应的方波频率不同,原理图设计里最常见的方式是做一个计数器,计数到预定值后翻转一次输出电平,这样输出方波的周期就是时钟周期的两倍。因此分频系数 K 与目标频率 f 的关系是:K = 50_000_000 / (2 × f),计数到 K-1 时触发翻转。

以 C 大调一个八度为例,分频系数可以这样算:

音符频率约值 (Hz)分频系数 K推荐计数位宽
C4261.639555617
D4293.668513817
E4329.637584617
F4349.237158817
G4392.006377617
A4440.005681817
B4493.885061917
C5523.254777816 亦可,建议统一 17 位

注意分频系数 K 是一个整数,而 50MHz 除以两倍频率往往带小数。我建议所有音符统一向下取整,不要有的四舍五入、有的直接截断,否则高音区会明显偏低。另外计数器的计数范围从 0 开始,所以实际逻辑里是计数到 K-1 时清零或翻转,如果你误写成计数到 K 再清零,实际分频周期就变成了 K+1,每个音符都偏低一点。这类问题在仿真波形里很难一眼看出,但一上板人耳马上就发现。

2.3 发声链路与模块边界

整台电子琴的信号路径可以切成四段,每一段对应原理图上的一个区域:

  1. 按键输入:8 个按键引脚,对应 C 大调八度音;
  2. 消抖与编码:按键信号先做防抖处理,再编码成 3 位音符索引;
  3. 分频查表:根据音符索引从分频系数表中拿到对应 K 值,驱动音调分频器;
  4. 音频输出:分频器输出方波,经引脚送到无源蜂鸣器。

这里有一个非常容易被忽略的硬件细节:蜂鸣器分有源和无源两类。有源蜂鸣器通电自带固定频率,给它一个高电平就会响;无源蜂鸣器需要外部提供振荡方波才能发声。这个电子琴项目的输出必须接无源蜂鸣器或小喇叭,否则你辛辛苦苦生成一个 262Hz 的翻转电平,它响的却是自己内部固定的那个音,完全不听你的分频器。连线之前先查板子原理图,确认扬声器类型,能省掉后面一整晚的调试时间。

这段链路也决定了调试策略:如果按键模块输出的索引正确、分频模块输出的方波频率正确,声音就必然正确。所以排查时可以分段验证——先看按键编码,再看分频输出波形,最后才怀疑硬件连线。

3. 核心模块拆解:一个音符从按键到扬声器的完整路径

3.1 按键扫描与消抖模块的原理图实现

按键模块要解决两件事:消抖和编码。机械按键按下时会有约 5 到 20 毫秒的抖动,如果不处理,一次按下去可能触发两三次音符切换。常见做法是引入一个约 10 毫秒的计数窗口:检测到电平变化后开始计时,计时结束电平仍然稳定才认为按键有效。

在原理图里,我一般这样设计:

模块内部结构: 1. 50MHz 时钟经 20 级计数器分频,得到约 1kHz 采样时钟 2. 每次采样时钟上升沿,将按键电平移入 4 位移位寄存器 3. 仅当 4 位寄存器全为 0 或全为 1 时,判定为有效电平 4. 有效电平送入 3 位优先编码器,生成音符索引

原理图里体现为:一个分频计数器生成采样脉冲,两个串行移位寄存器做延时滤波,再加一个优先编码器输出索引。Quartus 的符号库里能找到 7493 这类现成计数器,也可以直接用 LPM_COUNTER 宏功能模块,不需要自己搭门电路。

消抖时间参数可以这样调:采样时钟频率取 1kHz,每个电平需要连续 4 次采样确认,对应约 4ms 的确认窗口。如果你觉得 4ms 对比较硬的按键还是偏短,把采样频率降到 500Hz,确认时间就变成约 8ms。原理图里只需要改分频计数器的模值,不影响其他区域。

3.2 音符分频模块:查表驱动计数器

分频模块是发声的关键。它接收按键编码器输出的 3 位索引,通过查表取得对应的分频系数,然后用这个系数控制计数器的翻转时刻。这里有两种常见做法:一种是用多路选择器在 8 个预置分频系数里选一个;另一种是用只读存储器 ROM 存放一张 8 深度的分频系数表,按地址读取。我更推荐第二种,因为当你要扩展成 12 个半音甚至 16 个音符时,只需要改 mif 文件内容,原理图一根连线都不用动。

一个 8 音符版本的 mif 文件长这样:

-- freq_table.mif 片段(8 音符版本) DEPTH = 8; WIDTH = 17; ADDRESS_RADIX = DEC; DATA_RADIX = DEC; CONTENT BEGIN 0 : 95556; -- C4 261.63Hz 1 : 85138; -- D4 293.66Hz 2 : 75846; -- E4 329.63Hz 3 : 71588; -- F4 349.23Hz 4 : 63776; -- G4 392.00Hz 5 : 56818; -- A4 440.00Hz 6 : 50619; -- B4 493.88Hz 7 : 47778; -- C5 523.25Hz END;

mif 文件写好之后,在原理图里放一个 altsyncram 或 LPM_ROM 宏功能模块,数据文件指向这个 mif,ROM 地址来自按键编码器输出,数据输出直接接到计数器预置值输入端。整个过程不需要写任何 HDL 代码,这是原理图设计最舒服的地方。

ROM 输出的分频系数需要配合一个加载信号配合使用:按键变化时,产生一个 load 脉冲,把新系数写入计数器预置端;没有按键变化时,计数器保持现有分频系数继续运行,音符不会断。对应到原理图,就是一个计数器模块,模值输入端接 ROM 数据输出,加载端接按键变化脉冲。

为了帮你理解这个模块在原理图里的行为,我用一句 Verilog 描述它的参考逻辑,实际工程中你不需要写这行代码,只需要在原理图里把 LPM_COUNTER 的模值输入连好:

// 分频计数器参考模型,原理图中用宏功能模块实例化 module tone_div #(parameter WIDTH = 17)( input clk, // 50MHz 系统时钟 input [WIDTH-1:0] div,// 来自 ROM 的分频系数 input load, // 按键变化时产生一个加载脉冲 output reg tone_out // 输出方波,接无源蜂鸣器 ); reg [WIDTH-1:0] cnt; always @(posedge clk) begin if (load) begin cnt <= 0; tone_out <= 1'b1; end else if (cnt >= div - 1) begin cnt <= 0; tone_out <= ~tone_out; end else begin cnt <= cnt + 1; end end endmodule

逻辑说明:load 为高时计数器清零并输出高电平;之后每个时钟周期 cnt 加 1,计数到 div-1 时输出翻转。输出方波周期等于 2 × div × 时钟周期,因此 div 就是前面算的分频系数 K。WIDTH 参数由最大分频系数决定,中央 C 的 95556 需要 17 位二进制表示,所以统一取 17 位,后续扩展到更低音区也能放下。

3.3 顶层原理图连线方式

顶层 BDF 是把各模块串起来的地方。一张 8 音符顶层图的关键连线可以整理成下面的清单,实际画图时在图纸上对应拖放即可:

源信号连接目标说明
8 个按键输入引脚keyboard_ctrl 模块输入按键默认低电平有效
keyboard_ctrl 输出 note_index[2:0]ROM 地址端选择音符分频系数
keyboard_ctrl 输出 key_pressedtone_div 加载端 load按下或释放时触发重新加载
50MHz 时钟引脚keyboard_ctrl 与 tone_div 时钟端所有模块共用同一个时钟源
ROM 数据输出 div_coef[16:0]tone_div 分频系数输入位宽必须匹配
tone_div 输出 tone_out输出引脚 spk_out接无源蜂鸣器或小喇叭

连线时注意几点:所有模块的时钟必须来自同一个全局时钟引脚,不要在原理图中间用门电路产生派生时钟,否则 Quartus 在做时序分析时会给你报一堆时钟偏斜的问题;ROM 地址和数据位宽要跟计数器预置值匹配,不一致时编译会提示长度不匹配;输出引脚建议加一个输出缓冲或直接连普通 IO,避免下载后出现多个驱动源互相拉扯电平。

编译顺序建议这样:先单独编译 keyboard_ctrl 模块,用仿真确认消抖和编码正确;再单独编译 tone_div 模块,给定一个固定分频系数看输出频率对不对;最后拼装顶层统一编译。每个模块先独立验证再做系统集成,能减少至少一半的排查时间。

4. 常见问题与避坑:仿真、下载与硬件调试实录

4.1 现象:仿真波形正常,上板完全无声

这是我自己踩过最狠的一个坑。分频器仿真波形每个翻转点都对,下载到板子后却一点声音没有。排查到最后才发现,板子上那个蜂鸣器是有源的,它只需要直流电平就能响,并不需要外部方波。工程输出引脚接错到了有源蜂鸣器的控制端,方波的快速高低变化在里面被当成开关信号处理,效果就是极其微弱甚至听不到声音。

解决办法是查板子原理图,确认扬声器类型。无源蜂鸣器才适合接收分频方波。如果板子上同时有两种蜂鸣器,检查是否有跳线切换,把输出引脚切到无源那一路。另外还有一个容易被忽略的原因:输出方波频率如果落在 200Hz 以下或 20kHz 以上,人耳敏感度很低,听起来就像没声音。用示波器或逻辑分析仪测一下 spk_out 引脚的波形频率,很快能确认。

4.2 现象:按键响应时快时慢,甚至一键触发多个音符

这是消抖窗口设置太短的典型表现。机械按键抖动一般持续 5 到 20 毫秒,如果采样确认窗口只有 2 毫秒,抖动期间的杂散电平会被当成有效信号,编码器在一个按键事件里输出了多个不同的音符索引,听感上就是一个键按下去声音乱跳。

解决方法是在消抖模块里把采样时钟降到 1kHz 以下,让确认窗口覆盖整个抖动区间。原理图上的改动通常是把分频计数器的模值调大,把采样频率从 2kHz 降到 1kHz,确认窗口从 2ms 变成 4ms。如果按键质量比较差,可以继续降到 500Hz。不要用遮蔽法处理抖动,就是那种检测到变化后封锁输入一段时间的方法,这种方式容易漏掉连续按下的第二个按键。

4.3 现象:每个音符都偏高或偏低,且越往高音偏差越大

这类现象跟分频系数的取整方式有关。以 A4 的 440Hz 为例,50MHz 除以两倍频率等于 56818.18,取整到 56818 时输出频率误差极小,人耳听不出来。但如果你有的音符向下取整,有的四舍五入,误差就会被放大。更常见的错误是翻转点写错:计数器按 K 计数时,如果误在计数到 K 时才清零,由于计数器从 0 开始,实际等于走了 K+1 个周期,每个音符都偏低约一个时钟周期的比例。

解决办法是统一取整规则,并且严格按“计数到 K-1 清零或翻转”来设计。高音区偏差更明显是因为频率越高 K 越小,取整的相对误差就越大。对 8 音符单手琴来说误差在 1% 以内几乎听不出区别;但如果扩展成 12 半音版本,建议每个系数先算到小数点后两位,再统一向下取整,然后用仿真确认每个音的实际输出频率。

4.4 现象:下载成功但按键引脚电平异常,相邻按键互相影响

第一反应是查原理图连线,但实际上很多是引脚分配冲突。开发板上的按键往往和 LED 或扩展排针共用同一个 IO,默认情况下该引脚可能已经被分配成别的用途,比如方向被设为输出,或者在电路上接了强下拉。解决办法是打开 Pin Planner,重新指定按键输入引脚,并检查 .qsf 文件里有没有同一个引脚被分配给两个信号。

另一类电平异常来自上拉设置。FPGA 输入引脚默认可能有弱上拉,如果按键电路是按键一端接地、另一端接 IO,那么默认上拉是合理设计,按下时拉低。如果按键接的是电源,就需要关掉内部上拉或把消抖模块里的有效电平判断反过来。我一般把按键统一设计成低电平有效,消抖模块只判断低电平状态,这样换不同的开发板时改动最小。

4.5 现象:增加消抖延迟后,出现长按无响应

这个坑很隐蔽。为了让消抖更可靠,有人会把采样确认时间加长,结果快速连续按两个键时第二个键没了反应。原因是确认窗口太长,第一个键释放和第二个键按下都落进了同一个窗口,逻辑认为还是没有变化。

解决思路是采样与确认分离:持续以固定周期采样按键电平,但只在电平状态从稳定变成另一个稳定时才产生脉冲。换句话说,消抖模块的职责是过滤毛刺,而不是阻塞输入。每次采样都运行,只是输出脉冲的条件变严格了。这个做法在原理图里实现也不复杂,把移位寄存器的输出端加一个异或门检边,检测到边沿再触发加载即可。

5. 二次开发思路:从单音电子琴扩展成双音与音色切换

5.1 先给音调分频器加一个第二声部

最简单有效的改造是把 tone_div 模块复制一份,新模块使用另一组 ROM 表,两个模块的输出通过一个或门合并到同一个蜂鸣器引脚。注意不能直接短路两个输出,FPGA 引脚内部驱动并联会互相冲突,应该在输出级加一个逻辑门或三态缓冲器。这样左手按低音区按键、右手按高音区按键时,两个分频器同时工作,就实现了双音效果。

改造后按这样的顺序验证:先单独听低音分频器输出,确认音准;再单独听高音分频器,确认音准;最后把两个输出合并,听有没有相互抢占时序导致的毛刺声。如果合并后声音变闷或变炸,多半是输出驱动能力不足,在合并点后面加一个缓冲器就能解决。

5.2 用占空比调节模拟音色

如果你不满足于方波,可以给 tone_div 加一个占空比参数。具体做法是在计数器后面加两个比较器:计数器计到半周期时输出翻高,再计到一个偏移值后翻低。例如把高电平时间固定为周期 50%,就是标准方波;改成 25%,输出窄脉冲波,谐波成分更丰富,听起来更尖锐;改成 75% 则圆润一些。

在原理图上,这个改动只需要加两个常数寄存器和一个比较器,不需要重新算分频系数。占空比参数可以做成两个拨码开关输入,运行时切换音色。加上前面的双音改造,这台电子琴就从单音玩具变成了可以玩出一点样子的实验平台。

我把这套工程拆完之后的习惯是:每次改动只动一个模块,下载前先在仿真器里看一条音符的输出频率,确认误差可接受后再上板试听。这样手里拿到任何一块新板子,半天之内都能把引脚、分频系数、蜂鸣器类型这些环境变量全部适配完。希望这篇拆解帮到你,也少走一些我曾经走过的弯路。

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

相关新闻

深度学习模型泛化与正则化实战:从过拟合到调参避坑指南

深度学习模型泛化与正则化实战:从过拟合到调参避坑指南

一直以为书架里那本翻得起了毛边的深度学习教材&#xff0c;最值钱的部分藏在偏后的模型优化章节&#xff0c;直到我在整理旧笔记时重新看到deeplearningbook_035-2这个编号。035是我给“泛化与正则化”这一节编的页码序号&#xff0c;-2则代表这一节里关于“为什么模型在训练集…

2026/10/20 5:15:02 阅读更多 →
earshot 4 天涨到 916 星,但我劝你先别急着冲

earshot 4 天涨到 916 星,但我劝你先别急着冲

earshot 4 天涨到 916 星&#xff0c;但我劝你先别急着冲 【免费下载链接】earshot Ears for coding agents: let AI hear, review and make sound. CPU-only, open source. 项目地址: https://gitcode.com/gh_mirrors/ears/earshot 一个名为 earshot 的开源项目正在 Gi…

2026/10/20 5:15:02 阅读更多 →
从clawd.bot看轻量级AI聊天机器人:架构、部署与自定义人设实战

从clawd.bot看轻量级AI聊天机器人:架构、部署与自定义人设实战

最近几天&#xff0c;“clawd.bot”这个名字在好几个技术社区里高频刷屏。有人晒聊天截图&#xff0c;有人在问它的实现方案&#xff0c;还有人直接把它的交互逻辑搬进了自己的项目里。作为一个常年关注AI应用和机器人开发的人&#xff0c;我一开始以为又是个套壳玩具&#xff…

2026/10/20 5:14:01 阅读更多 →

最新新闻

MySQL锁机制与死锁排查实战:从行锁、间隙锁到索引优化

MySQL锁机制与死锁排查实战:从行锁、间隙锁到索引优化

这篇文章的选题我很早就想写了。起因是前阵子帮一个社区的朋友排查线上死锁&#xff0c;他跑了一个定时任务&#xff0c;每天凌晨批量更新订单状态&#xff0c;结果第二天一上班就收到一堆锁等待超时的告警。日志一拉&#xff0c;两条 UPDATE 语句堵在同一条索引记录上&#xf…

2026/10/20 5:55:20 阅读更多 →
SQL注入攻防实战:从攻击链拆解到防御体系搭建

SQL注入攻防实战:从攻击链拆解到防御体系搭建

我做过不少安全相关的项目&#xff0c;也带过团队里刚入门的安全新人&#xff0c;基本上每次聊到Web安全&#xff0c;第一个绕不开的话题就是SQL注入。这玩意诞生了二十多年&#xff0c;至今依然活跃在各种漏洞报告里&#xff0c;甚至很多所谓的新漏洞&#xff0c;追根溯源还是…

2026/10/20 5:55:20 阅读更多 →
LLM+Multi-Agents下的数据治理:元数据、质量、血缘与权限实战

LLM+Multi-Agents下的数据治理:元数据、质量、血缘与权限实战

1. 为什么数据分析平台里的“数据治理”会卡住整条链路1.1 从“有数可用”到“数据可信”的真实距离今年我一直在折腾一个内部的数据分析平台&#xff0c;框架上用了 LLM Data Multi-Agents&#xff0c;前端接 BI 看板&#xff0c;后端接数仓。刚开始跑演示时&#xff0c;所有…

2026/10/20 5:55:20 阅读更多 →
计算机体系结构习题答案的深度解析与工程化验证

计算机体系结构习题答案的深度解析与工程化验证

简介&#xff1a;本资源是《计算机体系结构》课程配套的课后习题部分参考答案&#xff0c;面向高校计算机专业本科生及考研复习者&#xff0c;聚焦系统结构、组成与实现三大核心层次的理解与解题训练。文档覆盖层次结构、虚拟机、翻译与解释、Amdahl定律、局部性原理、CPI计算、…

2026/10/20 5:55:20 阅读更多 →
归并排序力扣全攻略:模板、逆序对与链表变形

归并排序力扣全攻略:模板、逆序对与链表变形

归并排序在力扣里是个很特别的存在。你说它是基础题吧&#xff0c;直接让你背模板的题确实不多&#xff1b;但你说它是冷门算法吧&#xff0c;一到中等偏上的题&#xff0c;比如逆序对、排序链表、区间和统计&#xff0c;归并排序的思路几乎无处不在。很多同学刷到“排序数组”…

2026/10/20 5:55:20 阅读更多 →
PS自带字体设计商标侵权风险高,安全用字流程详解

PS自带字体设计商标侵权风险高,安全用字流程详解

前几天有个做电商的朋友发了个文件给我&#xff0c;说是新做的品牌字标&#xff0c;急着要提交商标注册。我打开一看&#xff0c;他用PS里的自带字体拉了四个字&#xff0c;又加了个描边&#xff0c;觉得很稳。我第一句话就问&#xff1a;这字体你拿到商用授权了吗&#xff1f;…

2026/10/20 5:54:19 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于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/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →