基于FPGA的卡拉OK打分系統(tǒng)完整設計
摘要
本文引用地址:http://www.ex-cimer.com/article/201706/348698.htm隨著生活水平的不斷提高,卡拉OK練歌房在我國已經非常普遍??ɡ璒K機的自動評分功能往往會引起一些人的興趣,覺得機器能夠自動評分是件挺神奇的事。但同時也會發(fā)現它有一個很大的缺點--評分不太準。本項目立足于近幾年出現的一些數據處理和控制集成芯片,將一些語音信號處理的專用算法應用到評分系統(tǒng)中來,以改進現行系統(tǒng),增強評分的準確性。
- 研究背景
近年來隨著我國經濟的飛速發(fā)展,人民的生活水平不斷地提高。全國各地的KTV產業(yè)蓬蓬勃勃的發(fā)展,大街小巷隨處可見KTV練歌房的身影。而我們的鄰邦韓國和日本,KTV產業(yè)更是龐大,到卡拉OK練歌房唱日本民歌甚至已經逐步演變?yōu)槿毡镜囊环N民族風俗。正是由于卡拉OK目前如此的流行,促使卡拉OK設備生產商對這個領域進行大量的投入和研發(fā),因此卡拉OK系統(tǒng)不斷地得到完善,功能也不斷地增強。從上世紀90年代開始,人們逐漸開始關注卡拉OK的自動評分功能。當演唱完一首歌以后,經過一段延遲時間,機器便能自動算出一個分數來,這始終是一件讓人覺得挺有意思的事情。
當這個想法被一個叫唐駿的中國留學生提出并付諸實踐后,立即在日本引起了巨大的轟動。人們普遍都感到非常的新奇,都想嘗試嘗試這種有趣的機器,這就造就了第一個買下這項專利的三星公司的卡拉OK設備的銷售量的飛漲,甚至有人評價說是這項發(fā)明挽救了當時處在市場危機中的三星公司。不過,過了一段時間人們發(fā)現這種機器有一種問題——評分不準。后來這項專利的發(fā)明者唐駿也公開表示,該系統(tǒng)的評分效果不是很準確,演唱時只要盡力模仿唐駿的聲音就一定能得到高分。
正是由于這套系統(tǒng)的這些缺點與不足,后來又有很多專家學者陸續(xù)投入到語音打分系統(tǒng)的研究中來,激起了一次研究卡拉OK打分系統(tǒng)的熱潮——1990年到1998年。這些研究人員主要是日本人,因為日本的卡拉OK非常的盛行。在這期間,他們申請了將近十幾項專利,不過沒有發(fā)表過一片論文,畢竟這是一個可以賺大錢的東西。這些專利可以分為以下幾類:
從時域波形出發(fā),對演唱者的音頻信號和機器自帶的原唱信號進行采樣,然后比較各個采樣點的大小,如果比較一致則得分高,否則得分低。
從能量的角度出發(fā),對演唱者的音頻信號和伴奏音樂分別用A/D進行數字化,然后對兩種數字信號的規(guī)格化能量進行比較和差異測量,最后根據兩者差異情況給分。
從頻域分析的角度出發(fā),首先將機器自帶原唱信號與伴奏樂聲進行小波變換,再將演唱者的音頻信號與伴奏音樂進行小波變換。比較兩次得到的頻譜信號的分布情況,越是一致則得分越高。
到98年以后,這一領域才逐漸開始降溫,也沒有多少新的專利或者是相關文獻出現。而且,即使是上文敘述的那些專利也沒有多少投入到商業(yè)生產中。這些專利發(fā)明有一個共同的特點,那就是計算量非常大,受限于當時的硬件水平,實現起來不是很令人滿意。這也可以理解,畢竟要是一首4分鐘左右長的歌曲唱完后需要幾十分鐘的計算后才能得到一個分數,那將是令人無法容忍的事情。
目前市場上正在銷售的那些卡拉OK機一般都帶有自動評分的功能。但基于上文分析的原因,90年代研究者申請的那些專利都沒有在這些商品中得到實際的應用。各個生產廠家正在使用的那些評價標準基本都是當年唐駿發(fā)明的那套設備,俗稱“唐駿標準”。但還是多少有一些差別,高檔一點的可能做一下FFT,進行頻頻分析;低檔次的甚至是直接比較音量的大小,音量越大得分越高。有人曾做過實驗,讓一個三歲小孩在萬利達的卡拉OK機前大聲哭著喊媽媽,結果由于小孩子聲帶小,發(fā)聲頻率高,音量又大,竟得了98分,非常匪夷所思。前一段時間流行的江蘇衛(wèi)視的《誰敢來唱歌》欄目也應有了機器打分系統(tǒng)。他們從國外引進了一套叫SAM的系統(tǒng),使用時先將每首歌的原音預錄進去,然后設置10個關鍵字點。得分的高低,取決于這10個關鍵字唱得準不準,也許別的地方唱得不特別準,但關鍵字唱對了,選手也能得高分。使用后被很多觀眾抱怨評分不準。
經過近幾十年的發(fā)展,硬件設備尤其是大規(guī)模集成電路技術取得了巨大的進步。目前最新的DSP芯片每秒能進行上百萬次的運算,XILINX的FPGA的并行處理能力也已經非常強大了。用這些芯片對音頻信號進行一些FFT運算和頻域分析,硬件方面已經沒有問題了。因此,本文提出一種基于FPGA和DSP的新型卡拉OK評分系統(tǒng)。本系統(tǒng)除了運用一些新型的集成芯片來進行運算處理,還提出了一種改進了的評分算法,來盡量減小評分所需的運算量,同時使評價結果與演唱者實際水平盡量吻合。
- 語音信號的基本特征
圖1:一段語音的時域波形圖
圖[1]是一小段語音的時域波形圖,可以看出,語音一般由三部分組成:無音段、清音段和濁音段。無音段不存在語音信號,在背景噪聲較低的情況下,幅度近似為零。清音信號的幅度很小,沒有規(guī)律,類似于隨機噪聲。濁音信號幅度較大,波形的上下起伏近似呈現周期性,稱之為準周期性。語音信號有兩個重要的時域參數:短時能量和基音周期。從圖2.1可以看出信號的幅度隨時間改變而變化顯著,短時能量可以反映這一特性,其定義如下:
(2.2.1)
短時能量的主要意義在于給出了區(qū)分清濁音的基礎,清音的短時能量明顯小于濁音的短時能量,用短時能量可以大體分辨出清音、濁音以及清音變成濁音的時刻,對于質量很高(高信噪比)的語音,也可用來區(qū)分有音與無音。
從圖[1]可以看出,濁音信號是一個準周期信號,其周期稱為基音周期,基音周期的倒數稱為基頻 (Pitch)?;糁芷趯嶋H上是聲門波往復一次的時間長度。聲門波是指聲門氣流的速率隨時間變化的函數曲線。通常而言,當聲帶閉合時,聲門處受阻聚積的氣流會逐漸沖開聲帶,氣流速率也隨之開始緩慢地增大,達到最大值后由于聲帶突然閉合,氣流速率陡降為零,如圖[2]所示。
圖2:周期性變化的聲門氣流速
不同說話人發(fā)出同一濁音時,基頻差異明顯,尤其是男女聲。一般來說,正常成人男聲的基頻在0—200Hz左右,正常成人女聲的基頻為200—450Hz,小孩的基頻比女聲的基頻還要高,老人的基頻則比正常成年男聲還要低。
語音信號還有一個很重要的特性即短時平穩(wěn)性,語音信號是非平穩(wěn)信號,但在某一個比較短的時間里,語音信號可以被看成是平穩(wěn)的。這段時間一般可取為5—50ms。短時平穩(wěn)性是語音信號處理的基礎。
- 頻域特性
對一段語音進行分幀加窗后再進行傅立葉變換就可以得到該幀語音的短時譜。清音的短時譜類似于隨機信號的頻譜。而濁音信號的短時譜有兩個特點:第一,有明顯的周期性起伏,這是因為濁音的激勵源為周期脈沖氣流;第二,頻譜中具有幾個明顯的凸起點,它們對應的頻率與聲道的諧振頻率一致。這些凸起點稱為共振峰(Formant),其頻率稱為共振峰頻率,簡稱共振峰。共振峰按頻率由低到高排列依次為第一共振峰、第二共振峰、…,一般用字母F1、F2…來表不。一般濁音中前二個共振峰對說話人的個性特征影響較大,而前兩個對于區(qū)別不同語音至關重要。
- 語音信號的特征參數
- 短時頻譜
語音信號特征在較短的時間間隔中保持基本不變,即語音信號具有時變特性,因而可以將語音信號看作是一個短時平穩(wěn)過程。語音信號具有一些重要的短時特征。短時頻譜是語音信號的一個重要的短時特性。
B:短時自相關函數
S:自相關函數Rw(г)稱為S(n)的短時自相關函數。
T:短時平均幅度
S(n)的短時平均幅度計算公式如下:
(3.1)
- 短時過零率
信號按段分割就稱為短時,段可是幀大小。過零就是信號的幅度值從正值到負值、負值到正值要經過零點,統(tǒng)計信號在一秒鐘內有幾次過零就是過零率。以短時能量為主,短時過零率為輔,可對語音信號中的清音進行較精密的檢測。
- 倒譜
倒譜是一段語音信號的一組重要參數。要計算信號SW(n)的倒譜,首先要計算SW(n)的離散傅立葉變換,然后對離散傅立葉變換的模取對數,最后再做傅立葉反變換,這樣得到的c(n)被稱做是“倒頻譜”或“倒譜”。
還有其它的一些特征參數,由于在本文中或者在音頻信號的研究中應用的較少,在這里就不一一介紹了。
- 實現原理與方案
下面來詳細敘述一下本文提出的評分算法。在敘述中將會遇到兩種音頻信號,為方便起見,我們稱卡拉OK機內自帶的專業(yè)歌手原唱的音頻信號為原唱,稱卡拉OK機的使用者演唱的音頻信號為翻唱。評價過程分為兩個部分來完成。
首先進行時域分析,判斷演唱者的協(xié)調性。由前幾段對音頻信號的特點可知,音頻信號的時域波形并不是連續(xù)的,而是一段一段的,每一段大約持續(xù)10ms—30ms,稱為一個音節(jié)。時域分析主要是針對各個音節(jié)進行分析,先用短時加窗法將信號進行分幀,然后計算出各幀信號的能量主要集中區(qū)域。比較根據兩種信號得到的能量主要集中區(qū)域,如果比較吻合則說明演唱者的協(xié)調性很好,可給一個較高的分數;如果兩種情況下的區(qū)域對得不是很齊,則說明協(xié)調性不好,得到應該給低一點。每次比較完一幀便將比較結果記錄到存儲器的特定區(qū)域。
在時域分析的同時進行頻域分析,如軟件流程圖[3]所示,時隙分配是每取出一幀,先對它進行時域分析,記錄完分析結果后,再將信號進行FFT變換,做頻域分析。主要是比較原唱和翻唱頻譜曲線的一致性,借助于頻譜分析分別比較高頻段和低頻段。根據相似性得到一個得分。
本項目的實現是通過用System Generator 進行仿真,用MatlabaZ中的Simulink來實現具體的仿真, 并將最后的結果導入到FPGA中已實現最終的目的。
圖3:軟件流程圖
當把所有幀都分析完以后,再將各幀的得分相加,進行百分制處理,即可得到總得分。最后將該得分送入液晶顯示。
其中的系統(tǒng)框圖如圖[4]所示:
圖4:系統(tǒng)框圖
評論