您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
librosa(librosafeaturemelspectrogram)
数据,特征,音频librosa(librosafeaturemelspectrogram)
发布时间:2019-02-08加入收藏来源:互联网点击:
很多朋友想了解关于librosa的一些资料信息,下面是小编整理的与librosa相关的内容分享给大家,一起来看看吧。
声线年龄层怎么划分?
从EDA、音频预处理到特征工程和数据建模的完整源代码演示
大多数人都熟悉如何在图像、文本或表格数据上运行数据科学项目。但处理音频数据的样例非常的少见。在本文中,将介绍如何在机器学习的帮助下准备、探索和分析音频数据。简而言之:与其他的形式(例如文本或图像)类似我们需要将音频数据转换为机器可识别的格式。
音频数据的有趣之处在于您可以将其视为多种不同的模式:
·可以提取高级特征并分析表格数据等数据。
·可以计算频率图并分析图像数据等数据。
·可以使用时间敏感模型并分析时间序列数据等数据。
·可以使用语音到文本模型并像文本数据一样分析数据。
在本文中,我们将介绍前三种方法。首先看看音频数据的实际样子。
音频数据的格式
虽然有多个Python库可以处理音频数据,但我们推荐使用librosa。让我们加载一个MP3文件并绘制它的内容。
#Importlibrosa
importlibrosa
#Loadsmp3filewithaspecificsamplingrate,here16kHz
y,sr=librosa.load("c4_sample-1.mp3",sr=16_000)
#Plotthesignalstoredin'y'
frommatplotlibimportpyplotasplt
importlibrosa.display
plt.figure(figsize=(12,3))
plt.title("Audiosignalaswaveform")
librosa.display.waveplot(y,sr=sr);
这里看到的是句子的波形表示。
1、波形-信号的时域表示
之前称它为时间序列数据,但现在我们称它为波形?当只看这个音频文件的一小部分时,这一点变得更加清晰。下图显示了与上面相同的内容,但这次只有62.5毫秒。
我们看到的是一个时间信号,它以不同的频率和幅度在值0附近振荡。该信号表示气压随时间的变化,或扬声器膜(或耳膜)的物理位移.这就是为什么这种对音频数据的描述也称为波形的原因。
频率是该信号振荡的速度。低频例如60Hz可能是低音吉他的声音,而鸟儿的歌声可能是8000Hz的更高频率。我们人类语言通常介于两者之间。
要知道这个信号在单位时间内从连续信号中提取并组成离散信号的采样个数,我们使用赫兹(Hz)来表示每秒的采样个数。16'000或16kHz表示美标采集了16000次。我们在上图中可以看到的1'000个时间点代表了62.5毫秒(1000/16000=0.0625)的音频信号。
2、傅里叶变换——信号的频域表示
虽然之前的可视化可以告诉我们什么时候发生了(即2秒左右似乎有很多波形信号),但它不能真正告诉我们它发生的频率。因为波形向我们显示了有关时间的信息,所以该信号也被称为信号的时域表示。
可以使用快速傅立叶变换,反转这个问题并获得关于存在哪些频率的信息,同时丢弃掉关于时间的信息。在这种情况下,信号表示被称为信号的频域表示。
让我们看看之前的句子在频域中的表现。
importscipy
importnumpyasnp
#Appliesfastfouriertransformationtothesignalandtakesabsolutevalues
y_freq=np.abs(scipy.fftpack.fft(y))
#Establishesallpossiblefrequency
#(dependentonthesamplingrateandthelengthofthesignal)
f=np.linspace(0,sr,len(y_freq))
#Plotaudiosignalasfrequencyinformation.
plt.figure(figsize=(12,3))
plt.semilogx(f[:len(f)//2],y_freq[:len(f)//2])
plt.xlabel("Frequency(Hz)")
plt.show();
可以在此处看到大部分信号在~100到~1000Hz之间(即10²到10³之间)。另外,似乎还有一些从1'000到10'000Hz的内容。
3、频谱图
我们并不总是需要决定时域或频域。使用频谱图同时表示这两个领域中的信息,同时将它们的大部差别保持在最低限度。有多种方法可以创建频谱图,但在本文中将介绍常见的三种。
3a短时傅里叶变换(STFT)
这时是之前的快速傅立叶变换的小型改编版本,即短时傅立叶变换(STFT),这种方式是以滑动窗口的方式计算多个小时间窗口(因此称为“短时傅立叶”)的FFT。
importlibrosa.display
#Computeshort-timeFourierTransform
x_stft=np.abs(librosa.stft(y))
#ApplylogarithmicdB-scaletospectrogramandsetmaximumto0dB
x_stft=librosa.amplitude_to_db(x_stft,ref=np.max)
#PlotSTFTspectrogram
plt.figure(figsize=(12,4))
librosa.display.specshow(x_stft,sr=sr,x_axis="time",y_axis="log")
plt.colorbar(format="%+2.0fdB")
plt.show();
与所有频谱图一样,颜色代表在给定时间点给定频率的量(响度/音量)。+0dB是最响亮的,-80dB接近静音。在水平x轴上我们可以看到时间,而在垂直y轴上我们可以看到不同的频率。
3b梅尔谱图
作为STFT的替代方案,还可以计算基于mel标度的梅尔频谱图。这个尺度解释了我们人类感知声音音高的方式。计算mel标度,以便人类将由mel标度中的delta隔开的两对频率感知为具有相同的感知差异。
梅尔谱图的计算与STFT非常相似,主要区别在于y轴使用不同的刻度。
#Computethemelspectrogram
x_mel=librosa.feature.melspectrogram(y=y,sr=sr)
#ApplylogarithmicdB-scaletospectrogramandsetmaximumto0dB
x_mel=librosa.power_to_db(x_mel,ref=np.max)
#Plotmelspectrogram
plt.figure(figsize=(12,4))
librosa.display.specshow(x_mel,sr=sr,x_axis="time",y_axis="mel")
plt.colorbar(format="%+2.0fdB")
plt.show();
与STFT的区别可能不太明显,但如果仔细观察,就会发现在STFT图中,从0到512Hz的频率在y轴上占用的空间比在mel图中要大得多.
3c梅尔频率倒谱系数(MFCC)
梅尔频率倒谱系数(MFCC)是上面梅尔频谱图的替代表示。MFCC相对于梅尔谱图的优势在于特征数量相当少(即独特的水平线标度),通常约为20。
由于梅尔频谱图更接近我们人类感知音高的方式,并且MFCC只有少数几个分量特征,所以大多数机器学习从业者更喜欢使用MFCC以“图像方式”表示音频数据。但是对于某些问题,STFT、mel或波形表示可能会更好。
让我们继续计算MFCC并绘制它们。
#Extract'n_mfcc'numbersofMFCCscomponents(here20)
x_mfccs=librosa.feature.mfcc(y,sr=sr,n_mfcc=20)
#PlotMFCCs
plt.figure(figsize=(12,4))
librosa.display.specshow(x_mfccs,sr=sr,x_axis="time")
plt.colorbar()
plt.show();
现在我们更好地理解了音频数据的样子,让我们可视化更多示例。
在这四个示例中,我们可以收集到有关此音频数据集的更多问题:
·大多数录音在录音的开头和结尾都有一段较长的静默期(示例1和示例2)。这是我们在“修剪”时应该注意的事情。
·在某些情况下,由于按下和释放录制按钮,这些静音期会被“点击”中断(参见示例2)。
·一些录音没有这样的静音阶段,即一条直线(示例3和4)。
·在收听这些录音时,有大量背景噪音。
为了更好地理解这在频域中是如何表示的,让我们看一下相应的STFT频谱图。
当听录音时,可以观察到样本3具有覆盖多个频率的不同背景噪声,而样本4中的背景噪声相当恒定。这也是我们在上图中看到的。样本3在整个过程中都非常嘈杂,而样本4仅在几个频率上(即粗水平线)有噪声。我们不会详细讨论如何消除这种噪音,因为这超出了本文的范围。
上一篇:大连国际股吧(大连圣亚股吧)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |