本發明涉及一種基于動態時間伸縮算法的哼唱旋律識別方法,屬于語音識別領域。
背景技術:
在基于內容的音樂信息檢索研究中,哼唱旋律識別方法是其核心算法和研究重點,識別方法的性能對識別效率和識別結果有著直接的影響。在對歌曲名或者歌手不熟悉的情況,通過哼唱旋律識別我們可以十分方便快捷的根據個人哼唱查詢到相應歌曲。同時它在歌曲的曲調分析和演唱者的演唱水平打分等方面也有十分廣泛的應用。在哼唱旋律識別方法中,我們既要考慮哼唱語音中的音符增減與音高偏差現象,又要考慮用戶可以在歌曲的任意時段進行哼唱。因此采用適當的識別策略和匹配方法十分重要。
技術實現要素:
本發明的目的是提供一種基于動態時間伸縮算法的哼唱旋律識別方法,其可以有效地根據哼唱者哼唱的語音信息識別出歌曲的信息。本發明采用以下技術方案:
一種基于動態時間伸縮算法的哼唱旋律識別方法,包括以下步驟:
(1)語音信息預處理。將哼唱的語音信息進行去噪,預加重和加窗分幀等操作,提高語音信號的質量,使信號的高頻部分變得平坦,語音信號整體平穩,便于后續的分析;
(2)特征提取。對經過上述步驟處理過的語音信號進行端點檢測和mfcc系數提取等操作,可以把代表語音信號本質特征的參數抽取出來,得到哼唱輸入旋律的特征序列;
(3)基于旋律特征的快速篩選。本方法根據歌曲的半音差作為特征旋律。首先根據歌曲的音高起伏計算一首歌的最高音和最低音的半音差。刪除目標音樂庫中與待測旋律半音差相差較大的歌曲。通過此步驟,快速刪除一部分歌曲,提高旋律識別過程;
(4)基于編輯距離的快速篩選。首先將哼唱輸入旋律的特征序列依據音高差,轉換成字符串序列,與目標音樂庫中經過基于旋律特征快速匹配篩選剩下的歌曲進行計算編輯距離。剔除距離相差較大的歌曲;
(5)基于改進的動態時間伸縮算法的精確識別。在哼唱識別中,并不能簡單地將哼唱輸入旋律的特征序列與目標模板序列進行比較,因為哼唱者在哼唱中可能存在各種各樣的哼唱錯誤,如添加音符,刪除音符等,因此對模板進行時間規劃十分重要。動態時間伸縮算法通過不斷的計算兩矢量的距離以尋找最優的匹配路徑,所以得到的兩矢量是累計距離最小的規整整數,這保證了他們之間存在最大的聲學相似特征。但是動態時間伸縮算法存在檢索時間慢,所需存儲空間大等問題,因此本方法針對上述問題從端點松弛,跨句檢索,代價函數等幾個方面對動態時間伸縮算法進行改進。通過改進后的動態時間伸縮算法實現了哼唱旋律的精確識別。
本發明的優點:
1、本發明引入了跨句檢索和尾端點松弛,減少了動態時間伸縮算法所需時間的20%。
2、本發明在動態時間伸縮算法的代價函數計算中引入了音長的特征,使命中率在原有的基礎上提高了5%。
3、本發明在不限制用戶哼唱方式或者節奏較不準確的情況下,相較于原算法具有更好的魯棒性。
4、本發明針對傳統的動態時間伸縮算法在跨句檢索,端點松弛等方面進行了改進,并在算法的代價函數計算中引入了音長特征,從整體上提高了哼唱旋律識別算法的性能,提高了識別效率。
附圖說明
圖1為本發明的方法流程圖。
圖2為本發明動態時間伸縮算法原理圖。
圖3為本發明計算所需網格示意圖。
圖4為本發明尾端點松弛路徑圖。
具體實施方式
為更進一步闡述本發明為達成預定發明目的所采取的技術手段及功效,以下結合附圖及較佳實施例,對依據本發明提出的其具體實施方式、結構、特征及其功效,詳細說明如后。
如圖1所示,一種基于動態時間伸縮算法的哼唱旋律識別方法,包括以下步驟:
(1)語音信息預處理。將哼唱的語音信息進行去噪,預加重和加窗分幀等操作,提高語音信號的質量,使信號的高頻部分變得平坦,語音信號整體平穩,便于后續的分析;
(2)特征提取。對經過上述步驟處理過的語音信號進行端點檢測和mfcc系數提取等操作,可以把代表語音信號本質特征的參數抽取出來,得到哼唱輸入旋律的特征序列;
(3)基于旋律特征的快速篩選。本方法根據歌曲的半音差作為特征旋律。首先根據歌曲的音高起伏計算一首歌的最高音和最低音的半音差。刪除目標音樂庫中與待測旋律半音差相差較大的歌曲。通過此步驟,快速刪除一部分歌曲,提高旋律識別過程;
(4)基于編輯距離的快速篩選。首先將哼唱輸入旋律的特征序列依據音高差,轉換成字符串序列,與目標音樂庫中經過基于旋律特征快速匹配篩選剩下的歌曲進行計算編輯距離。剔除距離相差較大的歌曲;
(5)基于改進的動態時間伸縮算法的精確識別。在哼唱識別中,并不能簡單地將哼唱輸入旋律的特征序列與目標模板序列進行比較,因為哼唱者在哼唱中可能存在各種各樣的哼唱錯誤,如添加音符,刪除音符等,因此對模板進行時間規劃十分重要。動態時間伸縮算法通過不斷的計算兩矢量的距離以尋找最優的匹配路徑,所以得到的兩矢量是累計距離最小的規整整數,這保證了他們之間存在最大的聲學相似特征。但是動態時間伸縮算法存在檢索時間慢,所需存儲空間大等問題,因此本方法針對上述問題從端點松弛,跨句檢索,代價函數等幾個方面對動態時間伸縮算法進行改進。通過改進后的動態時間伸縮算法實現了哼唱旋律的精確識別。
上述步驟(4)基于編輯距離的快速篩選原理如下:
首先將哼唱輸入旋律的特征序列依據音高差,轉換成包含(e,u,x,s,d,b,t)的字符串序列,與目標音樂數據庫中經過基于旋律特征快速篩選剩下的歌曲計算編輯距離。編輯距離是一種基于動態規劃思想的方法,其原理是特征序列x與特征序列y的編輯距離,定義為從x變換到y所需的最少基本操作數,這里的基本操作包括:
(a)替換x中一個字符被y中對應字符串替換掉;
(b)插入y中一個字符插入到x中,使x長度加1;
(c)刪除x中一個字符,是x長度減1。
具體計算公式如下所示:
ed(a(i),b(j))=ed(a,b)ifx=y
ed(a(i),b(j))=min(ed(a(i),b(j))+2,ed(a(i-1),b(j))+1,ed(a(i),b(j-1))+1)
ifx≠y
其中a,b為兩特征字符串,ed試計算a,b減累計距離的矩陣。
上述步驟(5)基于改進的動態時間伸縮算法的精確識別原理如下:
動態時間伸縮算法通過不斷的計算兩矢量的距離以尋找最優的匹配路徑,所以得到的兩矢量是累計距離最小的規整整數,這保證了他們之間存在最大的聲學相似特征。動態時間伸縮算法原理如圖2所示。但由于在實際的匹配過程中很多實際的網格點是不需到達的,因此圖2的菱形是一種路徑限制的方式,這樣在菱形之外的格點所對應的匹配距離是不需要計算的,另外也沒有必要保存相應的數據,可以減少所需的存儲空間。同事,威力進一步減少所需的計算量,每一個格點所需的匹配計算只用到了前一列的三個網格,如圖3所示。這里假設有兩個特征序列需進行動態時間伸縮算法計算,待匹配特征序列為
x={x1,x2,·,xn},模板特征序列為y={y1,y2,·,yn},d為代價函數,具體計算公式如下:
d(i,j)=min(d(i-2,j-1)+di-2,j-1,d(i-1,j-1)+di-1,j-1,d(i-1,j-2)+di-1,j-2)
上述公式中d是代價韓式,具體計算公式如下:
di-1,j-1=abs(xi-yj)
di-2,j-1=abs(xi-1+xi-yj)+c1
di-1,j-2=abs(yj-1+yj-xi)+c2
其中,d為計算x與y之間積累距離的矩陣,c1,c2為平衡因子,目的是平衡插入或刪除音符所帶來的代價。
當兩個模板進行匹配后,即從距離累積矩陣中的最后一行的最小值進行回溯,從該最小值往前一次找到每一次所累積的前面三點的最小值,當返回起始匹配點時,則產生了一條最佳匹配路線。而匹配矩陣的最后一行的最小值,就是兩個模板的距離。
傳統的動態時間伸縮算法都是對語音進行頭對頭,尾對尾的匹配,但是用戶哼唱的旋律可能存在音符插入或者缺失的情況,因此無法確定明確的尾端點。本文提出了尾端點松弛的方法,具體原理如下:
設p為首端點未知,n為哼唱輸入旋律特征序列包含的特征個數,w1,w2分別為在長度為n的情況下所允許插入音符和刪除音符的錯誤個數。在首端點確定的情況下,尾端點區間為{(p+n-w2),(p+n+w1)},增加路徑限制條件,計算(p+n-w2)和(p+n+w1)位置之間的兩特征向量距離,選擇之間最小值并記錄,尾端點松弛路徑如圖4。
傳統用于哼唱識別的動態時間伸縮算法只考慮了音高的特征,而忽略了音長的特征。本方法為了提高哼唱識別的識別率,同時考慮到哼唱者哼唱歌曲是可能會出現哼唱節奏對于標準庫中的歌曲節奏或快或慢的情況,將音長引入了代價函數的計算。
設哼唱輸入旋律的特征序列為x={(tx1,ty1)(tx2,ty2)·(txm,tym)},目標數據庫中的歌曲特征序列為y={(rx1,ry1)(rx2,ry2)·(rxn,ryn)},txi,rxj為對應的音高差序列,tyi,ryj為對應的音長比序列。改進的代價函數計算如下:
di-1,j-1=u*abs(txi-rxj)+(1-u)*abs(tyi-ryj)*km
di-2,j-1=u*abs(txi-1+txi-rxj)+(1-u)*abs((tyi*tyi-1)/(1+tyi-1)-ryj)*km+c3
di-1,j-2=u*abs(rxj-1+rxj–txi)+(1-u)*abs((ryj*ryj-1)/(1+ryj-1)-ryi)*km+c4
其中c3,c4為平衡因子,u為引入的權值。本方法發現音高特征比音長特征更為準確,所以設定u>0.5。km為平均音高差與平均音長比的比值。
上面所述的實施方式僅僅是對本發明的優選實施方式進行描述,并非對本發明的范圍進行限定,在不脫離本發明設計精神前提下,本領域普通工程技術人員對本發明方案做出的各種變形和改進,均應落入本發明的權利要求書確定的保護范圍內。