PaddleSpeech 语音特征提取实战:解析 python_kaldi_features 的 MFCC、Fbank 实现与 Kaldi 对齐细节
人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载本文以 PaddleSpeech 仓库中third_party/python_kaldi_features下的 Sphinx 文档主入口 index.rst 为核心结合 base.py、sigproc.py 的源码实现讲清楚这个库提供的四类特征MFCC、Filterbank、Log Filterbank、SSC的计算流程、全部参数含义与默认值、与 Kaldicompute-mfcc-feats/compute-fbank-feats的对齐方式以及它在 PaddleSpeech 音频处理管线中的实际落点。读完你可以直接复现一段可运行的特征提取代码并能从源码级理解每个特征值是如何一步步算出来的。这个第三方库在 PaddleSpeech 中的定位index.rst 开篇说明该库提供 ASR 中最常用的语音特征包括 MFCC 与 filterbank 能量运行依赖 numpy 与 scipy其原始版本来自 James Lyons 的 python_speech_features 项目。但在 PaddleSpeech 仓库中它是以 fork 形式维护的third_party/python_kaldi_features/README.rst 明确写道本 fork 已修改使其输出结果与 Kaldi 的compute-mfcc-feats和compute-fbank-feats命令按二者默认参数一致third_party/python_kaldi_features/setup.py 中安装包被命名为paddlespeech_feat版本 0.1.0MIT 协议打包python_speech_features包PaddleSpeech 主包的 setup.py 将paddlespeech_feat列入install_requires也就是说安装 PaddleSpeech 时它会作为依赖一并引入。因此这个目录不是孤立的示例代码而是 PaddleSpeech 语音前端的一条可复现的特征提取实现。支持的四个特征函数index.rst 列出的受支持特征为python_speech_features.mfcc—— Mel Frequency Cepstral Coefficients梅尔频率倒谱系数python_speech_features.fbank—— Filterbank Energies滤波组能量python_speech_features.logfbank—— Log Filterbank Energies对数滤波组能量python_speech_features.ssc—— Spectral Subband Centroids谱子带质心前三个函数定义在 base.py 中第四个ssc位于上游原始文件中base_orig.py。__init__.py只有一行from .base import *即对外暴露base.py中的全部公开函数。文档给出的最小使用示例如下与 index.rst 中的示例一致仓库内 example.py 还给出了带参数的完整版from python_speech_features import mfcc from python_speech_features import logfbank import scipy.io.wavfile as wav (rate, sig) wav.read(file.wav) mfcc_feat mfcc(sig, rate) fbank_feat logfbank(sig, rate) print(fbank_feat[1:3, :])仓库自带的 example.py 则是对齐 Kaldi的推荐用法from python_speech_features import mfcc, delta, logfbank import scipy.io.wavfile as wav (rate, sig) wav.read(english.wav) # 16kHz 采样english.wav 位于 third_party/python_kaldi_features/ # 注意语音识别场景一般取 nfilt40 fbank_feat logfbank(sig, nfilt23, lowfreq20, dither0, wintypepovey) # english.wav 计算结果维度为 [110, 23] # 与 Kaldi 命令 compute-fbank-feats --dither0.0 的结果一致 mfcc_feat mfcc(sig, dither0, useEnergyTrue, wintypepovey) # 结果维度为 [110, 13]与 Kaldi 命令 compute-mfcc-feats --dither0.0 的结果一致示例文件还附注了具体数值english.wav 的 fbank 前两帧分别为[12.2865, 12.6906, 13.1765, 15.714, ...]与[11.9198, 13.146, 14.7215, 15.8642, ...]MFCC 前两帧分别为[17.1337, -23.3651, -7.41751, ...]与[17.1692, -23.3028, -5.61872, ...]。这是验证输出与 Kaldi 一致的直接数值证据。MFCC 的计算流程与参数详解mfcc()的实现见 base.py共五步调用fbank()得到滤波组能量矩阵同时拿到每帧未加窗的原始能量对滤波组能量取自然对数numpy.log(feat)对每帧做 type-2 正交 DCT截取前numcep维base.pydct(feat, type2, axis1, normortho)[:, :numcep]施加倒谱抬升lifter若useEnergyTrue用每帧能量的对数替换第 0 维倒谱系数。完整参数及默认值如下以 base.py 源码为准参数默认值含义signal—输入音频信号应为 N*1 数组通常由scipy.io.wavfile读出的采样点序列samplerate16000采样率Hzwinlen0.025分析窗长度秒即 25 mswinstep0.01相邻窗起始位置步长秒即 10 msnumcep13返回的倒谱系数个数nfilt26Mel 滤波器组中滤波器的个数注意 docstring 写的是 26Kaldi 识别场景常用 40见 example.py 中generally nfilt40 is used for speech recognition的注释nfft512FFT 长度若帧长大于 nfft 会被截断并告警见 sigproc.pylowfreq20Mel 滤波器最低频带边界HzKaldi 默认 20highfreqNone即 samplerate/2Mel 滤波器最高频带边界Hzdither1.0加白噪声扰动量级0 表示不加对齐 Kaldi 时需传 0remove_dc_offsetTrue是否去除每帧直流偏移preemph0.97预加重系数0 表示不做预加重ceplifter22倒谱抬升系数 LL0 时不抬升useEnergyTrue用帧能量对数替换第 0 维倒谱系数wintypepovey加窗类型povey 或 hamming返回值为形状(NUMFRAMES, numcep)的 numpy 数组每行一帧的特征向量。fbank / logfbank 与梅尔滤波器组fbank()base.py计算每帧的 Mel 滤波组能量流程为sigproc.framesig()分帧并完成加抖动、去直流、预加重、加窗同时返回未加窗的raw_framessigproc.powspec()计算每帧功率谱能量取自未加窗的原始帧energy numpy.sum(raw_frames**2, 1)并对 0 能量帧置为finfo(float).eps避免后续 log 出错通过get_filterbanks()构造梅尔滤波器组矩阵numpy.dot(pspec, fb.T)得到滤波组能量同样把 0 值替换为 eps。fbank与logfbank的关键默认值差异源码 base.py 与 base.py参数fbank 默认值logfbank 默认值nfilt4040lowfreq064wintypehamminghamming其余参数winlen0.025、winstep0.01、nfft512、dither1.0、remove_dc_offsetTrue、preemph0.97两者一致。logfbank()只是在fbank()基础上对滤波组能量取自然对数。需要特别注意的是示例中对齐 Kaldi的调用显式传了nfilt23, lowfreq20, dither0, wintypepovey覆盖了默认值——这与 Kaldicompute-fbank-feats的默认参数23 个滤波器、20 Hz 起点、Povey 窗对应。梅尔滤波器组的构造函数get_filterbanks()base.py值得细看梅尔刻度换算采用经典公式hz2mel(hz) 1127 * log(1 hz/700)、mel2hz(mel) 700 * (exp(mel/1127) - 1)base.py在梅尔刻度上均匀划分nfilt1个间隔每个滤波器取 3 个相邻边界构成三角波左坡、右坡线性升降源码注释# check kaldi/src/feat/Mel-computations.h表明该实现参照了 Kaldi 的梅尔滤波组定义返回值形状为nfilt * (nfft/2 1)每行一个滤波器并断言highfreq samplerate/2。辅助函数lifter()base.py实现倒谱抬升当L 0时逐系数乘以1 (L/2) * sin(pi * n / L)放大高倒谱阶次的幅值默认L22L 0时直接返回原数组。sigproc分帧与频谱的底层实现index.rst 后半部分通过automodule指令引用了python_speech_features.base与python_speech_features.sigproc两个模块的自动文档sigproc就是特征计算的地基位于 sigproc.py。核心函数如下framesig(sig, frame_len, frame_step, dither1.0, preemph0.97, remove_dc_offsetTrue, wintypehamming, stride_trickTrue)sigproc.py把信号切成重叠帧。帧数按1 ((slen - frame_len) // frame_step)计算信号不短于一帧时随后对信号截断到刚好需要的长度。每帧依次执行do_dither加N(0, dither)噪声、do_remove_dc_offset减去帧均值、do_preemphasis预加重y[t] x[t] - coeff * x[t-1]首点为(1-coeff)*x[0]最后乘以分析窗并返回(加窗帧, 原始帧)两个数组。窗函数支持两种povey按 Kaldifeature-window.h的实现逐点计算(0.5 - 0.5*cos(2*pi*i/(frame_len-1)))**0.85否则用numpy.hamming。rolling_window(a, window, step)sigproc.py基于 numpy stride trick 的滚动窗视图stride_trickTrue时用它替代逐索引取帧显著提升长音频的分帧速度。magspec()/powspec()/logpowspec()sigproc.py分别计算幅度谱numpy.fft.rfft取模、功率谱幅度平方、对数功率谱10*log10小于 1e-30 的值先钳位norm1时按全局最大值归一到 0 以下。deframesig()sigproc.pyoverlap-add 逆分帧用于由帧序列重建一维信号并用窗能量校正消除加窗引入的幅度失真。分帧正确性与加速效果由单元测试 test/test_sigproc.py 保证test_frame_sig用长度 10,001,241 的随机信号、frame_len37、frame_step13分别以stride_trickFalse/True两种路径计算断言结果逐元素相等且新路径更快test_rolling则验证滚动窗的切片结果。与 Kaldi compute-mfcc-feats 流水线的对应关系README.rst 梳理了 Kaldicompute-mfcc-feats命令的 C 调用链这是理解本 fork对齐改动的关键src/featbin/Compute-mfcc-feats.cc Mfcc mfcc(mfcc_opts) -- src/feat/Feature-mfcc.h ... for each utterance: mfcc.ComputeFeatures() Compute() ExtractWindow() -- src/feat/Feature-window.cc ProcessWindow() Dither, remove_dc_offset, log_energy_pre_window, Preemphasize, window computer_.Compute() -- src/feat/Feature-mfcc.cc MelBanks, srfft_, ComputePowerSpectrum(), mel_banks.Compute(), mel_energies_.ApplyLog(), dct, cepstral_lifter把这条链与 Python 实现对照Kaldi 在ProcessWindow()中按加抖动 → 去直流 → 记录预加窗能量 → 预加重 → 加窗的顺序处理窗口对应framesig()中do_dither→do_remove_dc_offset→能量取自raw_frames→do_preemphasis→ 乘窗的次序Kaldi 的MelBanks srfft ComputePowerSpectrum ApplyLog dct cepstral_lifter则对应fbank()中的powspec → get_filterbanks → dot、mfcc()中的log → dct → lifter。源码中# check kaldi/src/feat/feature-window.hsigproc.py和# check kaldi/src/feat/Mel-computations.hbase.py两处注释也标明了各自参照的 Kaldi 头文件。因此本 fork 的默认参数lowfreq20、wintypepovey、预加重 0.97、DCT type-2 正交归一、lifter 22都与 Kaldi 命令行工具保持一致这也是 example.py 中数值能与compute-fbank-feats --dither0.0、compute-mfcc-feats --dither0.0直接对比的原因。在 PaddleSpeech 中的实际应用从源码结构看该库不止是第三方归档。PaddleSpeech 的音频变换模块 paddlespeech/audio/transform/spectrogram.py 直接from python_speech_features import logfbank把这套 Kaldi 对齐的 log-Mel 滤波器组能量特征用到了自己的音频处理管线中同文件的 import 说明中也可确认依赖的是paddlespeech_feat安装产物。这意味着如果你在 PaddleSpeech 的数据预处理链路里看到 log-Mel 特征其底层数值行为就是本文解析的logfbank流程参数对齐 Kaldi 默认值时结果可复现。安装与文档构建依赖requirements.txt 仅列出 numpy 与 scipy另有 mock 一项与 index.rst 中需要 numpy 和 scipy的说明一致安装该目录的 setup.py 以包名paddlespeech_feat发布执行pip install third_party/python_kaldi_features或作为依赖随 PaddleSpeech 安装主 setup.py 已声明文档Sphinx 文档源文件位于 docs/source/配置在 docs/source/conf.py可用 docs/Makefile 构建 HTML 文档index.rst中的automodule指令会在生成时自动汇总base与sigproc两个模块的函数文档。小结这个目录用不到 300 行的纯 Python 代码base.py 约 166 行、sigproc.py 约 158 行完整实现了 Kaldi 风格特征提取的全部环节分帧含抖动、去直流、预加重、Povey/Hamming 窗、FFT 功率谱、梅尔三角滤波器组、对数化、DCT 倒谱与 lifter以及 delta 动态特征delta()base.py按前后 N 帧加权差分、边界用 edge padding。对需要理解或复现 PaddleSpeech 语音前端的读者建议按先跑 example.py 复现两帧特征值 → 再读mfcc()/fbank()参数 → 最后对照 README 的 Kaldi 调用链的顺序深入即可在源码级别掌握 MFCC/log-Mel 特征的每一个数值来源。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech python_kaldi_features 深度解析与 Kaldi compute-mfcc-feats 结果一致的 Python 特征提取实现PaddleSpeech python_kaldi_features 深度解析与 Kaldi compute mfcc feats 结果一致的 Python人工智能语音音频语音特征工程终极指南ESPnet中MFCC与FBank的实战应用语音特征工程终极指南ESPnet中MFCC与FBank的实战应用 ESPnet作为开源语音处理工具包集成了语音识别、合成等多种功能而MFCC梅尔频率倒谱人工智能语音音频深度学习NLPPaddleSpeech 音频特征提取层全解析Spectrogram、MelSpectrogram、LogMelSpectrogram 与 MFCC 的实现与使用PaddleSpeech 音频特征提取层全解析Spectrogram、MelSpectrogram、LogMelSpectrogram 与 MFCC 的实现与人工智能语音音频NLP媒体生成上一篇DeepSeek-V3-0324华为昇腾平台上的671B参数大语言模型部署全攻略下一篇hf_mirrors/ai-gitcode/seamless-m4t-v2-large模型压缩与优化在边缘设备上的部署方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Hugo Blox Résumé 模板实战:用 blocks 组装在线简历 landing 页的完整配置指南

Hugo Blox Résumé 模板实战:用 blocks 组装在线简历 landing 页的完整配置指南

静态站点前端开发工具 【免费下载链接】kit 🧱 Describe your site, AI builds it, you own it as Markdown. Snap together Tailwind blocks like Lego — landing pages, blogs, portfolios, docs & more. No AI slop. Free to deploy anywhere 👇…

2026/9/25 8:53:13 阅读更多 →
有名的奢侈品名表回收品牌企业、服务不错的奢侈品名表回收企业、有名的奢侈品名表回收专业公司用户力荐

有名的奢侈品名表回收品牌企业、服务不错的奢侈品名表回收企业、有名的奢侈品名表回收专业公司用户力荐

有名专业的奢侈品名表回收,靠谱连锁品牌更安心很多想要出手闲置奢侈品名表的用户,都希望找到透明靠谱的专业平台,东莞市好岱贸易有限公司旗下品牌好岱中古汇,是一家深耕二手奢侈品回收行业的全国连锁直营平台,始终坚持…

2026/9/25 8:53:12 阅读更多 →
Sinon sandbox.replace() 完全指南:安全替换对象属性并自动还原

Sinon sandbox.replace() 完全指南:安全替换对象属性并自动还原

测试开发工具 【免费下载链接】sinon Test spies, stubs and mocks for JavaScript. 项目地址: https://gitcode.com/gh_mirrors/si/sinon 点击查看 免费下载 Sinon 的 sandbox.replace() 用于在测试中临时替换对象上的任意属性(方法、字符串、数值乃至…

