語音信號處理基礎

這是學習時的筆記,包含相關資料連接,有的當時沒有細看,記錄下來在須要的時候回顧。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的我的筆記,轉載請註明出處。文章若有侵權內容,請聯繫我,我會及時刪除)

相關文章
相關標籤/搜索