摘 要:設計和實現了一個噪聲環境下的哼唱信號處理系統。該系統首先利用減譜法對哼唱信號進行去噪處理,然后采用平均幅度差函數與自相關函數相結合的方法提取基頻,再對其進行兩次中值平滑處理,最后使用改進的擴窗法切分音符,并將其轉化為音高和時間來描述旋律特征。實驗結果表明,該系統具有良好的抗噪性,并能將哼唱信息準確有效地轉化成旋律特征。在測試的60個歌曲片段中,各種唱法的平均正確率達到了91.4%。
關鍵詞:哼唱檢索; 基音檢測; 音符切分; 旋律描述
中圖分類號:TP391.3 文獻標識碼:A
文章編號:1004-373X(2010)10-0033-04
Practical Humming Query Processing Method for QBH System
WAN Cheng-cheng, WANG Wei, SHU Peng, ZHANG Peng, YUAN Feng
(School of Information Science and Technology, Wuhan University of Science and Technology, Wuhan 430081, China)
Abstract:A humming signal processing system in noise environment is presented. First, the spectrum subtraction method is used to eliminate the noise in the humming signals. Then, the pitch is extracted by combining the average magnitude difference function (AMDF) and the autocorrelation function (AUTOC). Followed with two times median smoothing processing, the improved method of spread windowing is adopted to segment notes.The music melody are presented by the characteristics of pitch and time. The experiment′s results show that the humming signal can be converted to melodic characteristics exactly and effectively, besides with well antinoise performance. Among the 60 tested songs′ segments, the average right ratio comes up to 91.4%.
Keywords:query by humming; pitch detection; notes segmentation; melody presentation
0 引 言
音樂與人的聽覺感知緊密相關,它更多的傳達了一種感情,一種很難量化的情緒。音樂的這種特性決定了在音頻的分類檢索技術中所用到的歌名、演唱者等外在信息對音樂分析并不適用,而傳統的信息檢索技術大多正是基于這類文本信息的,諸如Yahoo,Google等各種搜索引擎,就是這方面的典型應用。當用戶想搜索某首歌曲,卻不知道其歌名、歌手等信息,只能哼唱其中的一個旋律片段,若僅利用當前的搜索工具將很難達到搜索目的。
哼唱檢索[1]是一類基于內容的音樂檢索方式,它根據用戶哼唱的音樂旋律、節奏等內在特征來進行檢索,從而有效地解決了上述問題。1995年Ghias等[2]展示了首個QBH(query by humming)系統,此系統將歌曲轉換為音調輪廓信息進行匹配,利用三個字符U(升高)、R(重復,即音高不變)、D(降低)來表示音樂的旋律輪廓。McNab等[3]人增加了對音樂節奏信息的提取,提高了檢索成功率。臺灣清華大學的張智星等[4]人直接使用基頻曲線進行旋律匹配,已經開發出了 “卡拉迷”多模態點歌系統。
對哼唱信號進行處理是一個QBH系統的重要組成部分,本文的工作就是對哼唱的音頻信號進行處理,獲取其旋律和節奏信息,并以某種格式描述出來,用于音樂檢索系統。
1 系統構架
本文設計的噪聲環境下哼唱信號處理系統結構如圖1所示,圖中左側為系統構架,中間為具體實現方法,右側為各模塊作用。整個系統包括哼唱信號的去噪、基音檢測、后處理、音符切分和旋律描述5個部分。系統的關鍵模塊是基音檢測和音符切分,其對系統的正確率起著決定性作用。下文將詳細介紹系統中的關鍵技術。
2 關鍵技術
2.1 減譜法去噪
QBH系統用配置有聲卡的個人電腦和普通的麥克風來錄音,不可避免地會受到周邊噪聲以及麥克風中交流電壓的影響。實際中,QBH系統常用于卡拉OK廳等環境嘈雜的地方,因此,預處理的去噪效果對后續的基頻提取非常重要。
圖1 系統結構圖
該系統采用減譜法[5-6]進行降噪處理。由于錄音前后的幾秒內噪聲的功率譜分布十分相似,故可以在用戶哼唱前,先自動錄入一段噪聲n(t),將用戶錄入的帶噪哼唱信號s(t)的功率譜S(f)減去純噪聲信號n(t)的功率譜N(f)就得到了純哼唱信號的功率譜,同時提取s(t)的相位譜,恢復相位,即可得到純哼唱信號。圖2給出了利用減譜法對采樣頻率為fs=8 000 Hz的帶噪信號進行處理的結果,從時域波形可以看出,該方法取得了較好的效果。
圖2 減譜法去噪效果圖
2.2 基音檢測
基音攜帶著具有辨意作用的信息,因而基音提取技術在整個哼唱檢索技術中起著決定性作用。從20世紀60年代以來出現了很多種基音周期檢測方法,Ross等人[7]于1977年提出傳統的自相關函數法(ACF)簡單且抗噪性能較好,但易受共振峰的干擾,單獨使用經常發生基頻估計錯誤。
Ross等[7]又提出的傳統的平均幅度差函數法(AMDF)無需乘法運算,算法復雜度小。Noll等[7]提出的倒譜法對純凈語音的基音檢測精度較高,但是算法比較復雜,且容易受噪聲影響。
本文采用了一種抗噪性能很好的自相關函數(AUTOC)和平均幅度差函數(AMDF)相結合的基音周期檢測算法[8]。該方法有效彌補了傳統基音周期檢測算法的缺點,它繼承了自相關函數的抗噪性能,抑制了自相關函數不必要的峰值,進一步加重了用于基音周期判斷的基音峰值點,提高了基音周期提取的準確性。
具體算法描述:
(1) 設置預加重過程中一階數字濾波器Η(z)=1-αz-1的參數,α=0.95,濾出有用信號ssingal。
(2) 設置分幀參數
幀長fframelength=0.03 s;幀移fframeshift=0.015 s;
幀起始結束標記變量初始化ffhead=1;ffend=fframelength;
計算幀數fframenumber=floor{[length(ssingal)-fframelength)]/fframeshift}+1;
(3) 初始化
將分幀處理后得到的ssingal(ffhead:ffend)賦值給幀信號序列xn。
(4) 計算當前幀的自相關函數和平均幅度差函數
if當前幀信號已經處理完畢then轉(5)
else求平均幅度差函數fn(k)=fn(k)+
abs(xn-xn+k);
求自相關函數rn(k)=rn(k)+xnxn+k;
求二者的商fr(k)=rn(k)/fn(k);
開始下一點的處理:n=n+1;轉(4)
(5) 提取基頻,即求fr(k)第一最大峰值mmaxm,及其下標ttem。
(6) if 所有的幀都已經處理完畢
then
算法結束
else 開始下一幀的處理:
ffhead=ffhead+fframeshift;
ffend=ffend+fframeshift轉(4);
2.3 后處理
無論采用何種基頻檢測算法,得到的基音周期軌跡和真實軌跡都不可能完全重合。最常見的情況是,一些局部段落和區域中有一個或幾個基音周期的估值偏離了正常軌跡,通常是偏離到正確值的2倍或者1/2,這些點稱之為“野點”。該系統采用2次中值平滑來去除這些“野點”。
圖3給出了兩次中值平滑的處理過程。先對由上述基頻檢測算法得到的基音周期序列進行一次3點中值濾波,從圖3(b)可看出,能夠去除絕大多數單個的野點。但是,由于中值濾波是取3個點的中值作為當前點的值,所以對于每個音符起始和結束位置的偏離到正確值1/2的點無法糾正。因此,本文將經過一次中值濾波后的基音周期序列轉換為基頻序列,再進行一次3點的中值濾波,結果如圖3(d)所示,從圖中可以看出,所有的單個野點均已糾正。如果采用5點的中值濾波,則可以糾正連續的2個野點。
2.4 音符切分
音符切分的效果直接影響到整個檢索系統的準確性,因此,音符的切分在哼唱信號處理中具有非常重要的意義。該系統采用了改進的擴窗法[9]。擴窗法利用基頻變化來切分音符,能較為精確地追蹤音高曲線的變化,當差分門限設為一個半音時可得到很好的容錯性。但是擴窗法在處理結束后窗內還存在著毛刺,不利于確定音高值的大小,故該系統在此基礎上求每個窗內的音高序列的平均值,從而使后續的旋律描述更為方便、準確。算法描述如下:
圖3 2次中值平滑法
(1) 將基頻序列轉化為對應的音高序列,即將頻率轉化為半音單位,從起始點開始以很小的幀數(本文采用6幀)對音高曲線加矩形窗,同時計算窗內音高均值;
(2) 以步長為一幀進行擴窗,并重新計算窗內音高均值,若此幀音高不為零且與擴窗前的音高均值的差值小于閾值(一個半音),則繼續擴窗,否則停止擴窗,并將此幀置零作切分標記;
(3) 尋找下一個音高不為零的點,開始下一窗的處理;
(4) 對每窗窗內的音高值求均值,消除毛刺。
圖4給出采用改進的擴窗法進行音符切分前后的對比結果。圖中可以明顯地看到,不管是哼唱旋律中不連貫的音符跳轉,還是連續的音符變化,該方法均將每個音符準確的切分開來,較為精確地跟蹤了音高的變化,同時還消除掉了切分前存在的毛刺現象。
2.5 旋律描述
本文用(音高,時間)來描述音符切分后每一個音符的旋律特征。
(1)音高:頻率可通過以下式轉換成為半音單位
semiton=12×log2(f/440)+69
式中:senmition 為半音;f為頻率。
(2)時間:僅保存音符的開始時刻,忽略結束時刻。
圖4 音符切分效果圖
這種描述方法有以下優點:
時間上的可伸縮性 即一首歌的快節奏唱法和慢節奏唱法可被當作同樣的旋律而被檢測出來。
音高上的平移性
一首歌曲可以用不同的音調演唱,普遍來說女性的音調高些和男性的音調低些,但是,都不妨礙檢索的準確性;常用的(音差,時間)[10-11]描述法中,當有一個音符唱錯時,將使前后連續兩個音高出現偏差。本文直接采用音高可以避免此類瑕疵。
3 實驗結果與分析
該系統采用C++和Matlab的混合編程法在VC++6.0的平臺上實現。在系統性能測試中,邀請了10位非專業歌唱人員參與,每位測試者分別用樂譜、“DaDaDa…”和歌詞三種方法哼唱了來自4首歌曲的60個片段,每個片段含6~12個音符。實驗統計了切分后的音符序列與標準樂譜音高曲線的匹配度以及每種錯誤類型的錯誤率。
表1 算法對不同哼唱方式片段的
正確率以及錯誤類型的統計%
哼唱方式正確率哼唱錯誤率基音檢測錯誤率音符切分錯誤率
樂譜89.20.55.85.5
DaDaDa98.60.80.40.2
歌詞86.41.36.26.1
實驗結果如上表所示,用 “DaDaDa”哼唱時所測得的音高圖效果最為理想,基本與標準的樂譜音高相匹配,同時也較好地避免漏音情況。以樂譜方式哼唱也能較好地避免漏音,但是在音高正確率上不及以“DaDaDa”方式哼唱。
而哼唱歌詞的方式漏音率較高,正確率也不及前兩者。這與預測的完全相同,大多數人在利用“DaDaDa”這種爆破音的限制唱法哼唱時能夠較為準確地唱出音高的變化,即能較好地表達出旋律的變化趨勢。樂譜哼唱法在表達旋律變化時效果較好,但是不能有效地將每個音符區分開。而哼唱歌詞的方式較之前兩者,在表達音高差異時效果不甚理想,且不容易找到音符切分點,容易漏音。
4 結 語
綜合上所述,本文設計的哼唱信號基音檢測與音符分割系統該系統具有良好的抗噪性,并能將哼唱信息準確有效地轉化成旋律特征,可以成功地應用到哼唱查詢系統的用戶端。但是該系統在基音檢測前對信號進行短時能量分析時,采用的是靜態閾值,所以當用戶錄入聲音的音量過小時,系統可能將其當成噪音濾除,從而導致漏音現象。若能將其改成自適應動態閾值,則可降低漏音率。另外,該系統沒有對哼唱信號進行端點檢測,故系統的運算量較大,可考慮在去噪后進行端點檢測,以減少系統的運算量,提高音符分割的精確度。
參考文獻
[1]王小鳳,周明全,耿國華,等.一個使用歌譜信息進行哼唱檢索的系統[J].計算機輔助設計與圖形學學報,2007,19(7):941-946.
[2]GHIAS Asif,LOGAN Jonathan. Query by humming: musical informarion retrieval in an audio database[C]. ACM Multimedia 95-Electronic Proceedings,1995.
[3]MCNAB R J. Towards the digital music library: tune retrieval from acoustic input[C]//Proceedings of the First ACM International Conference on Digital Libraries. Maryland: ACM, 1996: 11-18.
[4]王小鳳.基于內容的音樂檢索關鍵技術研究[D].西安:西北大學,2008.
[5]樸春俊,馬靜霞,徐鵬.噪音情況下語音端點檢測方法的研究[J].計算機工程與應用,2007,43(8):49-50.
[6]周曉海,王民,毛力.一種低信噪比環境下的語音端點檢測方法研究[J].現代電子技術,2009,32(10):119-121.
[7]李娟.基音周期檢測算法研究及在語音合成中的應用[D].太原:太原理工大學,2008.
[8]趙建偉,樓虹偉,徐大為.噪聲環境下的基音檢測方法[J].紅外與激光工程,2002,31(1):5-8.
[9]胡楠.音頻檢索系統中音符切分問題的研究[D].北京:中國人民大學,2007.
[10]李揚,吳亞棟,劉寶龍.一種新的近似旋律匹配方法及其在哼唱檢索系統中的應用[J].計算機研究與發展,2003,40(11):1554-1560.
[11]包先春,戴禮榮.哼唱檢索系統中一種有效的旋律匹配方法[J].計算機仿真,2008,25(4):298-304.
[12]張永亮,魯宇明,張先庭,等.一種基于線性預測和極大似然估計的基音檢測算法[J].聲學技術,2009(6):768-772.
[13]李永寧.基于自相關的語音基音周期檢測方法研究[J].福建電腦,2008(11):92-93.