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

Python实战:5步搞定MFCC语音特征提取(附完整代码)

Python实战5步搞定MFCC语音特征提取附完整代码语音识别技术正以前所未有的速度渗透到智能家居、车载系统和虚拟助手等场景中。作为这项技术的核心梅尔频率倒谱系数MFCC因其对人耳听觉特性的高度模拟成为最常用的语音特征提取方法之一。本文将用Python带你完整实现MFCC特征提取流程从理论到代码实现每个步骤都配有可运行的示例。1. 环境准备与音频预处理在开始提取MFCC特征前我们需要搭建合适的工作环境并准备好待处理的音频数据。核心工具包安装pip install numpy scipy matplotlib python_speech_features音频信号预处理是MFCC提取的第一步主要包括以下关键操作import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile # 读取音频文件 sample_rate, signal wavfile.read(speech.wav) signal signal[:int(3.5*sample_rate)] # 截取前3.5秒 # 信号归一化 signal signal / np.max(np.abs(signal)) # 预加重处理 pre_emphasis 0.97 emphasized_signal np.append(signal[0], signal[1:] - pre_emphasis * signal[:-1]) # 可视化对比 plt.figure(figsize(12,4)) plt.subplot(211) plt.plot(signal) plt.title(原始信号) plt.subplot(212) plt.plot(emphasized_signal) plt.title(预加重后信号) plt.tight_layout() plt.show()注意预加重系数通常取值0.95-0.97用于增强高频分量补偿语音信号在发声过程中被抑制的高频部分。2. 分帧与加窗处理语音信号是准平稳信号需要在短时窗口内进行处理。典型的分帧参数设置如下参数推荐值说明帧长25ms对应400个采样点(16kHz采样率)帧移10ms相邻帧重叠15ms窗函数汉明窗减少频谱泄漏实现分帧加窗的Python代码def framesig(sig, frame_len, frame_step, winfuncnp.hamming): slen len(sig) frame_len int(round(frame_len)) frame_step int(round(frame_step)) num_frames int(np.ceil(float(slen - frame_len) / frame_step)) padlen num_frames * frame_step frame_len zeros np.zeros((padlen - slen,)) padsignal np.concatenate((sig, zeros)) indices np.tile(np.arange(0, frame_len), (num_frames, 1)) \ np.tile(np.arange(0, num_frames * frame_step, frame_step), (frame_len, 1)).T frames padsignal[indices.astype(np.int32, copyFalse)] frames * winfunc(frame_len) return frames frame_size 0.025 # 25ms frame_stride 0.01 # 10ms frames framesig(emphasized_signal, frame_size*sample_rate, frame_stride*sample_rate)3. 频域分析与梅尔滤波器组将时域信号转换到频域后我们需要构建符合人耳听觉特性的梅尔尺度滤波器组def mel2hz(mel): return 700 * (10**(mel/2595.0) - 1) def hz2mel(hz): return 2595 * np.log10(1 hz/700.0) def get_filterbanks(nfilt26, nfft512, samplerate16000): lowmel hz2mel(0) highmel hz2mel(samplerate/2) melpoints np.linspace(lowmel, highmel, nfilt2) hzpoints mel2hz(melpoints) bin np.floor((nfft1)*hzpoints/samplerate) fbank np.zeros((nfilt, int(nfft/21))) for j in range(1, nfilt1): for i in range(int(bin[j-1]), int(bin[j])): fbank[j-1,i] (i - bin[j-1]) / (bin[j]-bin[j-1]) for i in range(int(bin[j]), int(bin[j1])): fbank[j-1,i] (bin[j1]-i) / (bin[j1]-bin[j]) return fbank # 计算功率谱 NFFT 512 mag_frames np.absolute(np.fft.rfft(frames, NFFT)) pow_frames (1.0/NFFT) * (mag_frames**2) # 创建梅尔滤波器组 filter_banks get_filterbanks(nfilt26, nfftNFFT, sampleratesample_rate) # 应用滤波器组 filter_banks np.dot(pow_frames, filter_banks.T) filter_banks np.where(filter_banks 0, np.finfo(float).eps, filter_banks) filter_banks 20 * np.log10(filter_banks) # 转换为dB尺度 # 可视化滤波器组 plt.figure(figsize(10,4)) plt.imshow(filter_banks.T, aspectauto, originlower) plt.colorbar() plt.title(梅尔滤波器组能量) plt.show()4. 离散余弦变换与MFCC系数对滤波器组输出进行DCT变换得到最终的MFCC系数from scipy.fftpack import dct def mfcc(filter_banks, num_ceps12): mfcc dct(filter_banks, type2, axis1, normortho)[:, 1:(num_ceps1)] # 倒谱提升 (nframes, ncoeff) mfcc.shape n np.arange(ncoeff) cep_lifter 22 lift 1 (cep_lifter/2) * np.sin(np.pi * n / cep_lifter) mfcc * lift # 均值归一化 mfcc - (np.mean(mfcc, axis0) 1e-8) return mfcc mfcc_features mfcc(filter_banks) # 可视化MFCC特征 plt.figure(figsize(12,4)) plt.imshow(mfcc_features.T, aspectauto, originlower, cmapjet) plt.colorbar() plt.title(MFCC特征) plt.ylabel(MFCC系数) plt.xlabel(帧) plt.show()5. 完整实现与进阶优化将上述步骤整合为完整的MFCC提取流程并添加一些实用优化技巧def extract_mfcc(audio_path, n_mfcc13, n_fft512, win_length0.025, hop_length0.01, n_mels26): # 1. 读取并预处理音频 sample_rate, signal wavfile.read(audio_path) signal signal[:int(3.5*sample_rate)] signal signal / np.max(np.abs(signal)) # 2. 预加重 pre_emphasis 0.97 emphasized_signal np.append(signal[0], signal[1:] - pre_emphasis * signal[:-1]) # 3. 分帧加窗 frame_length int(win_length * sample_rate) frame_step int(hop_length * sample_rate) frames framesig(emphasized_signal, frame_length, frame_step) # 4. 计算功率谱 mag_frames np.absolute(np.fft.rfft(frames, n_fft)) pow_frames (1.0/n_fft) * (mag_frames**2) # 5. 梅尔滤波器组 filter_banks get_filterbanks(nfiltn_mels, nfftn_fft, sampleratesample_rate) filter_banks np.dot(pow_frames, filter_banks.T) filter_banks np.where(filter_banks 0, np.finfo(float).eps, filter_banks) filter_banks 20 * np.log10(filter_banks) # 6. DCT变换得到MFCC mfcc_features dct(filter_banks, type2, axis1, normortho)[:, 1:(n_mfcc1)] # 7. 倒谱提升 (nframes, ncoeff) mfcc_features.shape n np.arange(ncoeff) cep_lifter 22 lift 1 (cep_lifter/2) * np.sin(np.pi * n / cep_lifter) mfcc_features * lift # 8. 均值归一化 mfcc_features - (np.mean(mfcc_features, axis0) 1e-8) return mfcc_features, sample_rate # 使用示例 mfcc_features, sr extract_mfcc(speech.wav) # 添加动态特征(一阶和二阶差分) def add_deltas(mfcc_features): delta np.zeros_like(mfcc_features) for i in range(1, len(mfcc_features)-1): delta[i] (mfcc_features[i1] - mfcc_features[i-1]) / 2 delta_delta np.zeros_like(delta) for i in range(1, len(delta)-1): delta_delta[i] (delta[i1] - delta[i-1]) / 2 return np.hstack((mfcc_features, delta, delta_delta)) full_features add_deltas(mfcc_features)实际项目中MFCC特征通常会配合以下优化策略能量特征将每帧的能量作为额外特征差分系数计算一阶和二阶差分表征动态特征归一化对特征进行CMVN(倒谱均值方差归一化)处理降维使用PCA或LDA对高维特征进行降维# 计算帧能量 def compute_energy(frames): return np.sum(frames**2, axis1) energy compute_energy(frames) energy np.log(energy 1e-8) # 对数能量 energy energy.reshape(-1, 1) # 转为列向量 # 合并MFCC和能量特征 mfcc_with_energy np.hstack((mfcc_features, energy)) # CMVN归一化 def cmvn(features): mean np.mean(features, axis0) std np.std(features, axis0) return (features - mean) / (std 1e-8) normalized_features cmvn(mfcc_with_energy)通过这五个步骤我们完成了从原始语音信号到MFCC特征的完整提取流程。在实际语音识别系统中这些特征将被输入到声学模型中进行进一步处理。

