馬旭峰,邢陽陽,周子程,范雯,尹鴻峰
(滄州交通學院 計算機與信息技術學院,河北黃驊,061100)
信號處理技術已經深入到各個領域中去,對信號的分析也早已從經典的時域分析方法轉變為頻域分析方法,對于音頻信號同樣如此。音頻信號主要分為兩類:語音信號和非語音信號。非語音信號具有非常簡單的語意和語法信息,信息量低且能簡單地識別,而語音信號則更加復雜多變,對其進行時域分析往往不能發現更深層次的信息,但是它的頻譜對外部環境的改變則表現出一定的頑健性,有很明顯的聲學特性。
頻域分析的核心理論為離散傅里葉變換(Discrete Fourier Transform,DFT),是信號分析最常用的工具[1],然而DFT只是對信號進行理論上的分析,無法運用到實踐中,最主要的原因在于這種方法的計算量非常大。本文采用了它的快速實現算法,即快速傅里葉變換(FFT),此算法充分地利用了DFT運算中的兩個主要性質:對稱性和周期性。極大地減小了運算量,計算效率提高了近100倍。
采用DSP微處理器作為該系統的核心單元,利用其在數字信號處理領域高性能、低功耗優點,結合一款語音編解碼芯片TLV320AIC23B(以下簡稱AIC23B)完成系統整體設計。
本文主要貢獻在于設計了一種基于DSP的頻譜分析系統,可以實現對音頻信號的非實時的頻譜分析。
頻譜分析系統的硬件實現方案如圖 1所示。其中,TMS320VC5502型號定點DSP處理器為系統的核心,它的部分技術參數如下[3~6]:

圖1 系統硬件框架
(1)300MHz處理器主頻;
(2)2M*32位SDRAM,工作時鐘頻率為100MHz;
(3)16K*8位的EEPROM,IIC串行接口,串行位時鐘400Kbps;
(4)256K*16位Flash。
音頻信號的采集與轉換使用的是型號為AIC23B的語音芯片,該芯片內部采用了Sigma-delta 過采樣技術,可以在8K~96K采樣率范圍內提供多種位數選擇的抽樣技術。AIC23B控制接口具有I2C和SPI兩種工作方式,由于DSP芯片內具有I2C總線功能,因此配置AIC23B控制接口為I2C模式,實現了DSP處理器對語音芯片的控制通道。而AIC23B的數據接口主要的工作方式也是兩種,即IIS模式和DSP模式。本次設計配置AIC23B數據接口為DSP模式,利用DSP芯片內部McBSP串口連接AIC23B的數據接口進行數據傳輸。
離散傅里葉變換簡稱DFT(Discrete Fourier Trans form)在數字信號處理技術中占據著極為廣泛的地位,它是處理有限長序列的有效方法。
當X(n)為一個有限長序列時,其離散傅里葉正反變換[2]為:
對于x(n)和X(k),知道二者任意一個值,就能計算出另一個。因此,可以給它們乘以相應的內插函數來確定連續函數,因而離散傅里葉變換可以看作是連續傅里葉的近似。
但在很長一段時間內,我們無法將DFT實現大范圍的推廣,這是因為DFT計算起來相當繁瑣,無法高效地應用到計算機中。直到快速傅里葉變換(FFT)算法的推出和計算機技術的進步,極大程度上壓縮了信號處理的計算時間,從而使得DFT在許多工程領域中得到普遍的使用。本文選擇的是按頻率抽選的基-2FFT方法。
設序列的點數為N=2L,L為整數。先將輸入部分按N的序號分成上下兩個子序列。
按照k的奇偶順序將X(k)分為兩部分。式(4)可變為:
令:
則式(5)可變為:
其中,上式(6)所反映的計算關系可由圖 2中的蝶形來形象示出。

圖2 按頻率抽選的蝶形運算示意圖
由圖可知,每一次蝶形運算都需要進行一次乘法和兩次加法運算。這樣就可以將一個N點DFT按k的奇偶分成了2個N/2點的DFT了。假如當N=8時,上述的分解過程如圖 3所示。

