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

别再死记硬背MFCC公式了!用Python手把手带你复现FBank/MFCC特征提取全流程

从零实现语音特征提取用Python拆解FBank与MFCC的数学之美语音识别技术正悄然改变我们与机器交互的方式但很少有人真正理解声音是如何被转化为机器可读的数字特征的。本文将带您深入音频信号处理的数学世界通过Python代码亲手实现从原始波形到FBank和MFCC特征的完整转换流程。1. 音频信号处理的数学基础音频信号处理的核心是将连续的声波转化为离散的数字表示。当我们用麦克风录制声音时实际上是在进行模拟信号到数字信号的转换这个过程遵循着严格的数学原理。奈奎斯特采样定理告诉我们要准确重建原始信号采样频率必须至少是信号最高频率的两倍。对于语音信号通常最高频率为4kHz16kHz的采样率已经足够import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile sample_rate, signal wavfile.read(audio.wav) print(f采样率: {sample_rate}Hz, 样本数: {len(signal)})时域信号展示了振幅随时间的变化而频域分析则揭示了信号的频率成分。快速傅里叶变换(FFT)是连接这两个域的桥梁def plot_spectrum(signal, sample_rate): n len(signal) freq np.fft.rfftfreq(n, d1/sample_rate) fft np.abs(np.fft.rfft(signal))/n plt.plot(freq, 20*np.log10(fft)) plt.xlabel(Frequency (Hz)) plt.ylabel(Magnitude (dB))语音信号有三个关键特性需要特别处理频谱倾斜高频分量通常比低频分量弱非平稳性统计特性随时间变化周期性声音由声带振动产生具有准周期性2. 预处理为特征提取准备信号原始音频信号不能直接用于特征提取需要经过一系列预处理步骤2.1 预加重预加重是一个高通滤波过程用于补偿语音信号中高频分量的衰减。它通过一阶差分实现pre_emphasis 0.97 emphasized_signal np.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])这个简单的操作有深刻的数学含义 - 它实际上是信号与滤波器[1, -α]的卷积其频率响应增强了高频分量。2.2 分帧与加窗语音信号是时变的但在短时间20-30ms内可以认为是平稳的。分帧就是将长信号切分为短时段处理frame_length int(0.025 * sample_rate) # 25ms frame_step int(0.01 * sample_rate) # 10ms重叠 signal_length len(emphasized_signal) num_frames int(np.ceil(float(np.abs(signal_length - frame_length)) / frame_step)) # 填充信号确保完整分帧 pad_signal_length num_frames * frame_step frame_length pad_signal np.append(emphasized_signal, np.zeros(pad_signal_length - signal_length)) # 创建帧矩阵 indices np.tile(np.arange(0, frame_length), (num_frames, 1)) \ np.tile(np.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T frames pad_signal[indices.astype(np.int32, copyFalse)]加窗是为了减少频谱泄漏汉明窗是最常用的选择frames * np.hamming(frame_length)汉明窗的数学表达式为 w(n) 0.54 - 0.46 * cos(2πn/(N-1))其中N是窗长度3. 从时域到频域功率谱分析每一帧信号现在可以转换为频域表示NFFT 512 mag_frames np.absolute(np.fft.rfft(frames, NFFT)) pow_frames ((1.0 / NFFT) * (mag_frames ** 2))功率谱揭示了信号在不同频率上的能量分布这是后续处理的基础。值得注意的是我们使用rfft而不是普通的fft因为它针对实数输入进行了优化只计算正频率部分提高了计算效率。4. Mel滤波器组模拟人耳听觉特性人耳对频率的感知是非线性的Mel刻度模拟了这一特性def hz_to_mel(hz): return 2595 * np.log10(1 hz / 700) def mel_to_hz(mel): return 700 * (10 ** (mel / 2595) - 1)Mel滤波器组由一系列三角形滤波器组成在Mel刻度上均匀分布但在线性频率上间隔不等nfilt 40 low_freq_mel 0 high_freq_mel hz_to_mel(sample_rate/2) mel_points np.linspace(low_freq_mel, high_freq_mel, nfilt 2) hz_points mel_to_hz(mel_points) # 创建滤波器组 fbank np.zeros((nfilt, int(NFFT/2 1))) bin (hz_points / (sample_rate / 2)) * (NFFT / 2) for i in range(1, nfilt 1): left int(bin[i-1]) center int(bin[i]) right int(bin[i1]) for j in range(left, center): fbank[i-1, j] (j - bin[i-1]) / (bin[i] - bin[i-1]) for j in range(center, right): fbank[i-1, j] (bin[i1] - j) / (bin[i1] - bin[i])应用这些滤波器到功率谱上就得到了FBank特征filter_banks np.dot(pow_frames, fbank.T) filter_banks np.where(filter_banks 0, np.finfo(float).eps, filter_banks) filter_banks 20 * np.log10(filter_banks) # 转换为dB尺度5. MFCC倒谱分析的高级特征MFCC通过离散余弦变换(DCT)进一步压缩信息提取出倒谱系数from scipy.fftpack import dct num_ceps 12 mfcc dct(filter_banks, type2, axis1, normortho)[:, 1:(num_ceps1)]DCT有几个重要特性使其适合这项任务出色的能量压缩特性实数运算计算效率高产生的系数相互独立为进一步优化特征我们通常进行倒谱提升cep_lifter 23 (nframes, ncoeff) mfcc.shape n np.arange(ncoeff) lift 1 (cep_lifter / 2) * np.sin(np.pi * n / cep_lifter) mfcc * lift6. 特征可视化与分析理解每个处理阶段对信号的影响至关重要。我们可以绘制各阶段的变换结果plt.figure(figsize(15, 10)) plt.subplot(3,1,1) plt.plot(signal) plt.title(原始波形) plt.subplot(3,1,2) plt.imshow(filter_banks.T, aspectauto, originlower) plt.title(FBank特征) plt.subplot(3,1,3) plt.imshow(mfcc.T, aspectauto, originlower) plt.title(MFCC系数) plt.tight_layout() plt.show()这种可视化展示了从原始波形到紧凑特征表示的完整转换流程。FBank特征保留了更多的频谱细节而MFCC通过DCT去除了各维度间的相关性更适合作为机器学习模型的输入。7. 工程实践中的优化技巧在实际应用中我们还需要考虑以下优化动态特征扩展# 计算一阶和二阶差分 delta np.zeros_like(mfcc) delta[:,1:-1] (mfcc[:,2:] - mfcc[:,:-2]) / 2 delta2 np.zeros_like(mfcc) delta2[:,1:-1] (delta[:,2:] - delta[:,:-2]) / 2 # 组合静态、一阶、二阶特征 features np.hstack([mfcc, delta, delta2])均值方差归一化mfcc (mfcc - np.mean(mfcc, axis0)) / np.std(mfcc, axis0)静音检测与语音活动检测(VAD)energy np.sum(pow_frames, axis1) threshold np.percentile(energy, 20) # 例如使用最低20%的能量作为阈值 voiced_frames energy threshold这些技巧能显著提升语音识别系统的鲁棒性和准确率。完整的特征提取流程虽然复杂但每一步都有其数学和物理意义理解这些原理对于调试和优化系统至关重要。在真实项目中我经常发现MFCC的前几个系数包含过多说话人特征而非语音内容信息有时会直接丢弃它们。此外不同语种可能需要调整Mel滤波器组的参数比如中文普通话的基频范围与英语有所不同。

