音频特征提取_音频的特征提取-程序员宅基地

技术标签: 音视频  人工智能  语音识别  

1 常用的算法

https://www.kaggle.com/competitions/birdsong-recognition/discussion/172573

  • MFCC (Mel-Frequency Cepstral Coefficients)
  • Zero-crossing rate
  • Energy
  • Spectral roll-off
  • Spectral flux
  • Spectral entropy
  • Chroma features (chromatogram), with Chroma vector and Chroma deviation considered to be the most important ones within this group
  • Pitch

1.1 MFCC

MFCC算法(Mel Frequency Cepstral Coefficients,梅尔频率倒谱系数)是一种广泛应用于语音和音频处理领域的特征提取方法。它主要用于提取音频信号的特征,以便在诸如语音识别、音乐信息检索和音频分类等任务中使用。

MFCC算法的基本步骤如下:

  • 预加重:对输入的音频信号进行预加重,以平衡频谱并强调高频部分。
  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 窗函数:对每个帧应用窗函数(如汉明窗),以减少帧边缘的频谱泄漏。
  • 快速傅里叶变换(FFT):对每个帧进行FFT,以将信号从时域转换到频域。
  • 梅尔滤波器组:将频谱通过梅尔滤波器组(Mel Filter Bank),以模拟人耳对频率的感知。梅尔滤波器组通常包含20-40个三角滤波器,它们在梅尔刻度上均匀分布。
  • 对数能量:计算每个滤波器输出的对数能量。
  • 离散余弦变换(DCT):对对数能量进行DCT,以提取倒谱系数。通常只保留前12-13个系数,因为它们包含了信号的主要信息。

这些步骤的结果是一组MFCC特征,它们可以用于训练

1.2 Zero-Crossing rate

Zero-crossing rate(零交叉率)是一种用于音频信号处理的特征提取方法。它表示在一个音频帧中,信号从正值变为负值或从负值变为正值的次数。零交叉率可以用于识别语音和音乐信号中的不同声音,例如辅音和元音,以及不同乐器的音色。

零交叉率算法的基本步骤如下:

  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 计算零交叉率:对于每个帧,计算信号从正值变为负值或从负值变为正值的次数。可以通过检查相邻样本的符号变化来实现。

这个函数接受一个音频帧(例如NumPy数组)作为输入,并返回该帧的零交叉率。你可以将这个函数应用到音频信号的所有帧上,以提取零交叉率特征。这些特征可以用于音频分类、语音识别等任务。

1.3 Energy 音频算法

Energy(能量)是音频信号处理中的另一种特征提取方法。它表示音频信号的振幅大小,可以用于识别信号中的不同声音,例如辅音和元音,以及不同乐器的音色。能量特征通常与其他特征(如MFCC和零交叉率)结合使用,以提高音频处理任务的性能。

计算音频能量的基本步骤如下:

  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 计算能量:对于每个帧,计算信号的平方和,然后取平均值。这表示了信号在该帧中的能量大小。

1.4 Spectral roll-off(谱滚降点)

Spectral roll-off(谱滚降点)是音频信号处理中的一种特征提取方法。它表示音频信号频谱中的一个特定点,该点之前的频率成分累积到了总能量的一定比例(通常为85%或90%)。谱滚降点可以用于识别音频信号中的不同声音,例如不同乐器的音色。谱滚降点特征通常与其他特征(如MFCC、零交叉率和能量)结合使用,以提高音频处理任务的性能。

计算音频谱滚降点的基本步骤如下:

分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
快速傅里叶变换(FFT):对每个帧进行FFT,以将信号从时域转换到频域。
计算谱滚降点:对于每个帧,找到一个频率点,使得该点之前的频率成分累积到了总能量的一定比例(例如85%或90%)。

1.5 Spectral flux(谱通量)

Spectral flux(谱通量)是音频信号处理中的一种特征提取方法。它表示音频信号频谱的变化程度,可以用于检测音频中的事件,例如音符的开始和结束。谱通量特征通常与其他特征(如MFCC、零交叉率、能量和谱滚降点)结合使用,以提高音频处理任务的性能。

计算音频谱通量的基本步骤如下:

  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 快速傅里叶变换(FFT):对每个帧进行FFT,以将信号从时域转换到频域。
  • 计算谱通量:对于每对相邻帧,计算它们的频谱差值的平方和,然后取平均值。这表示了信号在这两帧之间的频谱变化程度。

1.6 Spectral entropy(谱熵)

Spectral entropy(谱熵)是音频信号处理中的一种特征提取方法。它表示音频信号频谱的复杂程度或不确定性,可以用于识别音频中的不同声音,例如不同乐器的音色。谱熵特征通常与其他特征(如MFCC、零交叉率、能量、谱滚降点和谱通量)结合使用,以提高音频处理任务的性能。

计算音频谱熵的基本步骤如下:

  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 快速傅里叶变换(FFT):对每个帧进行FFT,以将信号从时域转换到频域。
  • 计算谱熵:对于每个帧,计算频谱的归一化能量分布,然后使用香农熵公式计算谱熵。