相关文章:

Python实战:5步搞定MFCC语音特征提取(附完整代码)

Python实战:5步搞定MFCC语音特征提取(附完整代码) 语音识别技术正以前所未有的速度渗透到智能家居、车载系统和虚拟助手等场景中。作为这项技术的核心,梅尔频率倒谱系数(MFCC)因其对人耳听觉特性的高度模拟…...

SEO_新手必看的SEO优化入门教程与核心方法(381 )

SEO优化入门:新手必看的核心方法 在互联网时代,网站的流量和曝光度直接关系到一个企业的成功与否。而搜索引擎优化(SEO)作为提高网站排名的关键技术之一,成为了每个网站运营者必须掌握的技能。本文将为新手提供一份详细…...

GitHub热键库@github/hotkey:5分钟快速上手网页键盘快捷键开发终极指南

GitHub热键库github/hotkey:5分钟快速上手网页键盘快捷键开发终极指南 【免费下载链接】hotkey Trigger an action on an element with a keyboard shortcut. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey 想要为你的网页应用添加强大的键盘快捷键功…...

FreeSWITCH视频通话常见问题排查:编解码错误与媒体协商失败解决方案

FreeSWITCH视频通话故障排查手册:从编解码协商到媒体流修复 1. 视频通话架构与常见故障点全景 FreeSWITCH作为企业级通信平台的核心枢纽,其视频通话功能建立在SIP信令与RTP/RTCP媒体流的协同工作基础上。典型的视频通话故障通常出现在三个关键层面&#…...