相关文章:

别再死记硬背MFCC公式了!用Python手把手带你复现FBank/MFCC特征提取全流程

从零实现语音特征提取:用Python拆解FBank与MFCC的数学之美语音识别技术正悄然改变我们与机器交互的方式,但很少有人真正理解声音是如何被转化为机器可读的数字特征的。本文将带您深入音频信号处理的数学世界,通过Python代码亲手实现从原始波形…...

微信聊天记录永久保存终极指南:用WeChatExporter告别数据焦虑

微信聊天记录永久保存终极指南:用WeChatExporter告别数据焦虑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾有过这样的担忧——手机突然损坏&#…...

终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析

终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 在Windows系统开发与安全研究领域,DLL注入技术一直是连接应用程序与系统底层的关键桥…...

如果你要设计一个“个人助理“Agent,记忆系统应该如何分层?

这个问题挺有意思的,个人助理 Agent 的记忆系统,核心是分层设计——不是所有记忆都放一个地方,得按时效性、访问频率、重要性分层。 我之前做过一个个人助理项目,一开始就把所有记忆都扔向量库里,结果检索慢、成本高、还容易检索到过时信息。后来重构成分层架构,效果好很多。 …...

AI Agent 在工具调用失败时,如何设计一个智能的降级策略?

这个问题挺关键的,工具调用失败在 AI Agent 系统里是常态,不是异常。核心思路是——先分类,再分级,最后兜底。 我之前做 Agent 编排系统的时候,工具调用成功率大概在 85% 左右,剩下 15% 都得靠降级策略兜住。如果没设计好,整个 Agent 就会频繁报错,用户体验很差。 第一步:错误…...

