STFT(短时傅里叶变换)音频特征提取,用于语音识别 python

在各种音频相关的任务中,不管用什么模型或网络,得到所需的音频特征肯定是必要的一步。下面简单说一下STFT特征

一、原始信号
在说STFT之前,先说一下读入的原始信号,图像是在XY二维上描述的像素点的集合,相应的,原始音频只需要t一维上描述,从音频文件中读取出来的原始语音信号是一个一维数组,长度是由音频长度和采样率决定,比如采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果音频长度是10秒,那么raw waveform中就有160000个值,值的大小通常表示的是振幅。

二、STFT
1.概念——STFT短时傅里叶变换:STFT短时傅里叶变换,实际上是对一系列加窗数据做FFT。有的地方也会提到DCT(离散傅里叶变换),而DCT跟FFT的关系就是:FFT是实现DCT的一种快速算法。

2.概念——声谱图:对原始信号进行分帧加窗后,可以得到很多帧,对每一帧做FFT(快速傅里叶变换),傅里叶变换的作用是把时域信号转为频域信号,把每一帧FFT后的频域信号(频谱图)在时间上堆叠起来就可以得到声谱图。

3.FFT有个参数N,表示对多少个点做FFT,如果一帧里面的点的个数小于N就会zero-padding到N的长度。每个点对应一个频率点,某一点n(n从1开始)表示的频率为Fn=(n−1)∗Fs/N,第一个点(n=1,Fn等于0)表示直流信号,最后一个点N的下一个点(实际上这个点是不存在的)表示采样频率Fs。

4.FFT后我们可以得到N个频点,比如,采样频率为16000,N为1600,那么FFT后就会得到1600个点,FFT得到的1600个值的模可以表示1600个频点对应的振幅。因为FFT具有对称性,当N为偶数时取N/2+1个点,当N为奇数时,取(N+1)/2个点,比如N为512时最后会得到257个值。

以下有几个方便理解的图,转载过来的,大家可以用于理解:
STFT(短时傅里叶变换)音频特征提取,用于语音识别 python_第1张图片

每帧frame通过FFT得到一个向量,对应的是各频点的大小。

STFT(短时傅里叶变换)音频特征提取,用于语音识别 python_第2张图片

向量也就是spectrum可以看作频谱图旋转后得到的。

STFT(短时傅里叶变换)音频特征提取,用于语音识别 python_第3张图片
实际上在这里帧也是时间的一种度量,通过多个帧放在一起得到了所谓的声谱图

python下可以使用librosa得到,Librosa是一个用于音频、音乐分析、处理的python工具包,一些常见的时频处理、特征提取、绘制声音图形等功能应有尽有,功能十分强大。

pip install librosa或conda install -c conda-forge librosa均可安装

你可能感兴趣的:(STFT(短时傅里叶变换)音频特征提取,用于语音识别 python)