趙凌覽,李曉峰
(電子科技大學(xué) 信息與通信工程學(xué)院,四川 成都 611731)
樂音音符識(shí)別和自動(dòng)樂譜編制研究的基本目的在于使計(jì)算機(jī)聽懂樂器的演奏并自動(dòng)譜曲,在音樂創(chuàng)作中有很重要的實(shí)用價(jià)值。目前已有相當(dāng)一部分的相關(guān)文獻(xiàn)報(bào)道[1-2],其通過對檢測到的音符進(jìn)行頻域分析,使用小波變換或者濾波的方式將音符的有效頻率集中在基頻頻率附近,除去泛音干擾分量,而后通過識(shí)別基頻頻率的方法實(shí)現(xiàn)單個(gè)音符的識(shí)別。
本文提出一種基于頻域匹配濾波進(jìn)行音階識(shí)別的方法。在識(shí)別基頻頻率的基礎(chǔ)上對其泛音分量也進(jìn)行匹配,在一定程度上提高了識(shí)別的可靠性與準(zhǔn)確度;此外,對于音頻信號(hào)的每一個(gè)頻譜峰值,利用Goertzel算法計(jì)算出對應(yīng)的單一譜線進(jìn)行表示,提高了運(yùn)算和識(shí)別的效率,同時(shí)又不失一般性。
最后,本文以鋼琴標(biāo)準(zhǔn)音頻文件、手機(jī)鋼琴演奏軟件以及真實(shí)的鋼琴演奏錄音等多種音源的部分音符為例進(jìn)行了測試,測試結(jié)果表明:該方法具有較高的識(shí)別準(zhǔn)確度和良好的抗噪性能。
一段連續(xù)的樂音是由一系列不同音高的音符按照時(shí)間順序發(fā)聲組成的,音符的頻域通常由兩部分組成:基音頻率和泛音頻率?;纛l率決定樂音的音高;而泛音頻率決定音色[3]。泛音由基音頻率的各整數(shù)倍頻率構(gòu)成,實(shí)測發(fā)現(xiàn)泛音各次諧波的幅度和基音頻率對應(yīng)的幅度之比基本是固定不變的。所以,利用音符的特定頻譜特性,就能很好地實(shí)現(xiàn)對樂音信號(hào)的識(shí)別。本文的音頻識(shí)別算法如圖1所示。
圖1 音頻識(shí)別算法示意圖
樂音滿足十二平均律,十二平均律是指按照1/12倍頻程來劃分音階,每八度音為一個(gè)頻程,將一個(gè)頻程劃分為12個(gè)半度音階,十二平均律在數(shù)學(xué)上有嚴(yán)格的表示,每2個(gè)相鄰的半度音階的頻率之比為2的1/12次方:
鋼琴部分音符所對應(yīng)的基頻頻率表如表1所示,一個(gè)音符唯一對應(yīng)一個(gè)基頻頻率,單位為Hz?;纛l率決定了音符的音高,也是本文識(shí)別音符的重要依據(jù)之一。
表1 鋼琴部分音符基本頻率表 Hz
如圖2所示的是使用快速傅立葉變換 (FFT),以輸入的C4#信號(hào)為例繪制的頻譜圖像。對照表1可以看出,信號(hào)頻譜在277.18 Hz基頻頻率處出現(xiàn)了較大峰值;此外,頻譜在該基頻頻率的二次諧波和三次諧波處也出現(xiàn)了相當(dāng)?shù)姆逯?其中二次諧波的峰值甚至大于基本頻率處的峰值。一些文獻(xiàn)中[1-2]的識(shí)別方法只保留了基頻頻率,這種方法固然是可行的,但放棄對泛音的利用會(huì)降低識(shí)別的抗噪性能。
圖2 利用FFT算法繪制的連續(xù)頻譜
實(shí)際上,雖然在高音部分的頻譜特性中,諧波分量的幅度不具有突出優(yōu)勢;但是,在低音部分,諧波分量幅度大,利用價(jià)值明顯。一種有效的方案是對每個(gè)音符的頻譜做一個(gè)相應(yīng)的模板,檢測時(shí)只需要將待檢測的信號(hào)的頻譜與模板進(jìn)行匹配,選擇匹配程度最好的頻譜作為本次識(shí)別的結(jié)果并輸出。
首先,對計(jì)算機(jī)讀取的音頻信號(hào)的所有采樣點(diǎn)的幅度歸一化,將其轉(zhuǎn)化成一標(biāo)準(zhǔn)模式;其次,樂音信號(hào)具有短時(shí)平穩(wěn)特性,故在實(shí)際處理時(shí)先將樂音信號(hào)分成很小的時(shí)間段,該段就稱之為“幀”,分幀的具體過程可由MATLAB自帶的語音工具箱的enframe函數(shù)來實(shí)現(xiàn);最后,通過短時(shí)能量和短時(shí)過零率[4]的方法判斷單音符的起、止位置。
通過時(shí)域分析端點(diǎn)檢測確定了樂音端點(diǎn)的起、止位置后,就可以從采集到的一段音頻信號(hào)中分割出一個(gè)個(gè)單音信號(hào)(如圖3所示),并逐個(gè)對分割出的單音信號(hào)進(jìn)行頻域分析,完成單個(gè)樂音識(shí)別,最后實(shí)現(xiàn)整個(gè)音頻信號(hào)即樂句的識(shí)別[5]。
圖3 端點(diǎn)檢測與單音符分割結(jié)果
利用Goertzel算法可以得到每個(gè)標(biāo)準(zhǔn)音在不同基音頻率下的頻譜幅度值。圖2和圖4以鋼琴C4#的標(biāo)準(zhǔn)音為例,分別展示了該音符利用FFT算法繪制的連續(xù)頻譜和利用Goertzel算法繪制的離散譜線。
可以看出,該離散譜線幾乎包含了該音符頻譜峰值的全部信息。所以,可以用一個(gè)長度為N的序列S來唯一表示第i個(gè)音符的頻譜特性。
最后,將這些序列翻轉(zhuǎn)時(shí)移構(gòu)成M=26路分支的匹配濾波器(對應(yīng)26個(gè)示例的標(biāo)準(zhǔn)音模板),其中,n=0,1,…,N-1;j=1,2,…,M。則濾波器的單位沖擊響應(yīng)為:
圖4 利用Goertzel算法繪制的離散頻譜
本文的頻域識(shí)別算法示意圖如圖5所示。輸入的音頻信號(hào)經(jīng)過時(shí)域處理后被分割成一個(gè)個(gè)的單音信號(hào)。將單音信號(hào)經(jīng)過Goertzel算法計(jì)算后得到該信號(hào)的離散頻譜序列,將這些序列并行通過M=26路分支的標(biāo)準(zhǔn)音匹配濾波器,在卷積后的序列中點(diǎn)n=N-1進(jìn)行采樣并輸出,作為信號(hào)間相關(guān)程度的度量,把采樣值最大的那一路匹配濾波器對應(yīng)的音符映射輸出作為輸入信號(hào)的接收和識(shí)別。
圖5 單音識(shí)別算法示意圖
輸入單音信號(hào)Xit()的N點(diǎn)長的頻譜序列為Si[n],各分支的匹配濾波器的沖擊響應(yīng)為hj[n],則輸入的頻譜序列通過離散匹配濾波器后采樣輸出的過程如下:
可見輸入的單音信號(hào)的離散頻譜序列經(jīng)過匹配濾波器后采樣輸出的過程等效于進(jìn)行相關(guān)運(yùn)算[6],是輸入信號(hào)與標(biāo)準(zhǔn)音信號(hào)頻譜之間相關(guān)程度的一種度量[7]。因此,可以將這個(gè)相關(guān)性的度量作為樂音檢測和識(shí)別的依據(jù)。
下面簡要說明離散譜線能量歸一化的原因。Si[n]為輸入單音信號(hào)Xit()的離散頻譜序列,設(shè)ri為Si[n]通過Xit()所對應(yīng)的標(biāo)準(zhǔn)音匹配濾波器后的采樣輸出值,rj為Si[n]通過其他標(biāo)準(zhǔn)音的匹配濾波器后(i≠j)的采樣輸出,則有:
故在離散譜線能量歸一化的條件下,輸入的單音信號(hào)的頻譜總是與其本身所對應(yīng)的標(biāo)準(zhǔn)音的頻譜具有最大的相關(guān)性,故能夠準(zhǔn)確判決和識(shí)別出輸入的單音信號(hào)。
實(shí)際錄音的C4信號(hào)的歸一化離散頻譜,以及其通過C4標(biāo)準(zhǔn)音信號(hào)的頻域匹配濾波器和任一其他標(biāo)準(zhǔn)音信號(hào)的匹配濾波器后的輸出序列如圖6所示。圖中紅色(n=26)的點(diǎn)為采樣后的輸出樣本值??梢钥闯鲂盘?hào)通過其本身的頻域匹配濾波器后的輸出樣本值遠(yuǎn)大于該信號(hào)通過其他標(biāo)準(zhǔn)音信號(hào)的頻域匹配濾波器的輸出樣本值。
圖6 頻域分析的中間過程
對中音區(qū)音階C4~B4(不含半音)采用上述樂音識(shí)別方法的識(shí)別結(jié)果如表2所示。表中的第一行代表一個(gè)待檢測的實(shí)際錄音音符,第一列代表相應(yīng)的標(biāo)準(zhǔn)音頻譜模板,表格中的數(shù)值代表行列信號(hào)之間的頻譜匹配即相關(guān)程度。
表2 待測音符與標(biāo)準(zhǔn)音頻譜模板的相關(guān)程度
如表2中的對角線所示,輸入的單音信號(hào)與其對應(yīng)的標(biāo)準(zhǔn)音信號(hào)的頻譜相關(guān)程度遠(yuǎn)大于該信號(hào)與其他標(biāo)準(zhǔn)音信號(hào)的相關(guān)度。所以很容易通過計(jì)算和比較待測信號(hào)與標(biāo)準(zhǔn)音模板之間的匹配程度識(shí)別出待測的音符,從而實(shí)現(xiàn)樂音的自動(dòng)識(shí)別、錄入和自動(dòng)樂譜創(chuàng)作。
樂音識(shí)別是實(shí)現(xiàn)自動(dòng)譜曲的基礎(chǔ),在音樂創(chuàng)作中有很重要的實(shí)用價(jià)值。下面將從實(shí)際樂音編輯和處理中較為常見的和弦分解和樂句識(shí)別這兩部分,介紹頻域匹配濾波的應(yīng)用。
和弦識(shí)別是指對3個(gè)(及以上)的樂音按一定順序排列產(chǎn)生的音程組的分解和識(shí)別。接收機(jī)接收到和弦信號(hào)后,用其頻譜分別與每個(gè)單音符的頻譜模板進(jìn)行匹配,并選擇相關(guān)程度最大的前3個(gè)(及以上)音符進(jìn)行輸出就可以實(shí)現(xiàn)對和弦的分解。表3示例的是以實(shí)際錄音的三音和弦(由C4-E4-G4組成)為例,進(jìn)行分解的一個(gè)典型實(shí)驗(yàn)??梢钥闯?以上算法準(zhǔn)確地實(shí)現(xiàn)了對該和弦的分解與識(shí)別。
表3 和弦信號(hào)與單音模板的相關(guān)程度
通過對輸入的音頻信號(hào)進(jìn)行多次端點(diǎn)檢測,將輸入的長樂句按短時(shí)能量和過零率分割成一系列的單音信號(hào),并依次通過頻域匹配濾波器進(jìn)行識(shí)別,最后按序輸出即可完成對整個(gè)樂句的分解和識(shí)別。
手機(jī)鋼琴演奏軟件演奏的樂曲 “Mary Had a Little Lamb”開始的7個(gè)單音符的波形以及檢測輸出結(jié)果如圖7所示,錄音樂句總長為20個(gè)音符,錄音環(huán)境可近似認(rèn)為是無噪的。
圖7 樂句檢測輸出結(jié)果
該7個(gè)音符對應(yīng)的樂譜如圖8所示,對應(yīng)的音符依次為:E4,D4,C4,D4,E4,E4,E4—。實(shí)驗(yàn)表明,檢測結(jié)果與樂譜一致,系統(tǒng)正確識(shí)別出了樂句中所有單音符的音名,效果比較理想。
圖8 被檢測樂句的樂譜
由于實(shí)際應(yīng)用中環(huán)境噪聲的存在是不可避免的,所以下面有必要對以上算法的實(shí)際抗噪性能進(jìn)行定量的分析。在該由20個(gè)音符組成的樂句的基礎(chǔ)上,利用MATLAB的awgn函數(shù)對其加入不同強(qiáng)度的高斯白噪聲,信噪比由該函數(shù)的SNR參數(shù)設(shè)置。同一信噪比下對樂句進(jìn)行10次測試取平均,觀察在不同信噪比下,該檢測方法的檢測準(zhǔn)確率。實(shí)驗(yàn)結(jié)果如表4所示。
表4 不同信噪比下樂句的錯(cuò)檢概率
可以看出對于加性的高斯白噪聲,其信噪比為0~5 dB時(shí),時(shí)域波形已經(jīng)幾乎完全失真無法辨識(shí);而該噪聲對信號(hào)的頻譜影響相對較小,所以基于頻域匹配濾波的識(shí)別方法仍具有很好的識(shí)別效果,即具有很好的抗噪性能。
本文通過對樂音信號(hào)進(jìn)行時(shí)域處理和頻域分析,對樂音識(shí)別進(jìn)行了初步的探索,樂音識(shí)別的基本目標(biāo)得到了實(shí)現(xiàn)。該接收和識(shí)別方法相比一些文獻(xiàn)中進(jìn)行小波變換并濾除泛音分量的識(shí)別方法[1-2]而言,充分利用了音符的泛音分量,從而增加了檢測結(jié)果的可靠性;對所有可能出現(xiàn)頻譜峰值的頻率處利用Goertzel算法得到的單一譜線進(jìn)行表征,相比其他一些特征表示方法[8-12],則降低了運(yùn)算的復(fù)雜度;同時(shí)實(shí)際檢測過程中背景噪聲對離散譜線的影響相對較小,因而具有良好的抗噪性能。
本文的工作得到電子科技大學(xué)教學(xué)改革項(xiàng)目“通信工程大類專業(yè)挑戰(zhàn)性課程探索”與 “探索式小班教學(xué)課程-通信原理”的支持。