劉 瑩 ,趙彤洲*,江逸琪 ,柴 悅 ,李 翔
1.智能機器人湖北省重點實驗室(武漢工程大學),湖北 武漢 430205;2.武漢工程大學計算機科學與工程學院,湖北 武漢 430205;3.武漢天喻信息產(chǎn)業(yè)股份有限公司,湖北 武漢 430223
鋼琴樂音信號是由基音及泛音共同組成的,而決定其音高的是基音,因此基音周期的檢測是鋼琴音符識別的關(guān)鍵所在[1-2]?;糁芷诘臋z測的方法主要包括頻域識別和時域識別,短時自相關(guān)法是一種經(jīng)典的時域檢測算法,它計算簡單,應用廣泛,但是該算法會發(fā)生基音倍頻或半頻錯誤。在此基礎(chǔ)上,在計算自相關(guān)函數(shù)前進行三電平中心削波運算是一種經(jīng)典的改進算法[3-5]。由于該運算去除了各個音符能量相對集中在中心區(qū)域的部分,保留了在峰值附近的能量,因而可以減少計算量,加快運算速度,同時,在一定程度上避免上述錯誤的發(fā)生,進而提高識別率,但是,這種算法仍然有一定的局限性。為抑制高次諧波的干擾,文獻[6]提出進行兩次三電平中心削波和自相關(guān)處理,但這種方法增加了計算量,不適于快速計算的應用場景。此外,在用自相關(guān)法估計基音周期時,會發(fā)生幀間基音周期跳躍的現(xiàn)象,并且識別過程會受到半頻點、倍頻點和隨機錯誤點的干擾,對于這些問題前期工作者提出了各種平滑濾波算法[7-9],其目的就是過濾掉各種干擾點。文獻[10]提出將插零算法以及相應的低通濾波器應用于三電平削波的自相關(guān)法。文獻[11]提出將三電平中心削波自相關(guān)函數(shù)與循環(huán)均值幅度差分函數(shù)相結(jié)合。上述算法在處理節(jié)奏較為緩和的樂曲時,可以達到較為滿意的識別率,但是在處理節(jié)奏較快的樂曲時,識別率會迅速下降。本文提出了幀移自相關(guān)函數(shù)法,目的是在更小尺度上尋找最大自相關(guān)函數(shù),以適應快節(jié)奏樂曲,因而一定程度上避免了傳統(tǒng)算法對快節(jié)奏樂曲的漏檢、誤檢或識別錯誤等情況發(fā)生,進而可以顯著提高識別準確率。
假設(shè)zi(x)是樂音信號的時間序列w(t)加窗分幀后的第i幀信號,其中下標i表示第i幀,設(shè)每幀幀長為N。zi(x)的短時自相關(guān)函數(shù)定義為:
式中,k是時間的延遲量。
短時自相關(guān)函數(shù)具有如下性質(zhì):
1)如果 zi(x)是周期信號,周期是 P,則 Ri(k)也是周期信號,且周期相同,即有
2)當k=0時,短時自相關(guān)函數(shù)具有最大值,即在延遲量為0,±P,±2P,…時,周期信號的自相關(guān)函數(shù)也達到最大值。
3)短時自相關(guān)函數(shù)是偶函數(shù),即Ri(k)=Ri(-k)。
短時自相關(guān)函數(shù)法基音檢測的主要原理都是利用短時自相關(guān)函數(shù)的這些性質(zhì),通過比較原始信號與它延遲后的信號之間的類似性來確定基音周期的。如果延遲量等于基音周期,兩個信號就具有最大類似性;或是直接找出短時自相關(guān)函數(shù)的兩個最大值間的距離,作為基音周期的初估值。
CL是削波電平,中心削波函數(shù)C[zi(x)]的數(shù)學關(guān)系式為:
三電平中心削波法的輸入輸出函數(shù)為:
按文獻[7]的介紹,CL的取法是取 zi(x)前部100個樣點和后部100個樣點的最大幅度,從中取較小者,并乘以0.68作為門限電平CL。按式(1)得到的中心削波輸出yi(x):
式(3)中只有加(減)法,在實際運算中節(jié)省了大量時間,為實時運算創(chuàng)造了條件。
若對音頻序列w(t)端點檢測,每個端點在原序列的起始位置記為S(i),(i=1,2,…,n)。經(jīng)過準確的音符分割[12-13]后,認為一個端點對應一個基本音符的起始點,設(shè)T(i)為原音頻序列中第i個音符的基音周期,由音樂的短時平穩(wěn)性,將區(qū)間s(i)=w[S(i),S(i)+l]按定長窗計算自相關(guān)函數(shù),其中窗長l=409 6。理論上認為,第一個最大自相關(guān)函數(shù)對應的位置,即為基音的周期。由式(3)可得seg(i)的自相關(guān)函數(shù)為:
取Ri(x)最大值 Ri,max(x)=max(Ri(x)),理想狀況下,約70%音符的數(shù)據(jù)幀在經(jīng)過三電平削波和自相關(guān)函數(shù)計算后的波形圖符合如下規(guī)律:Ri,max(x)所在的點Pi,max與首個峰值點Pi(1)重合,如圖1所示,首個峰值點1與最大峰值點3為同一個點,在此情形下可得基音周期T(i)=Ii(1)。
圖1 理想狀況下自相關(guān)函數(shù)波形圖Fig.1 Waveform diagram of autocorrelation function in ideal condition
少數(shù)情況下,信號受到共振峰的影響,會出現(xiàn)倍頻波干擾,即出現(xiàn)Pi,max與Pi(1)分離的現(xiàn)象。
為消除此影響,首先需要選取合適的峰值點。圖2顯示了鋼琴曲“致愛麗絲”(For Elise)的第11個音符E4的數(shù)據(jù)幀在經(jīng)過三電平削波和自相關(guān)函數(shù)計算后的波形圖,第二個峰值點2與最大峰值點3是同一個點。
設(shè)閾值 Hi,min=Ri,max(x)/k1,其中 k1為一常量。記錄滿足條件Ri(x)>Hi,min的峰值序列Pi(j)與對應于 Ri(x)的序號 Ii(j),即 Ri(Ii(j))=Pi(j)。
k1的取值需要保證Pi(j)不包含圖2中幅值過小的峰值點1,同時也要包含幅值較大且可能正確的峰值點2。因此,峰值點2的幅值為 Pi(1),序號為 Ii(j);峰值點3的幅值為 Pi,max,序號為 Ii,max。在本文中閾值k1=2。
圖2 音符E4自相關(guān)函數(shù)波形圖Fig.2 Waveform diagram of autocorrelation function of note E4
為選出正確的峰值點,還需要進行進一步閾值判斷。取最大峰值點與首個峰值點的幅值比CR=Pi,max/Pi(1)。圖3顯示了鋼琴曲“夢中的婚禮”(MARIAGE D'AMOUR)的第35個音符D5的數(shù)據(jù)幀在經(jīng)過三電平削波和自相關(guān)函數(shù)計算后,數(shù)據(jù)幀平移前后波形對比圖。
經(jīng)過計算可得圖3(a)、3(b)中的幅值比分別為CR,1=1.66,CR,2=1.36,由此可見,當數(shù)據(jù)幀進行平移后,CR的值會發(fā)生變化。在本文中,數(shù)據(jù)幀平移指的是使選取的信號區(qū)間上界與下界都增加 64,即 平 移 后 的 信 號 區(qū) 間 s′(i)=w[S(i)+64,S(i)+l+64]。
圖3 音符D5波形(a)幀移前和(b)幀移后對比圖Fig.3 Contrast diagrams of(a)before and(b)after frame-shift of note D5 waveform
對數(shù)據(jù)幀進行多次平移后,可以發(fā)現(xiàn)其幅值比在一定范圍內(nèi)波動,如圖4所示,將上述數(shù)據(jù)幀進行8次平移得到幅值比序列CR(b)。
設(shè)閾值k2為一常量,分別統(tǒng)計CR(b)>k2的個數(shù) n1與 CR(b)<k2的個數(shù) n2,若 n2>n1,認定T(i)=Ii(1);若 n1>n2,則認定 T(i)=Ii,max。 k2的值對統(tǒng)計結(jié)果有直接影響,經(jīng)過多首樂曲的調(diào)整,取k2=1.43結(jié)果較為理想。
圖4 多次幀移的幅值比變化情況Fig.4 Amplitude ratio change of multiple frame-shift
所用樂音數(shù)據(jù)文件由軟件EveryonePiano根據(jù)曲譜合成,并通過立體聲混音內(nèi)錄鋼琴曲譜的右手演奏部分得到,其中軟件所用音源為mdaPiano。
由音樂基礎(chǔ)理論可知,音符i的標準頻率[14],其中 fa1=440為第一國際高度,n為音i到音a1間隔的半音數(shù)目,當音i比音a1低時n取負數(shù)。若經(jīng)第二節(jié)算法計算得出基音周期為T(i),則相應的基音頻率為(i)=fs/T(i),其中fs表示樂曲采樣頻率。音分[15]偏差定義為U={ x|-50<x<50} ,當音分偏差O(i)∈U 時,認為音符i識別正確。
圖5為樂曲“致愛麗絲”(For Elise)的前35個音符,用傳統(tǒng)三電平削波自相關(guān)函數(shù)法和改進的自相關(guān)函數(shù)法識別結(jié)果對比圖。
以音分偏差作為判定條件,傳統(tǒng)識別算法正確率只有77.1%,其中錯誤主要體現(xiàn)在識別結(jié)果為標準頻率的一半,如圖5(a)所示;而本文提出的幀移法可達到100%,如圖5(b)所示。
圖5 傳統(tǒng)自相關(guān)法(a)和改進自相關(guān)法(b)對“致愛麗絲”前35個音符識別結(jié)果對比Fig.5 Comparison between(a) traditional autocorrelation and(b)improved autocorrelation method for the recognition rate of the first 35 notes from“For Elise”
為檢驗本文算法的有效性,在根據(jù)曲譜合成音樂時,有意識地盡量將一個曲譜按照不同演奏頻率合成為變速音樂,目的是檢驗該算法在低、中、高三種速率條件下的識別率。但是由于合成時EveryonePiano軟件本身的快倍速模式只能達到原曲譜速率的2倍,所以,并不是每首音樂都能由慢速合成為快速音樂。
表1~3列出了用傳統(tǒng)三電平削波自相關(guān)函數(shù)法和改進自相關(guān)法,作用在更多樣本上對識別結(jié)果進行對比,對所有樂曲及其變速版本按照速率(音符數(shù)/s)分成慢速、中速和快速三組樣本。將樂曲的每秒音符數(shù)視為其平均速率v,設(shè)定當v<3時,樂曲是“慢速”的;當3≤v<4時,樂曲是“中速”的;當v≥4時,樂曲是“快速”的。最后,表4對比了慢速、中速和快速三組樂曲的識別結(jié)果。
表1~3中的最后一列是本文算法與三電平削波法的相對誤差,由表1可知,當樂曲節(jié)奏較慢時,兩種方法的相對誤差率僅在5.1%以內(nèi),說明傳統(tǒng)三電平削波方法與本文方法識別率接近,但從表2可知,當樂曲節(jié)奏較快,兩種方法的平均相對誤差率在20.6%,改進算法的準確率顯然高于傳統(tǒng)算法。從表3中可以看出,當樂曲節(jié)奏進一步加快時,兩種方法的相對誤差率更大(平均相對誤差率為64%),盡管本算法在快節(jié)奏條件下識別率有所降低,但識別率仍然顯著高于傳統(tǒng)算法。
此外,同一首曲子的不同速度也會對識別結(jié)果有所影響,如:“Faded”、“Faded(1.5 倍速)”和“Faded(2倍速)”這三首樂曲在兩種方法的識別結(jié)果隨樂曲速度增大而減小,并且當曲子速度分別為 1.9(音符數(shù)/s)、3.2(音符數(shù)/s)和 4.3(音符數(shù)/s)時,傳統(tǒng)方法識別正確率的下降幅度要大于本文方法的正確率,說明同一首曲子的速度改變對傳統(tǒng)方法的影響較大。
表1 慢速樂曲識別結(jié)果對比Tab.1 Comparisons of recognition results of low speed music
表2 中速樂曲識別結(jié)果對比Tab.2 Comparisons of recognition results of medium speed music
表3 快速樂曲識別結(jié)果對比Tab.3 Comparisons of recognition results of high speed music
而對于相同速度的不同曲子,兩種方法在識別結(jié)果上均有差異,如表1中每秒音符為2.7的曲子:“致愛麗絲”和“卡農(nóng)(0.75倍速)”,兩種方法的識別正確率不相同,局部節(jié)奏較快的樂曲,即“卡農(nóng)(0.75倍速)”識別正確率較低;甚至有些慢速樂曲的識別結(jié)果要比快速樂曲的差,如表3中“夢中的婚禮(1.25倍速)”的每秒音符數(shù)為4.2,兩種方法的正確率分別為中68.8%和85.8%,而表2中“快樂的農(nóng)夫”每秒音符數(shù)為3.3,但兩種方法的識別率僅為53.1%和79.6%,可能原因在于樂曲本身節(jié)奏不均勻。如,“夢中的婚禮(1.25倍速)”雖然每秒音符數(shù)較高(平均速度高),但樂曲節(jié)奏均勻,節(jié)奏最快部分的相鄰音符間隔時間為0.206 s,而“快樂的農(nóng)夫”雖然每秒音符數(shù)比較低(平均速度低),但樂曲節(jié)奏不均勻,整個樂曲有快有慢,使得在最快節(jié)奏部分的相鄰音符間隔時間僅為0.193 s。由于較短的時間間隔會導致前一個音符的諧波尚未充分衰弱,從而對后一個音符的諧波造成干擾。因此對于存在局部節(jié)奏快、音符密集的樂曲,不管其平均速度快慢與否,都會影響兩種方法的識別正確率。
表4 慢速和中速與快速樂曲識別結(jié)果對比Tab.4 Comparisons of recognition results of low,medium and high speed music %
提出了一種改進的自相關(guān)基音周期提取算法,該算法能較好地解決傳統(tǒng)識別方法中因為無法明確區(qū)分半頻或倍頻對基頻的影響而造成的識別誤差,當鋼琴樂音節(jié)奏較快時(v≥4),本文算法平均準確率為63.1%,比三電平削波算法高出20.2%;當鋼琴樂音節(jié)奏適中時(3≤v<4),本文算法平均準確率為88.7%,比三電平削波算法高出14.1%;當樂音節(jié)奏較慢時(v<3),文本算法平均準確率為97.1%,比三電平削波算法高出3.8%,綜合來看,本文所用的算法對以上3組慢、中和快速樂曲的平均識別準確率為83.0%,比傳統(tǒng)三電平削波算法高出12.7%。因此本文的算法在快慢節(jié)奏不同的鋼琴樂音識別中取得了較高的識別準確率,并且對快節(jié)奏鋼琴樂音的識別準確率有明顯的提升。
考慮到周圍環(huán)境聲音以及鋼琴彈奏者觸鍵方式的差異,如力度、速度、角度等,這些個體差異會對鋼琴音色有影響,進而對識別準確率有一定影響,因此,本算法僅驗證了鋼琴單鍵識別算法的有效性和可靠性,沒有考慮降噪、雙鍵樂音識別等情況。如果要使本算法有更廣泛的適應度,環(huán)境噪聲的降噪、雙鍵音頻分離及自適應閾值的訓練是今后需要研究的方向。
參考文獻:
[1]徐國慶,張彥鐸,王海暉,等.樂音旋律識別研究[J].武漢工程大學學報,2007,29(2):60-62.
[2]徐國慶,張彥鐸,王海暉.基于多分辨分解的樂音水印算法實現(xiàn)[J]. 武漢工程大學學報,2008,30(2):91-93.
[3]易克初,田斌,付強.語音信號處理[M].北京:國防工業(yè)出版社,2000:62-63.
[4]吳興銓,周金治.基于改進小波變換的語音基音周期檢測[J].自動化儀表,2017,38(6):67-70.
[5]李嘉安娜.噪聲環(huán)境下的語音端點檢測方法研究[D].廣州:華南理工大學,2015.
[6]何曉亮,賈亮,秦文健.舞蹈機器人中音樂基音頻率的提取[J]. 電子設(shè)計工程,2011,19(13):39-45.
[7]翟景瞳,王玲,杜秀偉.改進的音高識別算法[J].計算機工程與應用,2009,45(20):228-230.
[8]馬效敏,鄭文思,陳琪.自相關(guān)基頻提取算法的MATLAB實現(xiàn)[J].西北民族大學學報(自然科學版),2010,31(4):54-63.
[9]沈瑜,黨建武,王陽萍,等.加權(quán)短時自相關(guān)函數(shù)的基音周期估計算法[J].計算機工程與應用,2012,48(35):1-6.
[10]欒極,馬太,王飛,等.插值采樣增強鋼琴音高識別能力的方法[J]. 數(shù)字技術(shù)與應用,2014(6):73-75.
[11]李嘉安娜.噪聲環(huán)境下的語音端點檢測方法研究[D].廣州:華南理工大學,2015.
[12]冷嬌嬌,趙彤洲,方暉,等.基于方差穩(wěn)定性度量的樂器音頻分割算法[J].計算機工程與設(shè)計,2016,37(3):768-772.
[13]CARDINAL J,F(xiàn)IORINI S, JORETG.Minimum entropy combinatorialoptimization problems[M].New York:Springer,2012:4-21.
[14]吳晶晶.鋼琴音樂信號的特征識別[D].秦皇島:燕山大學,2009.
[15]楊帆,楊杰朝.基于LabVIEW的頻率-音分轉(zhuǎn)換設(shè)計[J]. 應用聲學,2014(6):554-559.