Public Sans字体深度测评:开源无衬线字体的技术特性与场景适配分析

Public Sans字体深度测评:开源无衬线字体的技术特性与场景适配分析 【免费下载链接】public-sans A strong, neutral, principles-driven, open source typeface for text or display 项目地址: https://gitcode.com/gh_mirrors/pu/public-sans 在数字设计领…...

AI元人文:岐金兰再次致敬黄玉顺教授

岐金兰说:黄玉顺教授一定是在说,我已经指出了,不必多说。不过,岐金兰为了智能时代的多元叙事性权衡,必须多说一句,指出伦理中间件,之后呢,不必多说了。---一、生活儒学的洞见与沉默黄…...

各个主体的自感,让德里达的踪迹与延异说,成就了各个主体的“内在-外部”世界统一而多元,成就了时间性与空间的辩证统一。

岐金兰说: 各个主体的自感,让德里达的踪迹与延异说,成就了各个主体的“内在-外部”世界统一而多元,成就了时间性与空间的辩证统一。 --- 一、自感作为界面:从踪迹到“内在-外部”世界的统一 德里达的踪迹说揭示了一个深…...

postgresql(15)使用yum安装后环境变量信息

postgresql(15)使用yum安装后,其默认家目录,其环境变量信息如下 1.家目录 -bash-4.2$ whoami postgres -bash-4.2$ cd -bash-4.2$ pwd /var/lib/pgsql -bash-4.2$ 2.环境变量信息 -bash-4.2$ ls -la total 44 drwx------ 3 postgres postgres 95 Dec 18 10:49 . drwx…...

OBS录屏进阶技巧:精准捕获目标窗口与自定义画质优化

1. 为什么需要精准捕获窗口? 很多朋友刚开始用OBS录屏时,经常会遇到这样的困扰:明明只想录制某个软件窗口,结果把整个桌面都录进去了。这不仅会让视频显得杂乱,还会占用更多存储空间。比如你想录制VS Code的编程过程&a…...