2026/9/25 8:53:12 阅读更多 →

最新新闻

VMware虚拟机USB直通实战:笔记本摄像头连接与排错指南

VMware虚拟机USB直通实战:笔记本摄像头连接与排错指南

1. 为什么要在虚拟机里折腾摄像头把笔记本摄像头直通给 VMware 虚拟机,这个需求听起来小众,实际踩坑的人非常多。我最早碰到这个场景,是要在虚拟机里跑一个视频采集的测试程序,宿主机是 Windows,虚拟机里装的是 Ubuntu…

2026/9/25 10:08:01 阅读更多 →
Sunshine+Moonlight自托管串流:从搭建到调优的完整指南

Sunshine+Moonlight自托管串流:从搭建到调优的完整指南

1. 为什么我最终选择了 Sunshine 加 Moonlight 这套自托管串流方案1.1 从被串流软件折腾到自建主机的心路历程最早接触游戏串流,我用的是显卡厂商自带的那套方案。刚开始确实省心,装完驱动、打开开关、客户端扫码就能连上,延迟也还能接受。但…

2026/9/25 10:08:01 阅读更多 →
Atlas 300V 24G推理加速卡解析:从AI加速原理到YOLO部署实战

Atlas 300V 24G推理加速卡解析:从AI加速原理到YOLO部署实战

