语音信号处理基础

这是学习时的笔记,包含相关资料连接,有的当时没有细看,记录下来在须要的时候回顾。ios

有些较混乱的部分,后续会再更新。c++

欢迎感兴趣的小伙伴一块儿讨论,跪求大神指点~git


Material

综述

  1. Bowon Lee, Mark Hasegawa-Johnson. Minimum Mean-squared Error A Posteriori Estimation of High Variance Vehicular Noisegithub

    method: MMSE,最小均方误
    针对汽车噪音
    code: https://github.com/mwv/vad算法

  2. https://github.com/kunaljathal/VAD函数

    提取特征设定阈值(语音频带能量比,周期性测量,运行最小最大均方根能量估计,自适应和噪声阈值计算,拖尾平滑以淡入淡出语音/噪音边界)性能

  3. Audio-Visual Voice Activity Detection Using Diffusion Maps
  4. Deep Belief Networks Based Voice Activity Detection
  5. DENOISING DEEP NEURAL NETWORKS BASED VOICE ACTIVITY DETECTION
  6. RECURRENT NEURAL NETWORKS FOR VOICE ACTIVITY DETECTION学习


Information

难点

  1. 算法假设背景噪声在长时间内是平稳的,当实际噪声环境为非平稳噪声或剧烈变化时,算法检测性能急剧下滑
  2. 绝大多数算法依赖语音信号自己音节的特征对语音和噪音进行区分。某些以清音或摩擦音、爆破音开头的语音信号易被淹没,致使语音丢失。同时,在大多数算法的语音起始和结束段检测效果不佳。

假设

  • 在信号处理时,将语音信号做为一个短时的平稳过程来处理(语音信号具备短时平稳性)。实际处理中,将连续的语音数据流用一个窗函数序列分割成连续段,而后对每一段(帧)进行处理。
    典型的分割窗序列:矩形窗、海明窗、汉宁窗ui

    频谱泄露与傅里叶变换尤为是离散时间傅里叶变换有关:信号为无限长序列,运算须要截取其中一部分(截断),因而须要加窗函数,加了窗函数至关于时域相乘,因而至关于频域卷积,因而频谱中除了原本该有的主瓣以外,还会出现本不应有的旁瓣,这就是频谱泄露!为了减弱频谱泄露,能够采用加权的窗函数,加权的窗函数包括平顶窗、汉宁窗、高斯窗等等。而未加权的矩形窗泄露最为严重。(主瓣一般指Sa(x)=sinx/x函数或与之有关的函数图像(例如频谱)中从负到正第一个完整的瓣,旁瓣是指后面其余的低矮的瓣。)

语音信号时域

以时间做为参照来观察动态世界的方法咱们称其为时域分析

  • 短时能量:标志语音信号在计算长度内的幅度大小,能够由它的量值粗略判断语音信号有无,也能够判断该帧是请是浊。实际处理中,通常不单独计算语音帧的能量,而是利用自相关法求解LPC系数,自相关序列第一个值表明帧能量。
  • 短时过零率:信号变化快慢
  • 自相关函数:估计基音周期
  • 基音检测

语音信号频域

  • 短时傅立叶变换(STFT)
  • 频谱分析:0dB是播放设备所输出信号的最大值。因此软件里,常常在0如下,就是负值了。频谱反映的是这个瞬间,音频信号各份量的电平值大小。

你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。 ——> 时域和频域

语音信号特征提取

激励模型:发浊音时声带的不断开启和关闭将产生间歇的脉冲波,浊音具备周期性。发清音时声带不振动,所以清音没有周期性。清音由空气摩擦产生,在分析研究时等效为随机白噪声。
声道模型:声道部分的数学模型目前有两种观点,一种是将声道视为多个不一样截面积的管子串联而造成的系统,即“声管模型”,另外一种是将声道视为一个谐振腔,即“共振峰模型”。
辐射模型:辐射模型表征口和唇的辐射效应和圆形头部的绕射效应。
 
音素:语音中最小的基本单位是音素。分为元音和辅音。(元音和共振峰关系密切)

声强

在物理学中,把单位时间内经过垂直于声波传播方向的单位面积的平均声能,称为声强。实验的研究代表,人对声音强弱的感受并非与声强成正比,而是与其对数成正比的。
SIL=10lg[I/I’]=10lg(I/I’)
式中I为声强,I’=10e-12瓦/平米称为基准声强,声强级的经常使用单位是分贝(dB)

响度

通常来讲,声音频率必定时,声强越强,响度也越大。可是响度与频率有关,相同的声强,频率不一样时,响度也可能不一样。响度若用对数值表示,即为响度级,响度级的单位定义为方,符号为phon。根据国际协议规定,0dB声级的1000Hz纯音的响度级定义为0 phon,n dB声级的1000Hz纯音的响度级就是n phon。

音高

音高也是一种主观心理量,是人类听觉系统对于声音频率高低的感受。音高的单位是美尔(Mel)。响度级为40 phon,频率为1000Hz的声音的音高定义为1000Mel。

基音周期和基音频率
基音周期

基音周期描述了语音激励源的一个重要特征,它反映了声门相邻两次开闭之间的时间间隔或开闭的频率。(由于女性基频比男性高,因此有些算法中使用基频来区分性别,还挺准的)

基音周期的估算方法

基音周期的估算方法不少,比较经常使用的有自相关法,倒谱法(咱们提基频用的倒谱法),平均幅度差函数法,线性预测法,小波—自相关函数法,谱减—自相关函数法等。

自相关法:
1. 预处理:为了提升基音检测的可靠性,有人提出了端点检测和带通数字滤波器两种预处理方法对原始信号进行预处理。在提取基频时端点检测比通常端点检测更为严格(通常端点检测会保留语音有话段的头和尾,以免把有用信息看成噪声滤除,但头和尾不包括基频信息,因此在进行提取基音的端点检测时阈值设定更为严格,滤去头部和尾部)。用带通滤波器预处理的目的是为了防止共振峰第一峰值的干扰,通常带通滤波器的频率范围选为60~500Hz。
2. 自相关法:短时自相关函数的定义为 其中k是时间的延迟量,N为帧长,短时自相关函数具备如下重要性质。若当原信号具备周期性,那么它的自相关函数也具备周期性,而且周期性与原信号的周期相同。且在K等于周期整数倍时会出现峰值。清音信号无周期性,它的自相关函数会随着K的增大呈衰减趋势,浊音具备周期性,它的R(k)在基因周期整数倍上具备峰值,一般取第一最大峰值点做为基因周期点。自相关函数法基音检测正是利用这一性质来进行基因周期检查的。

信噪比

定义:信噪比的计量单位是dB,其计算方法是10lg(PS/PN),其中PS和PN分别表明信号和噪声的功率(用能量也是同样的)。
在噪声和语音彻底混杂的状况下信噪比很难计算,在预知噪声的状况下,能够用实际信号(纯语音+噪声)减去噪声,获得近似的纯语音信号。从而经过进一步计算求得信噪比。
咱们在实验中所采集的信号信噪比低时在10几dB,信噪比高时在30dB以上。

梅尔倒谱系数