圖3 一個N=8點DFT分解為2個N/2點DFT運算示意圖
由于分解完成的N/2的值還是偶數,因此可繼續將N/2點的DFT的結果按照奇偶分開為兩部分,這就將N/2點的DFT繼續分成為2個N/4點的DFT。這樣的分解得到的最終結果就只有加減操作,極大程度地減少了計算量。
本次用到的頻譜分析方法是基2按頻率抽選的快速傅里葉變換。FFT算法程序通過三層循環完成[1]。
第二層循環:完成系數r NW的運算,也就是求旋轉因子中r。
本次使用的DSP芯片的型號屬于16位定點DSP,而本文要實現的運算屬于浮點型的運算。為了實現運算結果并達到計算精度,需要對運算的數據進行定標操作,也就是在編寫程序的時候應該對小數點的位置進行確定。本次使用的定標方法是Q格式定標法。
具體做法是:先對所有旋轉因子都放大2^Q倍,為保證旋轉因子的差異化,Q必須大于等于L,旋轉因子被放大后,為了保證其模為1,要在最內層循環中把每一次蝶形運算的結果右移Q位來抵消旋轉因子放大,從而得到正確的結果。通過簡單的右移位運算代替除法運算來抵消之前的放大的辦法大大地節省了運算時間。
需要注意是Q的值越大,數據精確度變高,對器件要求會高。因此,對于定點數值,它的數據區間和精度是有沖突的。在實際的算法中,要充分考慮到Q值的選取,以達到最好的狀態。本設計令Q的值為15,即旋轉因子被放大了32767倍。
本文對FFT中倒位序算法程序進行了初步改進。方法為使用了一種特殊點數的程序來代替通用的倒位序程序,具體代碼如下:

這段倒位序程序代碼是針對點數為512點的FFT變換,主要是通過移位運算來求該數的倒位序,相比于通用的倒位序程序,此代碼效率更高,測試結果如下:
以512點為例,統計了FFT代碼的效率,算法改進之前的統計結果如圖 4所示。其中,INCL TOTAL指這段代碼消耗得總的時鐘周期數。

圖4 改進之前FFT算法效率
由圖4可以看出,512點FFT所消耗的時鐘周期數為626720,與此同時main函數消耗的時鐘周期數為3999184。而本次設計的CPU主頻為240MHz(最高值為300MHz),可以計算得到FFT算法的代碼運行時間為2.611ms。
而經過改進之后,如圖5所示,FFT算法程序消耗的時鐘周期數由原來的626720降低到601388,代碼運行時間由2.611ms 減少到2.505ms,算法效率提高了4.23%。

圖5 改進之后FFT算法效率
將設備和仿真器連接,通過開發板上的Line插孔向語音芯片內輸入音頻,在CSS集成開發環境下可以看到變換結果。信號采集后的時域、幅值、功率、對數等圖形結果如圖6~圖10所示。

圖6 語音信號的時域圖

圖7 FFT變換圖譜

圖8 幅值譜

圖9 功率譜
通過以上這幾幅圖形可以對該信號進行分析。其中,幅值圖表示了該語音信號各個諧波分量的幅值隨頻率的線性分布情況。功率譜表示的是功率,也是語音信號各個諧波頻率幅度的自乘,其反映出的是頻率的成分。當要觀察所有頻率成分時,一般采用更接近于人耳實際聽音時感覺的對數譜。

圖10 對數譜
針對各個工程領域對信號頻譜分析的需求,設計了一種基于DSP的頻譜分析系統,系統依靠了DSP微處理器在信號處理過程中運算高效的特點,采用C語言編寫了各個寄存器配置程序以及FFT算法程序,改進并提高了FFT算法的執行效率。本系統目前只針對音頻信號實現了對非實時采集的音頻信號的頻域變換,變換結果清晰地展示了信號的頻域特征,具有直觀的可視化效果。