基音檢測算法

基音檢測演算法（英語：pitch detection algorithm，縮寫：PDA）是估計周期性或訊號的音高或基本頻率的算法。該算法主要用於語音或樂音的信號處理中。基音檢測算法既可以單獨從時域或頻域的角度實現，也可以同時利用時域和頻域。

基音檢測算法的用途廣泛，在語音學、、語音編碼和電子音樂表演中均有重要位置。這些不同的需求使得通用算法的產生更為困難，故目前尚不存在完美的基音檢測算法，實際使用中有一系列算法共存。多數基音檢測算法大致可歸類為下述分類中的一種。

通常情況下，基音檢測算法會估計準周期性信號的周期。周期的倒數即為頻率。

<div>

常見的算法
最簡單的方法之一是算出信號零點間的間隔（過零率）。這種方法的缺點在於它無法應對諸如多個周期不同的正弦波或噪音這樣的覆雜波形。不過這並不意味著這種方法一無是處，在只有單一聲源的情景中過零率是個不錯的基音檢測指標。這種算法相當易於實現。

更複雜的方法會將原訊號平移一些時間，去跟原本訊號內積比對相似度，若平移若幹時間後的訊號與原訊號很相似，則平移時間非常可能是該訊號之週期，透過嘗試不同的平移時間，可把平移時間對相似度作圖，找出相似度最大的週期， 像是AMDF演算法 (平均幅度差函數), ASMDF演算法 (平均方均差函數)和其他類似的自相關函數法，可以精確的找出基音。但是自相關函數法有時會因為雜訊太多、複音、泛音等因素（通常是“八度音程錯誤”），導致判斷錯誤。他們可以很好地應對噪聲信號（取決於實際狀況），但不能很好地處理複音音樂（涉及多個音符)。 

目前最精確的基音檢測算法會先結合各種找相似度的方法（內積、差值），並透過人類的經驗法則去修正去設門檻值，像是若訊號為音訊，可確定頻率範圍在20赫茲到20000赫茲間，可先鎖定平移時間在0.00005秒到0.05秒的範圍間，最後透過機率模型或機器學習的方法來判斷音高。像是廣泛被採用的YIN演算法與MPM演算法，皆為自相關函數法的進階版，但仍侷限在單音的音頻偵測，若訊號為複音，同時有兩個音源，往往會採用頻域的方法。

基于頻域的算法 
若訊號為複音，要同時偵測兩個以上的音源之頻率，在頻域中是可行的，首先會先將訊號轉為頻譜 ，常見的方法是透過快速傅立葉變換，可在有限運算資源下，得到非常有效的準確度。

常見的頻域方法包含泛音內積頻譜法、倒頻譜分析，最大似然估計法，他們都是由預設的頻率對照表，試圖從訊號頻譜特徵中，找到對應之頻率。

為了改進從離散傅立葉頻譜得到的基音估計，可以使用重新分佈法 (基於相位) or 格蘭徳克插值 (基於幅度) 的技術超出離散傅立葉頻段提供的精度。 布朗和普克特提供了另一種基於階段的方法

基于频域和时域的算法 
頻譜/動態的基音檢測法，像是YAAPT，結合了時域和頻域，時域方面，透過自相關函數法，頻域則是透過頻譜資訊來辨識出音高，並從較為可能的音高種類中，利用動態規劃找出最佳的音高選擇，這種結合時域和頻域的演算法，可以結合更多資訊，降低時域或頻域所獨立造成的誤差。

語音訊號的基本頻率 
語音訊號的基本頻率範圍大約為40赫茲到600赫茲。

自相關函數法需要至少兩個周期才能偵測頻率，假如音訊的基本頻率為40赫茲，至少需要0.05秒的語音訊號才能分析。然而在0.05秒內，具有較高基頻的語音不一定在整個窗口中具有相同的基頻。

參考資料 

数字信号处理

另请参阅 
 
 
 线性预测编码
 MUSIC演算法