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

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

承上一篇: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)。


相关文章:

  • day30 第八章 贪心算法 part04
  • 阳台光伏 “WiFi” 电表:开启智慧能源新纪元/出海欧标认证!
  • 2025高频面试算法总结篇【动态规划】
  • Spark-SQL核心编程:DataFrame、DataSet与RDD深度解析
  • leetcode:1351. 统计有序矩阵中的负数(python3解法)
  • SQL学习笔记-聚合查询
  • 16:00开始面试,16:08就出来了,问的问题有点变态。。。
  • 大数据学习栈记——MongoDB编程
  • 【Web三十一】K8S的常用命令
  • 设计模式-模板模式
  • Node.js 模块包的管理和使用是
  • Qt:解决MSVC编译器下qDebug输出中文乱码的问题
  • 中英文提示词对AI IDE编程能力影响有多大?
  • 三层交换机SVI功能(交换机虚拟接口)实现各个实训室电脑网络可互通,原本是独立局域网
  • MATLAB仿真多相滤波抽取与插值的频谱变化(可视化混叠和镜像)
  • TypeScript 进阶指南 - 使用泛型与keyof约束参数
  • spark简介和核心编程
  • spark-sql核心
  • 试一下阿里云新出的mcp服务
  • 鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解
  • “电竞+文旅”释放价值,王者全国大赛带火赛地五一游
  • 印巴战火LIVE丨“快速接近战争状态”?印度袭击巴军事基地,巴启动反制军事行动
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益
  • 玉渊谭天丨一艘航母看中国稀土出口管制为何有效
  • 人民日报整版调查:中小学春秋假,如何放得好推得开?
  • 波音公司计划于2027年交付新版“空军一号”飞机