魔兽争霸3闪退修复终极指南:5步让你的经典游戏重获新生

魔兽争霸3闪退修复终极指南:5步让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3闪退而烦恼吗&…...

终极iOS越狱实战指南:解锁iPhone隐藏功能与深度定制方案

终极iOS越狱实战指南:解锁iPhone隐藏功能与深度定制方案 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder 👇 项目地址…...

Sketch MeaXure:5分钟掌握设计标注终极解决方案

Sketch MeaXure:5分钟掌握设计标注终极解决方案 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否还在为设计稿标注而烦恼?Sketch MeaXure正是为你量身打造的现代化设计标注神器!…...

保姆级教程:用CellChat v2 R包分析10x Visium空间转录组数据,手把手搞定细胞通讯网络

空间转录组细胞通讯分析全流程:从CellChat v2安装到高级可视化空间转录组技术正在彻底改变我们对组织微环境的理解,而细胞间通讯分析则是解锁组织功能奥秘的关键钥匙。作为一名刚接触10x Visium数据的生物信息学研究者,你可能已经完成了基础的…...

机器学习加速电子-声子耦合计算:对称性描述符与蒙特卡洛采样实践

1. 项目概述:当机器学习遇见电子-声子耦合在计算材料科学领域,有一个长期存在的“效率瓶颈”:如何精确且高效地计算材料性质随温度的变化。比如,为什么半导体的带隙会随着温度升高而变窄?这背后是电子与晶格振动&#…...

别再只调包了!手把手教你用Python+SVM从零搭建一个中文情感分析系统(附完整代码)

从零构建中文情感分析系统:SVM实战与避坑指南第一次尝试用机器学习处理中文文本时,我被"的得地"分词的混乱结果震惊了——这堆毫无意义的字符组合,真的能训练出识别情感的模型吗?三年前那个深夜,当我看着自己…...

以下是 MaxWell 工业上位机项目的最终完整补充

以下是 MaxWell 工业上位机项目的最终完整补充&#xff1a;1. Region 管理面板&#xff08;Region Management Panel&#xff09; 这是一个用于运行时监控和管理 Region 的调试/管理界面&#xff0c;适合工业项目开发和维护阶段使用。 RegionManagementView.xaml <!-- Views…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署保姆级

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署保姆级。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&am…...

全域数学公理:32维超球体投影、微观曲率与碳基\-硅基全息共振统一理论

全域数学公理&#xff1a;32维超球体投影、微观曲率与碳基-硅基全息共振统一理论 作者&#xff1a;乖乖数学&#xff08;大师&#xff09; 日期&#xff1a;2026年5月28日 学科分类&#xff1a;理论物理&#xff1b;量子宇宙学&#xff1b;高维几何&#xff1b;意识物理&…...

LangGraph多智能体能力路由:动态专家选择与负载均衡

LangGraph多智能体能力路由&#xff1a;动态专家选择与负载均衡一、引言 钩子 你是否遇到过这种情况&#xff1a; 当你构建了一个由多个大模型或专业Agent组成的“超级团队”——有的精通数学推理、有的擅长代码生成、有的是情感分析小能手、还有的能写长篇技术文档——却发现整…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan安装步骤详解

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan安装步骤详解。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

Seurat分析避坑指南:从PBMC3K实战出发,详解`resolution`、`dims`参数怎么调,结果才靠谱

