馬旭峰,邢陽陽,周子程,范雯,尹鴻峰
(滄州交通學院 計算機與信息技術(shù)學院,河北黃驊,061100)
信號處理技術(shù)已經(jīng)深入到各個領(lǐng)域中去,對信號的分析也早已從經(jīng)典的時域分析方法轉(zhuǎn)變?yōu)轭l域分析方法,對于音頻信號同樣如此。音頻信號主要分為兩類:語音信號和非語音信號。非語音信號具有非常簡單的語意和語法信息,信息量低且能簡單地識別,而語音信號則更加復雜多變,對其進行時域分析往往不能發(fā)現(xiàn)更深層次的信息,但是它的頻譜對外部環(huán)境的改變則表現(xiàn)出一定的頑健性,有很明顯的聲學特性。
頻域分析的核心理論為離散傅里葉變換(Discrete Fourier Transform,DFT),是信號分析最常用的工具[1],然而DFT只是對信號進行理論上的分析,無法運用到實踐中,最主要的原因在于這種方法的計算量非常大。本文采用了它的快速實現(xiàn)算法,即快速傅里葉變換(FFT),此算法充分地利用了DFT運算中的兩個主要性質(zhì):對稱性和周期性。極大地減小了運算量,計算效率提高了近100倍。
采用DSP微處理器作為該系統(tǒng)的核心單元,利用其在數(shù)字信號處理領(lǐng)域高性能、低功耗優(yōu)點,結(jié)合一款語音編解碼芯片TLV320AIC23B(以下簡稱AIC23B)完成系統(tǒng)整體設(shè)計。
本文主要貢獻在于設(shè)計了一種基于DSP的頻譜分析系統(tǒng),可以實現(xiàn)對音頻信號的非實時的頻譜分析。
頻譜分析系統(tǒng)的硬件實現(xiàn)方案如圖 1所示。其中,TMS320VC5502型號定點DSP處理器為系統(tǒng)的核心,它的部分技術(shù)參數(shù)如下[3~6]:
圖1 系統(tǒng)硬件框架
(1)300MHz處理器主頻;
(2)2M*32位SDRAM,工作時鐘頻率為100MHz;
(3)16K*8位的EEPROM,IIC串行接口,串行位時鐘400Kbps;
(4)256K*16位Flash。
音頻信號的采集與轉(zhuǎn)換使用的是型號為AIC23B的語音芯片,該芯片內(nèi)部采用了Sigma-delta 過采樣技術(shù),可以在8K~96K采樣率范圍內(nèi)提供多種位數(shù)選擇的抽樣技術(shù)。AIC23B控制接口具有I2C和SPI兩種工作方式,由于DSP芯片內(nèi)具有I2C總線功能,因此配置AIC23B控制接口為I2C模式,實現(xiàn)了DSP處理器對語音芯片的控制通道。而AIC23B的數(shù)據(jù)接口主要的工作方式也是兩種,即IIS模式和DSP模式。本次設(shè)計配置AIC23B數(shù)據(jù)接口為DSP模式,利用DSP芯片內(nèi)部McBSP串口連接AIC23B的數(shù)據(jù)接口進行數(shù)據(jù)傳輸。
離散傅里葉變換簡稱DFT(Discrete Fourier Trans form)在數(shù)字信號處理技術(shù)中占據(jù)著極為廣泛的地位,它是處理有限長序列的有效方法。
當X(n)為一個有限長序列時,其離散傅里葉正反變換[2]為:
對于x(n)和X(k),知道二者任意一個值,就能計算出另一個。因此,可以給它們乘以相應(yīng)的內(nèi)插函數(shù)來確定連續(xù)函數(shù),因而離散傅里葉變換可以看作是連續(xù)傅里葉的近似。
但在很長一段時間內(nèi),我們無法將DFT實現(xiàn)大范圍的推廣,這是因為DFT計算起來相當繁瑣,無法高效地應(yīng)用到計算機中。直到快速傅里葉變換(FFT)算法的推出和計算機技術(shù)的進步,極大程度上壓縮了信號處理的計算時間,從而使得DFT在許多工程領(lǐng)域中得到普遍的使用。本文選擇的是按頻率抽選的基-2FFT方法。
設(shè)序列的點數(shù)為N=2L,L為整數(shù)。先將輸入部分按N的序號分成上下兩個子序列。
按照k的奇偶順序?qū)(k)分為兩部分。式(4)可變?yōu)椋?/p>
令:
則式(5)可變?yōu)椋?/p>
其中,上式(6)所反映的計算關(guān)系可由圖 2中的蝶形來形象示出。
圖2 按頻率抽選的蝶形運算示意圖
由圖可知,每一次蝶形運算都需要進行一次乘法和兩次加法運算。這樣就可以將一個N點DFT按k的奇偶分成了2個N/2點的DFT了。假如當N=8時,上述的分解過程如圖 3所示。
圖3 一個N=8點DFT分解為2個N/2點DFT運算示意圖
由于分解完成的N/2的值還是偶數(shù),因此可繼續(xù)將N/2點的DFT的結(jié)果按照奇偶分開為兩部分,這就將N/2點的DFT繼續(xù)分成為2個N/4點的DFT。這樣的分解得到的最終結(jié)果就只有加減操作,極大程度地減少了計算量。
本次用到的頻譜分析方法是基2按頻率抽選的快速傅里葉變換。FFT算法程序通過三層循環(huán)完成[1]。
第二層循環(huán):完成系數(shù)r NW的運算,也就是求旋轉(zhuǎn)因子中r。
本次使用的DSP芯片的型號屬于16位定點DSP,而本文要實現(xiàn)的運算屬于浮點型的運算。為了實現(xiàn)運算結(jié)果并達到計算精度,需要對運算的數(shù)據(jù)進行定標操作,也就是在編寫程序的時候應(yīng)該對小數(shù)點的位置進行確定。本次使用的定標方法是Q格式定標法。
具體做法是:先對所有旋轉(zhuǎn)因子都放大2^Q倍,為保證旋轉(zhuǎn)因子的差異化,Q必須大于等于L,旋轉(zhuǎn)因子被放大后,為了保證其模為1,要在最內(nèi)層循環(huán)中把每一次蝶形運算的結(jié)果右移Q位來抵消旋轉(zhuǎn)因子放大,從而得到正確的結(jié)果。通過簡單的右移位運算代替除法運算來抵消之前的放大的辦法大大地節(jié)省了運算時間。
需要注意是Q的值越大,數(shù)據(jù)精確度變高,對器件要求會高。因此,對于定點數(shù)值,它的數(shù)據(jù)區(qū)間和精度是有沖突的。在實際的算法中,要充分考慮到Q值的選取,以達到最好的狀態(tài)。本設(shè)計令Q的值為15,即旋轉(zhuǎn)因子被放大了32767倍。
本文對FFT中倒位序算法程序進行了初步改進。方法為使用了一種特殊點數(shù)的程序來代替通用的倒位序程序,具體代碼如下:
這段倒位序程序代碼是針對點數(shù)為512點的FFT變換,主要是通過移位運算來求該數(shù)的倒位序,相比于通用的倒位序程序,此代碼效率更高,測試結(jié)果如下:
以512點為例,統(tǒng)計了FFT代碼的效率,算法改進之前的統(tǒng)計結(jié)果如圖 4所示。其中,INCL TOTAL指這段代碼消耗得總的時鐘周期數(shù)。
圖4 改進之前FFT算法效率
由圖4可以看出,512點FFT所消耗的時鐘周期數(shù)為626720,與此同時main函數(shù)消耗的時鐘周期數(shù)為3999184。而本次設(shè)計的CPU主頻為240MHz(最高值為300MHz),可以計算得到FFT算法的代碼運行時間為2.611ms。
而經(jīng)過改進之后,如圖5所示,F(xiàn)FT算法程序消耗的時鐘周期數(shù)由原來的626720降低到601388,代碼運行時間由2.611ms 減少到2.505ms,算法效率提高了4.23%。
圖5 改進之后FFT算法效率
將設(shè)備和仿真器連接,通過開發(fā)板上的Line插孔向語音芯片內(nèi)輸入音頻,在CSS集成開發(fā)環(huán)境下可以看到變換結(jié)果。信號采集后的時域、幅值、功率、對數(shù)等圖形結(jié)果如圖6~圖10所示。
圖6 語音信號的時域圖
圖7 FFT變換圖譜
圖8 幅值譜
圖9 功率譜
通過以上這幾幅圖形可以對該信號進行分析。其中,幅值圖表示了該語音信號各個諧波分量的幅值隨頻率的線性分布情況。功率譜表示的是功率,也是語音信號各個諧波頻率幅度的自乘,其反映出的是頻率的成分。當要觀察所有頻率成分時,一般采用更接近于人耳實際聽音時感覺的對數(shù)譜。
圖10 對數(shù)譜
針對各個工程領(lǐng)域?qū)π盘栴l譜分析的需求,設(shè)計了一種基于DSP的頻譜分析系統(tǒng),系統(tǒng)依靠了DSP微處理器在信號處理過程中運算高效的特點,采用C語言編寫了各個寄存器配置程序以及FFT算法程序,改進并提高了FFT算法的執(zhí)行效率。本系統(tǒng)目前只針對音頻信號實現(xiàn)了對非實時采集的音頻信號的頻域變換,變換結(jié)果清晰地展示了信號的頻域特征,具有直觀的可視化效果。