拜尔模板(Bayer Pattern)在数字图像处理中的核心作用与优化策略

1. 拜尔模板的前世今生:从胶片时代到数字革命 我第一次拆解数码相机传感器时,发现那些排列整齐的彩色小点就像精心设计的马赛克艺术品。这就是拜尔模板的魔力——用最经济的方案解决色彩捕捉的世纪难题。1976年柯达科学家Bryce Bayer提出这个方案时&…...

3个技巧教你用抖音批量下载工具实现抖音资源高效管理

3个技巧教你用抖音批量下载工具实现抖音资源高效管理 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音视频逐一下载烦恼?面对喜欢的创作者主页,想要收藏全部作品却要手动点击…...

TileLang:让GPU编程像Python一样简单的高性能计算新范式

TileLang:让GPU编程像Python一样简单的高性能计算新范式 【免费下载链接】tilelang Domain-specific language designed to streamline the development of high-performance GPU/CPU/Accelerators kernels 项目地址: https://gitcode.com/GitHub_Trending/ti/ti…...

AnimateDiff开源贡献:PyTorch核心代码解读与修改

AnimateDiff开源贡献:PyTorch核心代码解读与修改 1. 引言 如果你对AI视频生成感兴趣,可能已经听说过AnimateDiff这个强大的文生视频框架。它能够将静态的文字描述转化为生动的视频内容,效果相当惊艳。但你是否想过,这个看似神秘…...

Yuxi-Know部署与运维深度指南:从零到生产环境的完整解决方案

Yuxi-Know部署与运维深度指南:从零到生产环境的完整解决方案 【免费下载链接】Yuxi-Know 基于大模型 RAG 知识库与知识图谱的问答平台。Llamaindex VueJS Flask Neo4j。大模型适配 OpenAI、国内主流大模型平台的模型调用、本地 vllm 部署。 项目地址: https://…...

MacBook Touch Bar个性化:从效率痛点到指尖革命的全面解决方案

MacBook Touch Bar个性化:从效率痛点到指尖革命的全面解决方案 【免费下载链接】pock Widgets manager for MacBook Touch Bar 项目地址: https://gitcode.com/gh_mirrors/po/pock 痛点诊断:被低估的Touch Bar潜能 当你每天打开MacBook时&#x…...

从官方Demo到项目集成:海康MV-EB435i RGBD相机C++采集与OpenCV图像处理实战

1. 环境准备与SDK安装 第一次接触海康MV-EB435i这款RGBD相机时,我花了两天时间才把开发环境搭好。现在回想起来,其实只要抓住几个关键点就能少走弯路。先说说硬件准备:这款相机支持USB3.0和千兆网口两种连接方式,实测USB连接更稳定…...

基于Qt C++开发一款针对武合干线量子通信工程的监控与管理平台

你想要基于Qt C++开发一款针对**武合干线量子通信工程**的监控与管理平台,核心聚焦800公里量子干线的运行监控、量子中继技术的状态管理,体现“中继技术突破、通信距离提升至千公里级”的核心优势,适配中部地区通信、能源调度的业务场景。 ### 一、核心开发思路 这款武合干…...

安装包制作教程:将Qwen3-ForcedAligner-0.6B打包为Windows应用

安装包制作教程:将Qwen3-ForcedAligner-0.6B打包为Windows应用 1. 引言 如果你用过Qwen3-ForcedAligner-0.6B这个音文对齐工具,肯定知道它有多实用——能精确到毫秒级的时间戳标注,让字幕制作变得轻松简单。但每次都要在命令行里敲代码、配…...

Qwen3-0.6B-FP8模型转换与优化:从Hugging Face到星图平台部署

Qwen3-0.6B-FP8模型转换与优化:从Hugging Face到星图平台部署 最近在折腾一些小模型,发现Qwen3-0.6B这个尺寸的模型特别适合做一些轻量级的应用。不过直接从Hugging Face上下载的原始模型,在部署到像星图这样的GPU平台时,可能会遇…...

Fish Speech 1.5实操手册:解决语音不自然、克隆失真等高频问题