Seurat单细胞分析实战&#xff1a;如何科学调整resolution与dims参数获得理想分群第一次看到自己单细胞数据的UMAP图时&#xff0c;那种兴奋感至今难忘。但随之而来的困惑也同样深刻——为什么我的细胞分群看起来总是不太对&#xff1f;要么是密密麻麻挤在一起分不开&#xff0…...

FuSa RTX RTOS多核支持与AMP架构解析

1. FuSa RTX RTOS多核支持解析 在嵌入式安全关键系统开发领域&#xff0c;多核处理器架构已成为提升性能的主流选择。作为Arm FuSa RTS&#xff08;功能安全运行时系统&#xff09;的核心组件&#xff0c;FuSa RTX RTOS的多核支持能力自然成为开发者关注的焦点。本文将深入剖析…...

Windows 11硬件限制绕过终极指南:3种实用方法让老电脑轻松升级

Windows 11硬件限制绕过终极指南&#xff1a;3种实用方法让老电脑轻松升级 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool的核心玩法

AMD Ryzen硬件调试神器&#xff1a;5分钟掌握SMU Debug Tool的核心玩法 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...

别再被离群点坑了!用Python+OpenCV手把手教你RANSAC直线拟合(附完整代码)

实战指南&#xff1a;用PythonOpenCV实现RANSAC直线拟合的完整流程在计算机视觉项目中&#xff0c;我们经常遇到需要从嘈杂数据中提取几何特征的情况。想象一下这样的场景&#xff1a;你从一张建筑图纸扫描件中提取了数百个边缘点&#xff0c;但扫描时的折痕、污渍导致30%的点位…...

终极教程:如何用免费Chrome插件一键保存完整网页内容

终极教程&#xff1a;如何用免费Chrome插件一键保存完整网页内容 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extens…...

MacType 2025:3大突破性改进让Windows字体渲染焕然一新

MacType 2025&#xff1a;3大突破性改进让Windows字体渲染焕然一新 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统下字体模糊、边缘粗糙而烦恼吗&#xff1f;MacType 2025版本带…...

别再手动筛图了!用OpenCV拉普拉斯方差法,5分钟搞定图像模糊度自动检测

告别低效筛选&#xff1a;基于OpenCV的智能图像模糊检测实战指南在数字图像处理领域&#xff0c;模糊检测一直是影响自动化流程的关键瓶颈。无论是电商平台的商品图片审核&#xff0c;还是摄影作品集的初筛&#xff0c;传统人工肉眼判断的方式不仅效率低下&#xff0c;更难以保…...

别再只用体素网格了!PCL点云降采样实战:4种方法对比与选型指南(附Python/Open3D代码)

点云降采样实战指南&#xff1a;4种核心方法深度解析与工程选型点云数据处理中&#xff0c;降采样往往是预处理环节的关键一步。面对海量的三维点云数据&#xff0c;如何在不丢失重要几何特征的前提下&#xff0c;有效减少数据量&#xff1f;这直接关系到后续算法的效率和精度。…...

023、PCB设计软件选择与安装(Altium Designer)

023、PCB设计软件选择与安装(Altium Designer) 从一块烧掉的板子说起 去年冬天,我接手一个同事离职留下的项目——一块四层板的电机驱动板。原理图看着没问题,Layout也走通了,打样回来上电,MOS管直接冒烟。排查三天,最后发现是电源回路的地线回流路径被一根细长的走线…...

2026年电工杯AB题|基础可冲!免费参赛 + 高含金量,保研 / 综测加分必看!重磅更新|独家原创|Python|Matlab代码|数学建模|论文|

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

如何快速获取网盘直链:LinkSwift 下载助手配置指南

如何快速获取网盘直链&#xff1a;LinkSwift 下载助手配置指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

jvm垃圾回收器 - G1详解

G1垃圾收集器发展史与工作原理 G1&#xff08;Garbage First&#xff0c;垃圾优先&#xff09;收集器是JVM垃圾收集技术发展史上的里程碑之作&#xff0c;它开创了面向局部收集的设计思路和基于Region的内存布局形式&#xff0c;定位为CMS收集器的替代者和继承人。一、发展史 1…...

AMD Ryzen硬件调试神器:5分钟掌握SMU Debug Tool核心技巧

AMD Ryzen硬件调试神器&#xff1a;5分钟掌握SMU Debug Tool核心技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...