python: audioFlux XXCC 提取梅尔频率倒谱系数 MFCC

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

承上一篇:python:audioFlux 使用教程

XXCC: 倒谱系数,支持所有频谱类型. 可以提取梅尔频率倒谱系数(MFCC)
    Cepstrum coefficients, supports all spectrum types.

以下是使用 audioflux 库中 XXCC 类计算倒谱系数(如 MFCC)的示例代码

代码说明:

  1. 音频读取:使用 af.utils.sample_path('220') 获取一个 220Hz 的音频文件路径,然后使用 af.read 函数读取音频数据和采样率。
  2. 频谱图提取:创建 BFT 对象,设置参数并调用 bft 方法提取 mel 频谱图,最后取绝对值得到幅度谱。
  3. MFCC 提取:创建 XXCC 对象,设置时间长度,然后调用 xxcc 方法提取 MFCC 特征。
  4. 可视化:使用 fill_spec 函数将 MFCC 特征可视化,并添加颜色条。

编写示例 audio_xxcc.py  如下

# -*- coding: utf-8 -*-
""" XXCC: 倒谱系数,支持所有频谱类型. 提取梅尔频率倒谱系数(MFCC)
    Cepstrum coefficients, supports all spectrum types.
"""
import audioflux as af
import numpy as np
import matplotlib.pyplot as plt
from audioflux.type import SpectralFilterBankScaleType, SpectralDataType, CepstralRectifyType
from audioflux.display import fill_spec

# 获取一个 220Hz 的音频文件
sample_path = af.utils.sample_path('220')
print(sample_path)
# 读取音频文件
audio_arr, sr = af.read(sample_path)

# 创建 BFT 对象并提取 mel 梅尔频谱
num = 128
bft_obj = af.BFT(
    num=num,
    radix2_exp=12,
    samplate=sr,
    scale_type=SpectralFilterBankScaleType.MEL, # 梅尔刻度
    data_type=SpectralDataType.POWER # 使用功率谱
)
spec_arr = bft_obj.bft(audio_arr)
spec_arr = np.abs(spec_arr) # 取绝对值,确保数据为实数

# 初始化 XXCC对象
xxcc_obj = af.XXCC(num=bft_obj.num)
# 设置时间长度
xxcc_obj.set_time_length(time_length=spec_arr.shape[1])

# 提取 XXCC 特征
cc_num = 13 # 提取的XXCC系数数量
mfcc_arr = xxcc_obj.xxcc(spec_arr, cc_num=13, rectify_type=CepstralRectifyType.LOG)

# 可视化
audio_len = audio_arr.shape[0]
x_coords = bft_obj.x_coords(audio_len)
fig, ax = plt.subplots(figsize=(10, 6))
img = fill_spec(
    mfcc_arr,
    axes=ax,
    x_coords=x_coords,
    x_axis='time',
    title='MFCC via XXCC'
)
fig.colorbar(img, ax=ax)
plt.show()

 关键说明

  1. BFT 类的作用:
    用于生成梅尔频谱(Mel Spectrogram),作为 XXCC 的输入。参数 radix2_exp=12 表示 FFT 窗口大小为 2^12=4096。

  2. XXCC 参数配置:

    • num 必须与 BFT 的 num 一致(梅尔滤波器数量)。

    • 必须调用 set_time_length 设置时间维度长度(对应频谱的帧数)。

  3. 输出维度:
    mfcc_arr 的维度为 (cc_num, time),与标准 MFCC 一致。

  4. 扩展功能:
    使用 xxcc_standard 方法可提取带能量项和一阶/二阶差分的 MFCC:

energy_arr = np.sum(spec_arr, axis=0)  # 计算频谱能量
coe_arr, delta1, delta2 = xxcc_obj.xxcc_standard(
    spec_arr,
    energy_arr,
    cc_num=13,
    delta_window_length=9
)

常见问题

  • 输入数据类型:频谱需为实数(np.abs 处理后的功率谱或幅度谱)。

  • 多通道支持:若音频为多通道,需分别处理每个通道的频谱。

  • 参数调优:调整 cc_num 可控制系数数量(如 20 或 40 维 MFCC)。


以下是使用 audioflux 库的 XXCC 类计算 MFCC + 一阶差分(Delta) + 二阶差分(Delta-Delta) 并可视化绘图的完整示例:

# -*- coding: utf-8 -*-
""" XXCC: 倒谱系数,支持所有频谱类型. 提取梅尔频率倒谱系数(MFCC)
    Cepstrum coefficients, supports all spectrum types.
  计算 MFCC + 一阶差分(Delta)+ 二阶差分(Delta-Delta)并可视化绘图的示例
"""
import audioflux as af
import numpy as np
import matplotlib.pyplot as plt
from audioflux.type import CepstralEnergyType, CepstralRectifyType
from audioflux.type import SpectralFilterBankScaleType, SpectralDataType
from audioflux.display import fill_spec

# 读取音频
sample_path = af.utils.sample_path('220')
audio_arr, sr = af.read(sample_path)
print('sample_rate:', sr)

# 生成梅尔频谱
num = 128  # Mel滤波器数量
bft_obj = af.BFT(
    num=num,
    radix2_exp=12, # FFT窗口大小:2^12=4096
    samplate=sr,
    scale_type=SpectralFilterBankScaleType.MEL,
    data_type= SpectralDataType.POWER
)
spec_arr = bft_obj.bft(audio_arr)  # 计算频谱
spec_arr = np.abs(spec_arr)        # 转换为幅度谱

# 计算能量(每个时间帧的频谱能量总和)
energy_arr = np.sum(spec_arr, axis=0)  # shape=(time_frames,)

# 初始化XXCC对象
xxcc_obj = af.XXCC(num=bft_obj.num)
xxcc_obj.set_time_length(time_length=spec_arr.shape[1]) # 设置时间维度长度

# 计算MFCC及其一阶、二阶差分
cc_num = 13
delta_window_length = 9  # 必须为奇数且>=3
coe_arr, delta1_arr, delta2_arr = xxcc_obj.xxcc_standard(
    m_data_arr=spec_arr,
    energy_arr=energy_arr,
    cc_num=cc_num,
    delta_window_length=delta_window_length,
    energy_type= CepstralEnergyType.REPLACE,  # 用能量替换第0阶系数
    rectify_type=CepstralRectifyType.LOG
)

# 生成时间轴坐标
audio_len = audio_arr.shape[0]
x_coords = bft_obj.x_coords(audio_len)

# 可视化:绘制MFCC、Delta、Delta-Delta
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 10), sharex=True)

# 绘制MFCC
img1 = fill_spec(
    coe_arr,
    axes=ax1,
    x_coords=x_coords,
    x_axis='time',
    title='MFCC Coefficients (with Energy)'
)
fig.colorbar(img1, ax=ax1, label='Amplitude')

# 绘制一阶差分(Delta)
img2 = fill_spec(
    delta1_arr,
    axes=ax2,
    x_coords=x_coords,
    x_axis='time',
    title='Delta (1st derivative)'
)
fig.colorbar(img2, ax=ax2, label='Amplitude')

# 绘制二阶差分(Delta-Delta)
img3 = fill_spec(
    delta2_arr,
    axes=ax3,
    x_coords=x_coords,
    x_axis='time',
    title='Delta-Delta (2nd derivative)'
)
fig.colorbar(img3, ax=ax3, label='Amplitude')

plt.tight_layout()
plt.show()

关键代码解释

1. 能量计算
energy_arr = np.sum(spec_arr, axis=0)
  • 计算每个时间帧的频谱总能量,作为 xxcc_standard 的输入参数。

  • spec_arr 的维度为 (num_mel_bins, time_frames),沿 axis=0 求和得到 (time_frames,)。

2. 调用 xxcc_standard 方法
  • energy_type=REPLACE:用能量值替换 MFCC 的第0阶系数(类似Librosa的默认行为)。

  • delta_window_length=9:控制差分计算的窗口大小(必须为奇数,通常用9或5)。

3. 可视化布局

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 10), sharex=True)

  • 使用3个子图垂直排列,共享X轴(时间轴),便于对比观察时域变化。

输出效果

  • MFCC Coefficients:包含能量项的基本MFCC系数。

  • Delta:一阶差分,反映MFCC系数在时间上的变化率。

  • Delta-Delta:二阶差分,反映变化率的变化(加速度信息)。


 

参数调优建议

  1. Delta窗口大小 (delta_window_length):

    • 较大的窗口(如9)平滑噪声但降低时间分辨率。

    • 较小的窗口(如5)保留细节但对噪声敏感。

  2. 能量处理方式 (energy_type):

    • REPLACE:用能量替换第0阶系数(兼容传统MFCC)。

    • APPEND:将能量作为额外的一维追加到MFCC末尾。

  3. Mel滤波器数量 (num=128):

    • 增加数量可提高频率分辨率,但可能引入冗余。

通过此示例,你可以直接提取完整的MFCC动态特征(静态系数+动态差分),适用于语音识别、音乐分类等任务。 

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

【四旋翼】pixhawk2.4.8-地面站配置-APM固件-四旋翼从装机到试飞

因为MP版本和APM版本的适配问题,真的真的是很大一个坑。最好先走别人走过的路,走通了再去自由发挥,不然白白浪费时间。下面提供我试飞成功过的版本。下面提供任意版本固件和地面站的下载方法。

xifan的博客 3万+

认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)

音频梅尔谱图的小实验 提取梅尔谱图 显示梅尔谱图 1、没有转化为对数谱时 以梅尔标度显示频率 以梅尔标度显示频率 节奏(待续),还没搞太明白

qq_44250700的博客 1835

双目相机立体匹配算法概述(含Python代码)

立体匹配任务是计算机视觉中的一个重要问题,旨在从一对具有相同场景的图像中估计每个像素的视差(disparity)。本文对现有的传统算法和深度学习算法进行了综述,以便于各位选择合适的立体匹配算法用于深度估计或三维建模。

m0_59257547的博客 8291

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 408

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 499

Allegro File菜单实战指南:从导入网表到导出BOM的完整流程

PCB设计离不开对EDA软件菜单体系的深入理解。在Cadence Allegro中,File菜单是数据流转的中枢,它不仅是新建、打开、保存的基础入口,更是连接原理图与版图、设计与制造的关键桥梁。工程师常遇到的“导入网表报错”“导出BOM为空”“板框不闭合”等高频问题,大多源于对File菜单中Import与Export功能的理解不到位。从基础概念出发,先厘清Import(网表、DXF、IPC)与Export(BOM、ODB++、DXF)的工作原理,再结合版本兼容、封装库路径、单位设置等工程细节,即可构建完整的

weixin_32950759的博客 296

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

PaddleOCR多进程GPU推理实战:200万图片高效处理方案

本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。

prometheus9mon的博客 261

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

CCP消息格式

CCP消息格式 CCP协议的实现只依赖于两则CAN消息CRO(Command Receive Object)和DTO(Data Transmission Object),CCP消息统一采用8字节数据场,所有命令参数以及数据都被打包在8字节的数据场中。 1、CRO(命令接收对象) CRO是主设备向从设备发送的消息对象,包括命令代码及命令参数,结构如下: CCP一共28条命令,所以命令代码有28个。...

wsq119的博客 1206

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 670

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 208

用 SemanticObject 把字段变成可点击链接:Fiori Elements Navigation Using a Link 的工程化实践

SAP Fiori elements 通过 Common.SemanticObject 注解可将字段转为可点击链接,实现应用间跳转。当源字段名与目标属性名不一致时,需使用 Common.SemanticObjectMapping 进行映射。该功能依赖 Fiori Launchpad 的目标映射配置,确保正确解析 semantic object + action 并传递参数。常见误区包括未配置目标映射或字段映射错误,需逐一检查语义标注、intent 解析和参数传递链路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 159

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 268

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 139

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 138

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 186

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 223

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 232

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 473

利用python中matplotlib.pyplot库绘制图

plt.plot(x,y) # x,y是每个点的坐标,plot()把每个点按顺序画折线。plt.subplots(2,2)表示绘制2*2的子图布局,axs[0,0]表示在第0行第0列绘制子图...coordinates_i[:,0]表示获取每一行(每一个spot)的第0列(x坐标)coordinates_i[:,1]表示获取每一行(每一个spot)的第0列(y坐标)plot.subplot(2,2,1) 表示子图布局是2*2的,开始绘制第一个。也可以导入数据绘制。可以设置color属性,设置颜色。

qq_46147236的博客 102

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 456

【每天一个 Python 小案例29】Python 实现商品购物车

本篇实现一个购物车:商品目录、加入商品、修改数量、移除商品、查看小计、计算满减与 VIP 折扣、结算扣库存。核心设计是"目录与购物车分离"——目录存商品主数据,购物车只存 {商品编号: 数量};金额一律用 Decimal 并做 ROUND_HALF_UP 舍入。折扣部分讲清阶梯满减的匹配顺序(阈值从高到低、命中即停)与叠加顺序(先满减、后打折),并用一次完整结算演示 706 元如何变成 613.70 元。

xinjiyaya的博客 214

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 378
上一篇: python:audioFlux 使用教程
下一篇: music21:伍佰 《泪桥》MIDI 音乐分析
belldeep
博客等级 码龄20年 1820粉丝 584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值