介绍
这篇文章基本上就像是给我自己的备忘录,其中包含一些模糊的部分。如果您指出了错误的部分,将会很有帮助。 (要温柔)
由于网上关于如何使用Librosa以及如何通过Python提取语音功能的信息很少,并且只有困难的文章,因此我会做很多说明。
基本上,我们将描述用于机器学习的语音功能。
(2019/8/20)我只发布了我学过的东西,我会一点一点地更新它。
(2019/8/22)已针对MFCC更新。
(2019/8/23)我写了有关ZCR的文章。
功能介绍
1.MFCC
与MFCC
相遇
一种广泛用于语音识别的功能,它是大多数语音中机器学习的典型功能,因此已在大多数基于语音的机器学习中使用。据说使用该特征量具有能够在弱的机器上进行机器学习的味道。
我再给你一点鲜味。
可以很好地反映人声道特征(人的声音和听力机制)的特征
?通过使用此功能量,可以在不使用非常大的语音原始数据(波形数据)的情况下实现高精度的语音识别。
但是,似乎使用对数旋光光谱已成为主流。
log-Melspectrum将在本文中涉及,但是如果您想深入了解原因,那么阅读此档案文件会更快。
音频处理深度学习
什么是MFCC?
就是这样。由于某些原因,在各个站点上只有很少的页面仅通过实现它来仔细解释它代表什么。要了解这一点,
找出倒频谱分析似乎为时过早。请查看链接以获取详细信息。
MFCC考虑到了对人类低音敏感和对高音沉闷的特征,
它是声音的频谱包络(频谱的轻微和细微变化)和频谱的精细结构(频谱的细微变化)的分离。简而言之,它是一种通过将长期变化与短期变化分开来查看人的声音变化的计算方法。
什么是"频谱"?对于那些说的人,最好通过傅立叶变换来搜索或捕捉书籍。
了解MFCC
关于数学理解,这似乎有点吓人,因此我将其留给其他地点,但在这里我想粗略地概述提取过程。制作MFCC备忘时,引用的站点将放置在MFCC的末尾。
通过执行这五个过程,可以从语音中提取MFCC。
我想提到一个站点,该站点使用代码(!)使用数字友好地解释了这些特定过程。
梅尔频率倒谱系数-人工智能的突破
如果您担心一些详细的理论并且想从数学上理解,请参考这里。
通过倒谱分析和主成分分析进行语音情感分析,-Yuki Shoko,Ando Toshihiko
Python实现
它没有实现那么大,但是这次我们将使用名为Librosa的包提取MFCC。
MFCC.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import librosa import scipy y,sr = scipy.io.wavefile.read("audiofile.wav") #これで音声の波形データとsr(サンプリングレート)を取り込む mfcc_feature = librosa.feature.mfcc(y=y,sr=sr,n_mfcc=13) #y->波形データ,sr ->サンプリングレート,n_mfcc->最後の低次元抽出で何次元とるか(今回は、13次元分取っています。) print(mfcc.shape) #numpyで返ってきます。形は(分割したフレームの数,低次元抽出の数) #ここからちょっと応用でもない応用 mfcc_feature2 = librosa.feature.mfcc(y=y,sr=sr,n_mfcc=13,hop_length=hop_length,win_length=win_length) #こんな感じに分割の仕方も指定できたりします。hop_lengthは窓をどれぐらい動かすか。win_lengthは、窓の大きさ。 |
如果您是英语大师,则阅读Librosa文档可能会更快。请报告是否无效。治愈
2.对数频谱图
遇到对数质谱图
实际上,当我四处游荡以尝试查看MFCC时,我偶然发现了它。齐塔先生。我将发布触发它的文章的链接。
MFCC -Qiita简介
它用于Google的TTS(文本到语音),并且在机器学习中似乎比MFCC更流行。据说,与处理原始语音数据相比,该产品可以以低成本提供良好的准确性。
对于只有Google Colab作为机器学习环境的贫困学生来说是个好消息。我想要一台具有GPU的体面的PC ...
单击此处以获取参考文件
音频信号处理的深度学习
什么是对数频谱图
这是不具有离散余弦变换的MFCC版本。
这很不友好,以防万一
考虑人类听觉特征(梅尔滤波器组)对振幅谱的适应(相对于角频率的体积)。通过取此的对数获得。
了解对数频谱图
这是一个粗略的提取过程。
1.重点过滤器增强高音
2.应用窗函数后,通过FFT查找振幅谱
3.调整梅尔滤清器组。
看起来像这样。
您可以看到它是在MFCC的计算过程中获得的。
Python实现
这次,我们将使用Librosa提取特征。
日志文件
1 2 3 4 5 6 7 8 | import librosa import scipy y,sr = scipy.io.wavefile.read("audiofile.wav") librosa.feature.melspectrogram(y=y, sr=sr,hop_length=hop_lemgth, win_length=win_length ) #パラメーターの意味はMFCCと一緒 #(フレーム分割数,時間)で返ってきます。 |
3.谐波噪声比
遇到HNR
在Microsoft的一项有关通过人声估计情绪的研究论文中,它被称为有效功能。我很烦恼,因为找不到日文文章。不是那么重要吗?
什么是HNR?
这是一个有效识别人声的特征量,似乎指示了泛音与噪声的比率。
在这种情况下,噪声是在声带闭合不对称时引起的杂音。这是一种可怕的蹲下的声音。换句话说,HNR越低,声音越清晰。
您可以在本论文的摘要中阅读更多有关它的内容。似乎确定爆发的年龄比抖动的特征量更容易。
如果您对英语更有信心,这可能会有所帮助。 (https://www.bartleby.com/essay/Compare-Jitter-Shimmer-and-Harmonics-to-Noise-P3CDRT2KVJ)
数学理解
1 2 | HNR = 10log \frac{ACF\tau_0(m)}{ACF(0)-ACF(\tau_0(m)} |
引用自https://www.isca-speech.org/archive/archive_papers/interspeech_2014/i14_0223.pdf
在本文中,对音频进行陷害然后进行计算。 m是第m帧。
ACF是自相关函数,τ是基音周期。 (音高?因为我想测量语音的HNR)
这样,就可以为每个帧计算HNR,并将其用于机器学习。
我认为维基百科文章对理解自相关函数很有帮助。
Python实现
在这里,编写一个Python程序,该程序在帧处理后计算HNR。我将在另一篇文章中讨论帧处理。我还将在本文的另一部分中介绍Pitch。
该库将numpy导入并处理为np。
HNR.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import numpy as np def _acf(x): x = x-np.mean(x) correlation = np.correlate(x,x,mode='ful')/np.sum(x**2) return correlation[int(len(correlation)/2):] def HNR(x,pitch): acf = _autocorrelation(x) t0 = acf[0] t1 = acf[pitch] return 10*np.log(np.abs(t1/(t0-t1))) #https://github.com/eesungkim/Speech_Emotion_Recognition_DNN-ELM より引用 |
4.过零率
零交叉率遭遇
有一篇论文试图使用ZCR识别音乐流派。音乐相似度计算模型及其在音乐信息检索中的应用
ZCR还用于赢得2005音乐流派竞赛的技术中。
ZCR的简称是
ZCR允许您测量噪声。
如果为死亡金属提取特征量,则ZCR似乎很高。
这个站点似乎非常有帮助。在撰写本文时,我将其用作参考。感谢您。
零交叉率-江田洋基
了解ZCR
[1] Dipl.-Ing等人-音乐相似度计算模型及其在音乐信息检索中的应用
顾名思义,ZCR表示当垂直轴为振幅而水平轴为时间时波形与水平轴交叉的平均时间。
图1中的红色部分是过零的部分。通过在任意时间对ZCR进行除法并计算其中的平均频率来完成ZCR。
如果是这种情况,看来您可以自己实现Python,因此,如果您负担得起(我这次也将使用Librosa)
在这一点上,我想您会理解,如果您有敏锐的了解,则频率越高,ZCR越高。期望作为其他功能的支持者,而不仅限于此。
Python实现
ZCR.py
1 2 3 4 5 | y,sr = scipy.io.wavefile.read("audiofile.wav") librosa.feature.zero_crossing_rate(y=y, frame_length=2048, hop_length=512, center=True) #y ->波形 ,frame_length ->切り取るフレームのサイズ hop_length ->フレームを切り取る窓をどれだけ動かすのか,center ->端を0でパディングするのかどうか。 #numpyの(1,フレーム数)の形で返ってきます。 |