在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最经常使用到的语音特征就是梅尔倒谱系数。梅尔倒谱系数是在Mel标度频率域提取出来的倒谱参数,Mel标度描述了人耳频率的非线性特性,它与频率的关系可用下式近似表示:
Mel(f)=2595*lg(1+f/700),式中f为频率,单位为Hz。计算方法点[这里](http://blog.csdn.net/u010451580/article/details/51178190)。

人类对不一样频率语音有不一样的感知能力:对1kHz如下,与频率成线性关系,对1kHz以上,与频率成对数关系。频率越高,感知能力就越差了。所以,在应用中经常只使用低频MFCC,而丢弃中高频MFCC。

短时能量

短时平均幅度

短时平均幅度也是一帧语音信号能量大小的表征,它与短时能量的区别在于计算时不论采样值的大小,不会由于取二次方而形成较大的差别。

短时平均过零率

短时平均过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。

共振峰

共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不可是音质的决定因素,并且反映了声道(共振腔)的物理特征。

声音在通过共振腔时,受到腔体的滤波做用,使得频域中不一样频率的能量从新分配,一部分由于共振腔的共振做用获得强化,另外一部分则受到衰减。因为能量分布不均匀,强的部分犹如山峰通常,故而称之为共振峰。

在语音声学中,共振峰决定着元音的音质。共振峰能够等效为声道系统函数的复极点对,因为人的声道平均长度为17cm,而语音信号的能量主要集中在0-5kHz。所以语音一般包含4到5个稳定的共振峰,通常只须要研究前三个共振峰。

共振峰:单元音频谱图,橫轴为频率,纵轴为分贝。每一尖峰表明一个谐波,谐波频率不稳定因此呈尖峰图形。几个相邻的比较高的尖峰组成共振峰,共振峰频率是它们的包络线所在的峰值。

MFCC

理论

https://my.oschina.net/jamesju/blog/193343
http://blog.csdn.net/u014332048/article/details/43021789

?两个DCT公式貌似不同,MFCC的维度到底和什么相关?原本觉得是滤波器个数。

https://my.oschina.net/zzw922cn/blog/533175
http://blog.csdn.net/fengzhonghen/article/details/51722555
http://blog.csdn.net/joey_su/article/details/36414877

快速傅立叶变换后的点数(维度)由来

这里须要先介绍下Nyquist频率,奈奎斯特频率(Nyquist频率)是离散信号系统采样频率的一半,因哈里·奈奎斯特(Harry Nyquist)或奈奎斯特-香农采样定理得名。采样定理指出,只要离散系统的奈奎斯特频率高于被采样信号的最高频率或带宽,就能够避免混叠现象。在语音系统中我一般采样率取16khz,而人发生的频率在300hz~3400hz之间,按照Nyquist频率的定义就有Nyquist频率等于8khz高于人发生的最高频率,知足Nyquist频率的限制条件。FFT就是根据Nyquist频率截取采样率的一半来计算,具体来讲就是,假设一帧有512个采样点,傅里叶变换的点数也是512,通过FFT计算后输出的点数是257(N/2+1),其含义表示的是从0(Hz)到采样率/2(Hz)的N/2+1点频率的成分。也就是说在通过FFT计算时不只把信号从时域转到了频域而且去除了高于被采样信号的最高频率的点的影响,同时也下降了维度。

参数

TARGETRATE=100000
-窗间隔为10ms

WINDOWSIZE=250000
-窗长为25ms
注:HTK中时间单位为100ns

ZMEANSOURCE=T
-未来源文件取zeromean,即去掉DC值

USEHAMMING=T
-使用hammingwindow

PREEMCOEF=0.97
-预加剧系数0.97

NUMCHANS=26
-在MEL刻度下等分红26个频带

USEPOWER=F
-不使用c(0)参数

NUMCEPS=13
-最后使用13阶MFCC

CEPLIFTER= 22                     
-倒谱滤波系数

ENORMALISE=T
-窗的能量值作正规化

LOFREQ=200
-设定频带的下截止频率

HIFREQ=3500
-设定频带的上截止频率

代码

htk计算mfcc
github:Gist: 里面的mfcc以后好好看看,浏览了一下,写的不多。

Delta

式中,dt表示第t个一阶差分,Ct表示第t个倒谱系数,Q表示倒谱系数的阶数,K表示一阶导数的时间差,可取1或2。将上式的结果再代入就能够获得二阶差分的参数。


Voice-Activity-detection-master

Code

stringstream ss;
ss << "example_" << i << ".txt";
ofstream myfile;
cout << ss.str();
const string &s = ss.str();
const char * p = s.c_str();
myfile.open (ss.str());

//error
/your_VAD_folder/VAD/Voice-Activity-Detection-master/voice_detection.cpp: In function ‘int main()’:
/your_VAD_folder/VAD/Voice-Activity-Detection-master/voice_detection.cpp:91:24: error: no matching function for call to ‘std::basic_ofstream<char>::open(std::basic_stringstream<char>::__string_type)’
   myfile.open (ss.str());
                        ^
//修改:使用C的字符串。
const string &s = ss.str();
const char * p = s.c_str();
myfile.open (p);

//由于std::ofstream::open中
//c++11
void open (const   char* filename,  ios_base::openmode mode = ios_base::out);
void open (const string& filename,  ios_base::openmode mode = ios_base::out);
//c++98
void open (const char* filename,  ios_base::openmode mode = ios_base::out);
//C++的string类没法做为open的参数。

操做

sudo apt-get install fftw3 fftw3-dev fftw3-doc

PCM (脉冲编码调制)
wav格式 signed 16 bit PCM
归一化时除以2的15次,由于第16位是符号



(若非特别声明,文章均为Vanessa的我的笔记,转载请注明出处。文章若有侵权内容,请联系我,我会及时删除)

相关文章
相关标签/搜索