基于FPGA的基音檢測算法的設計與實現(xiàn)
關鍵詞:DSP;FPGA;基音周期;自相關法
1 引言
傳統(tǒng)的DSP處理器的硬件結構的不可變性已成為DSP處理器一個難以突破的瓶頸。隨著達數(shù)百萬門高密度的FPGA的出現(xiàn),F(xiàn)PGA在原有的高密度的邏輯宏單元的基礎上嵌入了許多面向DSP的專用硬核模塊,結合大量可配置于FPGA硬件結構中的參數(shù)化的DSP IP軟核,DSP開發(fā)者能十分容易地將整個DSP應用系統(tǒng)實現(xiàn)在一片F(xiàn)PGA中,從而實現(xiàn)了所謂的可編程SOC系統(tǒng),即SOPC,它具有靈活的用戶可定制性。
基音周期估值是語音處理中的一個十分重要的問題。基音檢測器可用于聲碼器、說話人確認和辨認系統(tǒng)以及有生理缺陷的人用的輔助用具,這使得基音周期估值在語音信號處理領域中占有舉足輕重的地位,因此將它硬件化,提高其執(zhí)行效率以適應其應用場合的需要將是一件很有意義的事情。
2基音周期提取算法的確定及軟件實現(xiàn)
2.1算法概述
基音周期估值是語音處理中的一個十分重要的問題。目前有多種基音周期提取算法,這些方法從不同角度來提出其解決方案,以克服語音信號中如噪音、說話人差異等對特征提取時的干擾,但都有它們的局限性,所以可以說,對各種說話人、廣泛的應用及使用環(huán)境都能給出滿意結果的有效的基音檢測方法至今還沒有出現(xiàn)。
本文選取了一種目前較成熟的通過自關函數(shù)進行基音周期檢測的算法。其整個過程全面涉及了語音信號時域處理方法中的“能量分析”、“過零分析”及“相關分析”三大分析技術。其算法的可行性已在MATLAB中進行軟件模擬。
2.2系統(tǒng)框圖
考慮到背景噪聲和提取結果出現(xiàn)跳變等問題,整個系統(tǒng)最終確定由下面三個部分構成:(i)端點檢測模塊;(ii)基音頻率提取模塊;(iii)平滑處理模塊。其工作流程可由圖1表示。
圖1 基音檢測系統(tǒng)工作流圖
本文選取了32kHz采樣頻率PCM音頻格式的wav文件作為系統(tǒng)的輸入數(shù)據(jù),輸出為每幀的基音頻率值。最后通過對相關參數(shù)(比如端點檢測模塊中所確定的雙能量門限及雙過零率門限,基音檢測模塊中的清濁判別門限以及平滑處理模塊中的滑動窗長)的不斷調整,可以很好地解決清濁誤判,語音段數(shù)據(jù)漏判以及尖峰的出現(xiàn)等問題。
3基音周期特征提取算法的DSP實現(xiàn)
3.1 DSP Builder開發(fā)環(huán)境的確定
DSP Builder可以幫助設計者完成基于FPGA的DSP系統(tǒng)設計。除了圖形化的系統(tǒng)建模外,DSP Builder還可以自動完成大部分的設計過程和仿真,直至把設計文件下載到DSP開發(fā)板上。利用MatlabDSP Builder進行DSP模塊設計是SOPC技術的一個組成部分。利用DSP Builder和基本Nios CPU,用戶可以根據(jù)設計項目的具體要求,隨心所欲地構建自己的DSP處理器系統(tǒng),而再也不必拘泥于其他DSP公司已上市的有限款式的DSP處理器。
3.2系統(tǒng)整體分析及模塊劃分
從DSP模塊的頂層來看,該模塊就是完成語音信號的采集,然后以一定的頻率輸出從各幀中提取的基音頻率值。圖2是整個DSP系統(tǒng)的頂層模塊圖。
圖2 整個DSP系統(tǒng)的頂層模塊
d[1].[20]:輸入。歸一化的語音采樣信號值,取小數(shù)點后20位(二進制)
ena:輸入。輸入使能信號,當該信號有效時,模塊讀入d[1].[20]端口的信號。
rd:輸入。讀信號,當該信號有效時,提取的基音頻率值將從Out[8:0]口被讀出。
CS:輸入。片選。
Out[8:0]:輸出?;纛l率值的輸出端口,9位無符號數(shù)。該端口的數(shù)據(jù)讀出受rd控制。
data_available:輸出。當基音頻率提取完畢時,該端口置1,此時對數(shù)據(jù)的讀出才為有效數(shù)據(jù),否則產(chǎn)生未知結果。
按照算法部分的劃分,在DSP實現(xiàn)部分仍采用整個系統(tǒng)由端點檢測模塊,基音頻率提取模塊和平滑處理模塊三大子模塊的構成方式,但不同的是端點檢測模塊和基音頻率提取模塊采用并行處理方式,由于這兩個模塊的功能相對獨立,最后進行平滑后處理。整個系統(tǒng)的互連邏輯可由圖3表示。
圖3 基音周期提取、端點檢測、平滑處理三大模塊的互連邏輯圖
基音頻率提取模塊根據(jù)輸入數(shù)據(jù)將提取的基音頻率值存入一FIFO中,端點檢測模塊將提取到的語音文件中的所有語音段的始末端點存入兩個FIFO中,各語音段的起始點存入FIFO1中,終止點存入FIFO2中,當兩個模塊將結果全部存入相應的FIFO中,三個FIFO開始同步工作,與基音頻率提取模塊相連的FIFO的當前輸出是提取出的該幀的基音頻率,而FIFO1和FIFO2的當前輸出表示某一個語音段的始末端點,當前掃描幀或尚未進入這兩個端點所界定的幀范圍,或正處于這個幀范圍之中。對于前者,這應通過判斷邏輯使2-1多路選擇器將基音頻率置0;對于后者,應通過判斷邏輯使2-1多路選擇器選取基音頻率提取模塊所提取出的基音頻率。判斷邏輯的另一任務是當當前掃描幀已跨出兩端點界定的幀范圍時,使FIFO1和FIFO2讀出新一對端點,即讀出下一個語音段的始末端點。最終的各幀的基音頻率通過平滑處理模塊處理后送入另一FIFO,等待讀信號將其讀出。
3.3詳細設計
基音頻率提取模塊的主要任務是根據(jù)采樣信號按照自相關法進行基音周期提取,然后以一定頻率輸出提取到的各幀的基音頻率。對于基音頻率提取模塊,主要由五大子模塊構成:濾波器模塊、幀緩存模塊、削波門限電平提取模塊、削波模塊(中心削波,三電平削波)、互相關值提取模塊。濾波器模塊對采樣信號進行900Hz的低通濾波,以確保處理以后的信號只含有第一共振峰以下的基波和諧波分量,DSP Builder為設計者提供了數(shù)字信號處理中常用的一些MegaCore核,這里可以根據(jù)設計直接調用其中的fir_compiler并進行參數(shù)化設置,極大地簡化了設計過程;幀緩存模塊對處理后的數(shù)據(jù)進行分幀,這里需確定幀移(相鄰幀間的數(shù)據(jù)重疊,本文選取幀移為1/2幀);削波門限提取模塊根據(jù)自相關法的算法要求完成對一幀的數(shù)據(jù)的削波門限電平的提取;削波模塊根據(jù)提取出的削波門限電平完成中心削波和三電平削波,同時完成該幀短時能量的計算(考慮到短時能量計算的相對獨立性,該任務從互相關值提取模塊中分離出來);互相關值提取模塊的主要任務是完成互相關值 (k=64,65,…,500)(由于選取的是30階低通濾波器,取求和下限為31,1280為根據(jù)所選取的測試對象而確定的幀的大小,k當取值64-500時恰對應于基音頻率的500Hz-64Hz,y´為相應y的三電平值)的計算,由于對每一個R(k)的計算,都要幾乎掃描完整個幀,故其龐大的計算量導致此模塊在執(zhí)行效率上將成為整個基音頻率提取部分的瓶頸。為了避免額外的空間開銷,若采用串行解決方式(即計算完R(64)再計算R(65),計算完R(65)再計算R(66),依此類推),則該模塊需工作在一個更高的時鐘頻率上,而一個系統(tǒng)中對一部分模塊進行一個大幅度的工作頻率的提高,將會導致Simulink仿真效率的大幅下降,這里通過并行方式解決該問題,雖然這需要花費更多的器件(通過復用多個基本運算單元,所有運算單元同時進行計算,每個基本運算單元完成一個R(k)的計算),但換取時間效率上的提高還是值得的。這種處理方法只需對各幀數(shù)據(jù)進行一次掃描即可同時得到R(64),R(65),…,R(500)的處理結果。設計思想是每掃描完一個數(shù)據(jù),就應使其參與到所有互相關值的計算中而避免被再次掃描。實現(xiàn)途徑是:當前的三電平值同時送往所有的基本運算單元,而中心削波值只在開始送入第一個基本運算單元,而其它的基本運算單元的中心削波值由其前一個基本運算單元的中心削波值經(jīng)一個周期的延遲而得到,這樣中心削波值將會由第一個基本運算單元通過延遲一級一級傳到最后一個。其時序如圖4所示(圖中數(shù)字表示幀序號),這樣各基本運算單元的輸出即為相應的互相關值R(k) (k=64,65,…,500),達到了僅對中心削波值和三電平值掃描一次便可計算出所有互相關值的效果,大大提高了運行的時間效率。
端點檢測模塊由三個核心部分構成:各幀過零率的提取,各幀短時能量的提取和一個以
圖4 各基本元算單元所采集到的中心削波值和三電平值的時序圖
狀態(tài)機為核心的狀態(tài)轉換邏輯,狀態(tài)機根據(jù)計算出的各幀過零率及短時能量標識當前幀所處的狀態(tài)(靜音段,過渡段,語音段,結束),并根據(jù)觸發(fā)條件完成狀態(tài)轉移以標記各語音段的始末端點。
平滑后處理模塊依據(jù)中值濾波平滑處理,采用5點長的滑動窗口對提取出的基音頻率進行后處理。
4 DSP加速模塊與NIOS的整合及綜合仿真測試
4.1基于Simulink的仿真
各模塊整合后,即可添加激勵及信號接收終端進行Simulink仿真。
4.2 處理器系統(tǒng)的構建
通過DSP Builder設計出的DSP模塊可以成為單片F(xiàn)PGA電路系統(tǒng)中的一個組成部分,以擔任某個局部電路的功能,另一方面,也可以直接通過DSP Builder為Nios嵌入式處理器設計各類加速器,從而成為Nios系統(tǒng)的一個接口設備,與整個片內嵌入式系統(tǒng)融為一體,使得Nios的通用性和DSP加速模塊的專用性恰到好處地結合在了一起,使DSP處理器系統(tǒng)的靈活性得到了最大程度的體現(xiàn)。當Nios接收到對語音數(shù)據(jù)進行基音頻率提取的任務時,它會將需處理的原始數(shù)據(jù)送往DSP加速模塊,DSP加速模塊對數(shù)據(jù)進行處理并將處理結果轉交給Nios處理器,由Nios送往相應終端進行結果顯示或進行其它處理,從而構建起整個SOPC系統(tǒng)。需要特別說明的是,Nios系統(tǒng)的所有外設都是通過Avalon總線與Nios CPU相接的,DSP加速模塊也不例外,該模塊若與Nios進行信息交換,必須通過Avalon總線,也就是說,所設計出的DSP模塊應該有與Avalon總線的接口。DSP Builder提供了SOPC Builder Links庫,其中的AVALON Ports提供了各種與Avalon總線相連接的功能端口,本設計需根據(jù)所完成的DSP模塊各端口的功能為其添加Avalon總線接口。
DSP模塊功能驗證后,即可加載DSP Builder中的核心模塊“SignalCompiler”,以完成模型分析、 MDL到VHDL的轉化、綜合及適配。最后在SOPC Builder中完成將該模塊與Nios的整合,以使DSP能成為掛接到Nios的一個硬件加速模塊。此后即可完成下載,并在Nios的集成開發(fā)環(huán)境(IDE)中編寫測試程序對整個處理器系統(tǒng)進行測試。
4.3 性能評估
經(jīng)分析,從輸入最后一個數(shù)據(jù)到開始陸續(xù)得到最終結果(由于算法的限制,該系統(tǒng)并不是一個實時系統(tǒng)),需N*T/2時間(T為一個基本工作周期,N為語音數(shù)據(jù)的幀數(shù)),若從DSP向外輸出數(shù)據(jù)的周期仍為T,那么送出數(shù)據(jù)共需N*T時間,兩者之和為3N*T/2,即從輸入最后一個數(shù)據(jù)到所有數(shù)據(jù)輸出,共需時間3N*T/2。這種執(zhí)行效率與軟件相比,其優(yōu)勢是顯而易見的,從理論上講,軟件沒有執(zhí)行上的并行性可言,也就是說對于順序執(zhí)行的子函數(shù)而言,只有前一個子函數(shù)執(zhí)行完畢,后一個子函數(shù)才能執(zhí)行,比如端點檢測部分和基音頻率提取部分只能順序執(zhí)行,而不像硬件那樣,端點檢測與基音頻率提取可以分成兩個獨立的模塊同時并行地對輸入數(shù)據(jù)進行處理。對于語音內容為“你好”的1.1s的語音數(shù)據(jù)而言,Matlab的軟算法的平均耗時在0.8-0.85秒之間(運行環(huán)境為1.73GHz主頻,256MB內存)。但若令T=1/1.73G,代入到3N*T/2中(N=54),其延遲只有4.3610-8秒,可見差異的顯著。而這種差異將隨N的增大而更加顯著??梢?,該算法的DSP實現(xiàn)使整個執(zhí)行效率有了大幅度的提高,達到了預期的效果。
5 結語
本文嘗試采用基于Altera硬件設計的一套新的設計流程和設計思路,不同于傳統(tǒng)的在MAX-PLUS II和Quartus II中面向RTL級的硬件設計思路,轉向了以MatlabSimulink為基本平臺,以DSP Builder為其中的Blockset的面向系統(tǒng)級和算法級的硬件設計思路,同時充分利用了Simulink的強大的仿真功能,而在將系統(tǒng)級模型向RTL級模型轉化時,完全通過DSP Builder的核心模塊SignalCompiler自動實現(xiàn),并同時完成綜合和適配,若采用自動設計流程,甚至可以在Simulink中完成下載。這種設計思路有益于復雜算法的硬件化設計,將設計者的視線從Quartus中更多地轉移到了MatlabSimulink中,使設計者考慮問題的著眼點從傳統(tǒng)圍繞底層的硬件實現(xiàn)轉移到上層面向算法的實現(xiàn)和整個系統(tǒng)的構成。而在原來需要考慮過多的底層實現(xiàn)問題,通過SignalCompiler模塊的強大功能,只是一蹴而就的事。
本文作者創(chuàng)新點在于通過一套新的設計流程,面向最終的應用(即實現(xiàn)基音周期特征的提取),并充分利用FPGA的優(yōu)勢,實現(xiàn)了徹底的硬件執(zhí)行架構的設計,而不同于以往更多的周旋于軟件層面的編程,同時以DSP Builder作為開發(fā)平臺,按照自頂向下的設計思想,極大地簡化了DSP核的設計,同時使算法的DSP設計結果實現(xiàn)了執(zhí)行效率上的飛躍。
參考文獻:
1 L.R.拉賓納,R.W.謝弗. 語音信號數(shù)字處理. 北京:科學出版社,1983
2 易克初,田斌,付強. 語音信號處理. 北京:國防工業(yè)出版社,2000
3 王朝英,馮新喜. 信號處理原理. 北京:清華大學出版社,北京交通大學出版社,2005
4 鄒鯤,袁俊泉,龔享銥. MATLAB 6.x信號處理. 北京:清華大學出版社,2002
5 張智星. MATLAB程序設計與應用. 北京:清華大學出版社,2002
6 何強,何英. MATLAB擴展編程. 北京:清華大學出版社,2002
7 潘松,黃繼業(yè),曾毓. SOPC技術實用教程. 北京:清華大學出版社,2005
8 彭澄廉,周博,丘衛(wèi)東,陳燕,周學功,方茁. 挑戰(zhàn)SOC-基于Nios的SOPC設計與實踐. 北京:清華大學出版社,2004
9 潘松,黃繼業(yè),王國棟. 現(xiàn)代DSP技術. 西安:西安電子科技大學出版社,2003
10 Altera Corp. DSP Builder Reference Manual,2005
11 Altera Corp. DSP Builder User Guide,2005
12 楊守良. 利用Matlab/DSP Builder實現(xiàn)DDS的設計. 微計算機信息,2006, 7-2:211-212
評論