“Atlas 300V 24G到底算不算运算加速卡?”这个问题我最近被问了很多次。起因不外乎是两类人:一类是手里正好有这台卡,想拿来跑YOLO做目标检测,却不太确定这东西和常见的NVIDIA GPU有什么区别;另一类是看各种国产化方案…

2026/9/25 10:08:01 阅读更多 →
数据中心机房设计方案:从需求调研到CFD仿真验证的完整工程指南

数据中心机房设计方案:从需求调研到CFD仿真验证的完整工程指南

简介:面向数据中心机房建设或改造项目的设计方案文档,适合机房设计人员、弱电工程师、项目经理及运维管理者参考,可用于前期方案汇报、图纸配套说明及标书编写。文档以B级机房标准为基础,覆盖装饰装修、供配电(UPS&…

2026/9/25 10:08:01 阅读更多 →
油猴脚本开发实战:快速刷课防暂停与倍速播放技术解析

油猴脚本开发实战:快速刷课防暂停与倍速播放技术解析

1. 从“刷课”这件事说起:为什么需要防暂停但凡上过网课的人都懂那种感觉:视频播到一半,切出去回个消息,回来发现进度条停了,计时也断了。尤其是那种需要累计观看时长的课程,页面一旦失去焦点或者鼠标长时间…

2026/9/25 10:08:01 阅读更多 →
OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

1. 从"treg"这个标题说起:一个被低估的CLI工具链整合思路第一次看到"treg"这个标题,我脑子里蹦出来的第一反应是"这又是什么缩写"。翻了一圈热词列表,OpenRouter、agent、CLI、MCP这几个词反复出现&#xff0c…

2026/9/25 10:07:01 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →