語音算法基礎:採樣、量化和頻譜

        想了很久該從哪裏開頭,那就從信號處理入手吧。

        語音信號是連續的一維時間序列,幾十年前的語音處理系統都是模擬的,即通過各種電容電阻電感構建濾波器處理音頻,這種方法好處就是實時性好,但是太粗糙了。最初的bose qc系列耳機的反饋濾波器就是用模擬電路的,當初國內研究他們的濾波參數,都只能拆電路板研究元器件指標,所以要複製還挺難。隨着AD/DA轉換期間成本下降,精細化處理語音信號成爲了可能。這裏面對語音的操作主要有兩個,採樣和量化。

        採樣,即在時間軸上量化。連續信號必須間隔記錄才能被處理。單位時間內採樣點數,就是採樣率,一般常用的有8kHz、16kHz和32kHz。一般cd音質是44.1kHz採樣率,之所以是這個非整數值是因爲模擬電視信號轉爲數字時的歷史遺留問題,後面有時間咱再說。8kHz的採樣率即一秒採8000個點,我們認爲這樣採到的點就算是原始音頻的估計了,既然是估計,即不能完全恢復原始的信息,這是因爲不是所有周期信號都能被採樣到。比如一個正弦波頻率是1Hz,如果事先知道它是正弦波,我們也至少在它的一個週期內要兩個點才能列出一個二元方程組計算出這個正弦波的週期和幅度,而且如果這兩個點取得不好,取到了正弦波的0相位和pi相位,這樣也算不出來,因此要採到1Hz的信號必須大於2Hz的採樣率。這就是奈奎斯特定律,採樣率至少要大於被採信號的兩倍。如果低於兩倍的話就會發生信號的混疊:

                  

就比如上圖的信號假設它是18Hz,但是我們的採樣率就是21Hz,這樣採到的信號看起來就像2Hz的,相當於信號的頻率發生了移動,這就是混疊。爲了對抗混疊,在降採樣率的時候必須加入低通濾波,因爲降採樣會導致可採的信號頻率變低了,但是信號中的高頻成分是實際存在的,必須要去掉。

        量化,即在幅度維度上量化,把連續的幅值量化成離散的,離散化之後就可以進行編碼。常用的量化方法有線性的非線性的,線性的就比如PCM(脈衝編碼調製),量化和採樣都是等間隔的。但是語音有一個特點就是動態範圍非常大,有些信號幅度過高了,如果要達到好的量化效果,必須提高位寬,這會帶來一些位寬的浪費。因此非線性的量化方法的思路是,爲那些大幅度的信號安排更寬的量化間隔,而低幅度的信號間隔更低以兼顧精度。採取差分編碼是另一種方法,差分編碼的思想是不去直接編碼幅度,而是去編碼幅度的變化,由於幅度的變化一般遠小於幅度絕對值,因此差分編碼可以降低量化位寬。以上量化方法針對的是一維信號,很多時候對於二維的信號比如覆信號的量化一般會使用矢量量化(VQ)這種聚類算法。

                     

        頻譜,是從另一個角度去看信號。求解一個信號的頻譜,本質上我們是找一個完備正交系去展開信號,這樣一個信號就可以完全用分解的信號的線性組合表示了,最常用的完備正交系就是正餘弦函數,對應求出的分解係數就是信號的傅里葉變換:

                                                                     

這個公式的基本意思是拿一個函數e^{-iwt}和要分解的函數相乘相加,這個操作可以認爲是卷積或是求互相關。這樣操作可以提取信號中某個成分w分量,正是因爲e^{-iwt}作爲基的正交完備性。正交完備性一般會在線性代數裏面提及,這裏是用函數而非向量去分解,但意義是差不多的。正交的意思是任意兩個基做上述這個求互相關的操作得到的結果都是0;而完備的意思就是說,所有基可以完美分解這個函數。因此信號中某個週期的信號如果存在的話,用基做上面的計算就可以將其大小提取出來,而其他週期的信號因爲和這個基正交就得到的計算結果爲零。一般我們使用快速傅里葉變換(FFT)去離散求解傅里葉變換,FFT也是個非常優美的算法,後面有時間咱具體說一下。

        一般採樣率*通道數*量化bit = 比特率,比如單聲道16k 以int16量化的音頻比特率就是256kbps。

        只有經過採樣和量化,音頻數據才能存儲在計算機中 ,下一步我們介紹一下如何升降採樣以及傅里葉變換如何離散化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章