Chroma features(色度特征)

Chroma features(色度特征)是音频信号处理中的一种特征提取方法。它表示音频信号中的音高信息,可以用于识别音乐中的和声、旋律和音调。色度特征通常与其他特征(如MFCC、零交叉率、能量、谱滚降点、谱通量和谱熵)结合使用,以提高音频处理任务的性能。

计算音频色度特征的基本步骤如下:

分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
快速傅里叶变换(FFT):对每个帧进行FFT,以将信号从时域转换到频域。
计算色度特征:将频谱映射到12个色度区间(代表12个半音),然后计算每个区间的能量。

1.7 Pitch

Pitch(音高)是音频信号处理中的一个重要概念,它表示音频信号中的基频。音高分析可以用于识别音乐中的旋律、和声和音调,以及语音信号中的说话者特征。有多种算法可以用于计算音频信号的音高,其中最常用的是自相关法(ACF)和基于频域的YIN算法。

自相关法(ACF):自相关法通过计算音频信号与其自身的延迟版本之间的相似度来估计音高。基本步骤如下:

  • 分帧:将音频信号分成短时帧,通常每帧的长度为20-30ms,帧与帧之间有一定的重叠。
  • 计算自相关:对于每个帧,计算信号与其延迟版本之间的自相关函数。
  • 寻找最大值:在自相关函数中找到第一个局部最大值,其对应的延迟即为基频周期。
  • 计算音高:将基频周期转换为音高(单位:赫兹)。

2. Wav2Vec和Wav2Vec2

对于音频任务, Hugging Face 提供了使用 Wav2Vec2 模型, Wav2Vec2 是一个基于自监督学习的音频特征提取器,可以从原始音频信号中提取有意义的特征。

Wav2Vec 是一种用于音频数据的自监督学习算法,主要用于从原始音频信号中提取有意义的特征表示。它是由 Facebook AI Research (FAIR) 开发的,旨在解决语音识别、音频分类等任务。Wav2Vec 的核心思想是通过学习音频数据的上下文结构来捕捉音频中的信息。

Wav2Vec 算法分为两个主要阶段:

  • 预训练阶段:在这个阶段,Wav2Vec 通过自监督学习在大量无标签音频数据上进行训练。它使用一个卷积神经网络 (CNN) 编码器将原始音频波形转换为潜在特征表示。然后,它使用一个上下文网络(如 Transformer 或 LSTM)来捕捉这些特征表示中的上下文信息。通过最大化相邻特征之间的互信息,Wav2Vec 学习了音频数据的丰富表示。

  • 微调阶段:在这个阶段,Wav2Vec 使用有标签数据进行微调,以解决特定的音频任务,如语音识别或音频分类。通常,这涉及在预训练的 Wav2Vec 模型上添加一个分类器,并使用有标签数据进行端到端训练。

Wav2Vec 的优势在于它能够从原始音频信号中学习有意义的特征表示,而无需手动设计特征提取器(如 MFCC 或 STFT)。这使得 Wav2Vec 能够在各种音频任务中取得优异的性能。

Wav2Vec 的后续版本,如 Wav2Vec 2.0,进一步改进了算法,提高了在音频任务上的性能。Wav2Vec 2.0 采用了类似 BERT 的自监督训练方法,通过掩码和预测音频片段来学习音频表示。这种方法使得 Wav2Vec 2.0 在许多音频任务上取得了更好的性能,包括自动语音识别 (ASR) 和音频分类。

要使用 Wav2Vec 或 Wav2Vec 2.0 提取音频特征并解决音频任务,您可以使用 Hugging Face Transformers 库。这个库提供了预训练的 Wav2Vec 和 Wav2Vec 2.0 模型,可以方便地进行微调和特征提取。

总之,Wav2Vec 算法为音频任务提供了一种强大的特征提取方法,通过自监督学习从原始音频信号中学习有意义的表示。这使得 Wav2Vec 可以在各种音频任务中取得优异的性能,如语音识别、音频分类等。

from transformers import Wav2Vec2FeatureExtractor, Wav2Vec2Model
import torchaudio
import torch

# Load the pre-trained Wav2Vec2 model
model = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-base-960h")
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("facebook/wav2vec2-base-960h")

# Load an audio file
audio, sample_rate = torchaudio.load("path/to/your/audio/file.wav")

# Resample the audio to 16kHz
if sample_rate != 16000:
    resampler = torchaudio.transforms.Resample(sample_rate, 16000)
    audio = resampler(audio)

# Extract features using the feature_extractor
input_values = feature_extractor(audio.squeeze().numpy(), return_tensors="pt", sampling_rate=16000).input_values

# Get the embeddings from the model
with torch.no_grad():
    embeddings = model(input_values).last_hidden_state

# embeddings now contains the extracted features

这里,embeddings 变量包含了从音频文件中提取的特征。您可以使用这些特征来训练您自己的分类器或其他下游任务。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30129009/article/details/129624036

智能推荐

java计算机毕业设计旅游管理系统MyBatis+系统+LW文档+源码+调试部署-程序员宅基地

文章浏览阅读135次。java计算机毕业设计旅游管理系统MyBatis+系统+LW文档+源码+调试部署。springboot基于springboot的音乐网站管理系统。springboot基于Java的图书借阅管理系统设计与实现。springboot基于springBoot仓库管理系统。jsp基于Web的鲜花采购及预定系统的设计与实现ssh。ssm基于Java智能选课系统的设计与实现。

vue展示日历 考勤展示_O2OA办公平台内置应用介绍篇:考勤管理-程序员宅基地

文章浏览阅读905次。考勤管理点击组件-考勤管理,即可打开考勤管理系统。我的考勤月报打开考勤管理系统后,会展示我的考勤月报,您可以查看当月的考勤,如下图:考勤日历:以日历的形式展现当月的考勤结果,并以不同的颜色表示出勤状态。考勤汇总:用饼图展现考勤状态(出勤、请假、迟到、缺勤、申诉、工时不足)在本月所占的比例。上下班走势图:提供上班时间和下班时间的走势信息数据,用折线图展现上下班时间的趋势。右边可以查看排班时间表。我的..._vue考勤报表显示上下班

谈一谈自己对BFC的理解-程序员宅基地

文章浏览阅读272次。一、BFC概念BFC全名为块级格式化上下文,它是一个独立的渲染区域,其内部的盒子如何布局只遵循块级格式化上下文的规则,不受外部元素的干扰二、如何定义BFC当前元素的float属性不为none 当前元素的position属性不为static和relative 当前元素的overflow属性不为visible 当前元素的display属性是inline-block、table-cell、flex、table-caption和inline-flex三、BFC的布局规则每个盒子都占一行,在垂

Ubuntu 12.04 the system is running in low-graphics mode_the system is running in low-graphice mod-程序员宅基地

文章浏览阅读3.1w次。UbuntuCommunityAsk!DeveloperDesignHardwareShopMore ›Stack Exchangesign up log in Ask UbuntuQuestionsTagsTourUsers_the system is running in low-graphice mod

selenium——unittest框架_selenium unittest框架-程序员宅基地

文章浏览阅读1.2k次。一、unittest框架基本介绍二、unittest框架解析三、unittest框架使用方法1.测试固件2.测试套件3.用例的执行顺序4.忽略测试用例中的方法5.unittest断言6.HTML报告生成_selenium unittest框架

国产免费数据库建模工具EZDML3.24发布 支持生成和预览vue文件_vue 数据模型软件-程序员宅基地

文章浏览阅读2.3k次。国产免费数据建模和代码生成工具,新版增加了生成vue的JS脚本模板,默认采用ElementUI作为template界面_vue 数据模型软件

随便推点

Apache孵化器主席Justin Mclean:如何成为Apache顶级开源项目_apache基金会项目申请-程序员宅基地

文章浏览阅读761次。摘要: 近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来..._apache基金会项目申请

遇到BASE64的图片字符串应该如何转换成图片呢_go语言把base64转换成图片格式-程序员宅基地

文章浏览阅读1.3k次。遇到BASE64的图片字符串应该如何转换成图片呢base64.b64decode(data)_go语言把base64转换成图片格式

(转)基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出...-程序员宅基地

文章浏览阅读166次。http://www.cnblogs.com/wuhuacong/p/3873498.html数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章《Winform开发框架之通用数据导入导出操作》介绍了在Winform里面的通用导入导出模块的设计和开发过程,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+Eas...

14.JS语句和注释,变量和数据类型-程序员宅基地

文章浏览阅读112次。1.JavaScript 语句(1)语句的作用(2)语句标识符2.代码和代码块儿(1)代码(2)代码块3.分号、空格和拆行(1)分号(2)空格(3)拆行4.单行注释和多行注释5.JS变量6.创建变量7.JS 数据类型(1)值类型(基本类型):(2)引用数据类型(对象类型):(3)动态类型8.字符串、数字、布尔、数组和对象等(1)字符串(2)数字(3)布尔(4)数组(5)对象...

C语言ASCLL码_c语言 \ ascll-程序员宅基地

文章浏览阅读2.1k次。C语言ASCLL码表介绍_c语言 \ ascll

Linux那些事儿之我是U盘(37)彼岸花的传说(五)_unsigned soft : 1;-程序员宅基地

文章浏览阅读4.1k次。 燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候;老婆离了,有再找的时候,孩子跑了,有回来的时候;煮熟的鸭子飞了,有飞回来的时候.一个函数没讲完就跳走了,有再回来的时候.其实,那些人,那些事,终究不曾远离.于是,她再一次进入我们的视野. 她就是usb_stor_control_thread().唤醒她的是来自queuecommand的up(&(us->sema)_unsigned soft : 1;

推荐文章

热门文章

相关标签