音頻濾波演算法
1. 基於音樂識別的頻譜轉換演算法——CQT
由於在音樂中,所有的音都是由若干八度的12平均律共同組成的,這十二平均律對應著鋼琴中一個八度上的十二個半音。這些半音臨近之間頻率比為2 1/12 。顯然,同一音級的兩個八度音,高八度音是低八度音頻率的兩倍。
因此在音樂當中,聲音都是以指數分布的,但我們的 傅立葉變換得到的音頻譜都是線性分布的,兩者的頻率點是不能一一對應的,這會指使某些音階頻率的估計值產生誤差 。所以現代對音樂聲音的分析,一般都採用一種具有相同指數分布規律的時頻變換演算法——CQT。
CQT指中心頻率按指數規律分布,濾波帶寬不同、但中心頻率與帶寬比為常量Q的濾波器組 。它與傅立葉變換不同的是,它頻譜的橫軸頻率不是線性的,而是 基於log2為底的 ,並且可以 根據譜線頻率的不同該改變濾波窗長度 ,以獲得更好的性能。由於CQT與音階頻率的分布相同,所以通過計算音樂信號的CQT譜,可以直接得到音樂信號在各音符頻率處的振幅值,對於音樂的信號處理來說簡直完美。
我們關註上述「 中心頻率與帶寬比為常量Q 」,從公式上看,我們可以表達為下述公式
下面,我們從計算過程來看恆Q變換的本質
首先,假設我們處理的最低的音為f min ,f k 表示第k分量的頻率,β為一個八度內所包含一個八度的頻譜線數,例如β=36,表示每個八度內有36條頻譜線,每個半音三條頻率分量。
並且有
設 δ f 表示的是頻率 f 處的頻率帶寬,也可以稱為頻率解析度,那麼根據我們的定義得知:
從這個式子,我們得知常量Q是只與β相關的常數。
下面我們假設N k 是隨頻率變換的窗口長度, f s 表示采樣頻率
同時我們的線性頻率應該變為基於log2的非線性頻率
我們的CQT,通過採用不同的窗口寬度,獲得不同的頻率解析度,從而可以得到各個半音的頻率振幅。在CQT中第n幀的第k個半音頻率分量可表示為
其中我們的x(m)為時域信號,w N k 為窗函數