Fish Speech 1.5实操手册:解决语音不自然、克隆失真等高频问题 1. 快速上手:5分钟搞定语音合成 你是不是遇到过语音合成工具生成的语音听起来很机械、不自然?或者声音克隆出来的效果完全不像本人?Fish Speech 1.5就是为了解决这些…...

华为OD机考双机位C卷 - 区间连接器 (Java)

区间连接器 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 有一组区间[a0,b0],[a1,b1],…(a,b表示起点,终点),区间有可…...

基于RBF神经网络的机械臂轨迹跟踪控制优化及其Matlab仿真实现

基于RBF神经网络的机械臂轨迹跟踪控制matlab仿真机械臂轨迹跟踪控制这事挺有意思的,特别是加上RBF神经网络之后。咱们先拿二自由度机械臂开刀,看看怎么在MATLAB里折腾这个仿真。先说个真实场景——当机械臂抓取物体时,关节摩擦力、负载变化这…...

保姆级教程:用HBuilderX给UniApp安卓项目制作支持MQTT插件的自定义基座

深度解析:UniApp安卓项目集成MQTT插件的自定义基座实战指南 当你在UniApp项目中尝试使用原生MQTT插件时,是否遇到过这样的困境:代码写好了,插件也购买了,但真机运行时却频频报错?这往往是因为官方基座缺少必…...

别再手动P图了!用Python+OpenCV给图片批量加Logo水印,5分钟搞定

PythonOpenCV批量水印自动化:电商与自媒体工作流效率革命 每次处理上百张产品图时,最痛苦的不是修图调色,而是机械重复地拖动Logo到每个角落——这几乎是所有电商美工的日常噩梦。我曾用3小时完成200张新品上架图的品牌标识添加,直…...

终极iOS越狱指南:使用palera1n突破iOS 15.0+设备限制的完整方案

终极iOS越狱指南:使用palera1n突破iOS 15.0设备限制的完整方案 【免费下载链接】palera1n Jailbreak for arm64 devices on iOS 15.0 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 你是否在为iOS 15.0以上设备找不到稳定的越狱工具而困扰&…...

仅限内部技术团队流通的Dify异步接入SOP(含安全审计清单+可观测性埋点规范)

第一章:Dify 自定义节点异步处理如何实现快速接入在 Dify v1.0 版本中,自定义节点(Custom Node)支持通过 Webhook 或本地 Python 函数方式扩展业务逻辑。当节点需执行耗时操作(如大模型微调、外部 API 调用、文件批量处…...

STM32水质检测系统设计与实现

基于STM32的水质检测系统设计与实现1. 项目概述1.1 系统架构本水质检测系统采用模块化设计架构,以STM32F103RCT6微控制器为核心,集成多种水质参数传感器、显示模块和无线通信模块。系统硬件架构分为三个主要层次:传感层:包含水温、…...

麒麟V10系统下Docker+MySQL+ClickHouse全家桶安装避坑指南(附详细卸载步骤)

麒麟V10系统下DockerMySQLClickHouse全家桶安装避坑指南(附详细卸载步骤) 在国产化替代浪潮中,麒麟操作系统凭借其安全可靠的特性,正逐步成为企业级应用的新选择。作为系统管理员或运维工程师,掌握麒麟V10环境下主流服…...

HunyuanVideo-Foley快速上手:开箱即用镜像部署、WebUI调用与API封装

HunyuanVideo-Foley快速上手:开箱即用镜像部署、WebUI调用与API封装 1. 镜像概述与核心优势 HunyuanVideo-Foley是一款集视频生成与AI音效合成于一体的创新工具,本镜像针对RTX 4090D 24GB显卡进行了深度优化,让用户能够快速部署并投入实际使…...

MCP服务器本地数据库连接器接入速成手册(含systemd服务模板+健康检查探针+自动fallback配置)

第一章:MCP服务器本地数据库连接器接入速成手册(含systemd服务模板健康检查探针自动fallback配置)MCP(Model Control Protocol)服务器需稳定、低延迟地访问本地数据库,本手册提供开箱即用的连接器集成方案&…...