簡介
基音是指發濁音時聲帶振動的周期,基音周期的估計稱為基音檢測,其目的是提取出與聲帶振動頻率一致或儘可能相吻合的基音周期變化的軌跡曲線,是語音信號處理中最重要的特徵參數之一,在旋律辨識、聲調辨識、語音合成和語音編碼等研究領域起著非常關鍵的作用。基音檢測算法用於檢測基音信號的方法。由於語音信號可視為一個動態非平穩隨機過程,語音波形和聲帶振動的頻率變化範圍大且十分複雜,還沒有一種通用的方法能準確可靠地檢測出任何人在任何環境下的基音周期。
在基音檢測算法中,以自相關函式(ACF)法和平均幅度差函式(AMDF)法最為經典。ACF 方法是計算語音信號的自相關函式,通過 ACF 曲線在基音周期整數倍位置存在較大峰值來估計基音,方法實現簡單,但隨著信噪比的下降,通常會導致倍頻或半頻錯誤。AMDF 方法是計算語音信號的平均幅度差函式,通過 AMDF 曲線在基音周期整數倍處出現谷值來估計基音,該方法在語音信號的幅度或頻率變化比較敏感時,基音檢測精度明顯下降。
方法
時域方法
在時域方法中,基音檢測算法通常會先估計信號的周期性,並從周期性中找出對應之的音高或頻率。
最直覺的方法,是先找信號的過零率,也就是一個信號的從正數變成負數,或負數變成正數的比率,但是如果信號為複雜波形,由許多不同的周期波組成,則過零率將受影響,不易準確偵測出基音。此方法常被套用在單一音源無噪聲之語音套用,計算量非常小,且過零率也常常是音訊處理中很重要的特徵值,當過零率很高時,常為噪聲或子音。
更複雜的方法會將原信號平移一些時間,去跟原本信號內積比對相似度,若平移若干時間後的信號與原信號很相似,則平移時間非常可能是該信號之周期,透過嘗試不同的平移時間,可把平移時間對相似度作圖,找出相似度最大的周期,這類的方法稱為自相關函式法,可以精確的找出基音。但是自相關函式法有時會因為噪聲太多、複音、泛音等因素,導致判斷錯誤。
最精確的基音檢測算法會先結合各種找相似度的方法(內積、差值),並透過人類的經驗法則去修正去設門檻值,像是若信號為音訊,可確定頻率範圍在20赫茲到20000赫茲間,可先鎖定平移時間在0.00005秒到0.05秒的範圍間,最後透過機率模型或機器學習的方法來判斷音高。像是廣泛被採用的YIN算法與MPM算法,皆為自相關函式法的進階版,但仍局限在單音的音頻偵測,若信號為複音,同時有兩個音源,往往會採用頻域的方法。
頻域方法
若信號為複音,要同時偵測兩個以上的音源之頻率,在頻域中是可行的,首先會先將信號轉為頻譜 ,常見的方法是透過快速傅立葉變換,可在有限運算資源下,得到非常有效的準確度。
常見的頻域方法包含泛音內積頻譜法、倒頻譜分析,最大似然估計法,他們都是由預設的頻率對照表,試圖從信號頻譜特徵中,找到對應之頻率。
頻譜/動態法
頻譜/動態的基音檢測法,像是YAAPT,結合了時域和頻域,時域方面,透過自相關函式法,頻域則是透過頻譜信息來辨識出音高,並從較為可能的音高種類中,利用動態規劃找出最佳的音高選擇,這種結合時域和頻域的算法,可以結合更多信息,降低時域或頻域所獨立造成的誤差。