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