孔令甲
(中國(guó)電子科技集團(tuán)公司第十三研究所 河北省石家莊市 050000)
FFT 是離散傅立葉變換的快速處理算法。實(shí)際工程應(yīng)用中,部分信號(hào)在時(shí)域上沒(méi)有明顯的特征,變換到頻域,會(huì)表現(xiàn)出比較明顯的特征。假設(shè)采樣頻率為Fs,信號(hào)頻率F,采樣點(diǎn)數(shù)為N,那么FFT 運(yùn)算的結(jié)果就是N 點(diǎn)的復(fù)數(shù)。運(yùn)算結(jié)果的每一個(gè)點(diǎn)對(duì)應(yīng)著一個(gè)頻率點(diǎn),而這個(gè)點(diǎn)的模值,是該頻率位置處的幅頻特性。
實(shí)際運(yùn)用中,系統(tǒng)在不同的場(chǎng)景中可能需要變換時(shí)序序列的處理長(zhǎng)度,在高分辨率場(chǎng)合可能需要較長(zhǎng)序列的FFT運(yùn)算,而對(duì)實(shí)時(shí)處理能力較高的場(chǎng)合則對(duì)處理時(shí)間要求更高,則通過(guò)降低FFT 運(yùn)算點(diǎn)數(shù),來(lái)達(dá)到要求。實(shí)際應(yīng)用中面臨更快速或者更高精度的頻譜分析要求,應(yīng)此可配置點(diǎn)數(shù)的FFT 處理器具有較大的應(yīng)用范圍。
FFT 比較普遍的實(shí)現(xiàn)方法是基-2 和基-4FFT算法,radix-2 碟形算法由1 個(gè)復(fù)數(shù)乘法和2 個(gè)復(fù)數(shù)加法組成,而radix-4 碟形算法由3 個(gè)復(fù)數(shù)乘法和8 個(gè)復(fù)加組成?;?FFT 算法結(jié)構(gòu)簡(jiǎn)單,實(shí)現(xiàn)難度相對(duì)較低,可以完成任意2點(diǎn)數(shù)據(jù)的FFT 運(yùn)算。但是運(yùn)算時(shí)間長(zhǎng),硬件消耗較大?;?算法相對(duì)處理速度更快,可以更好的滿足實(shí)時(shí)性的要求,但是算法結(jié)構(gòu)相對(duì)復(fù)雜,靈活性更差,只能完成4 的整數(shù)次冪的運(yùn)算。
基于此,各研究者提出了運(yùn)算速度更快和硬件消耗更小的改進(jìn)算法。一些研究者提出了混合基、分裂基等高基混合基算法,可調(diào)節(jié)點(diǎn)數(shù)位寬、可調(diào)精度結(jié)構(gòu)等方案來(lái)改善radix-2FFT 算法效率。
高基和混合基算法可以達(dá)到更高的運(yùn)算速度和較小的硬件消耗,但是如果FFT 運(yùn)算點(diǎn)數(shù)是不固定的,部分分裂基和高基算法無(wú)法同時(shí)適用不同點(diǎn)數(shù)的FFT 變換要求。
因此,本文基于基2FFT算法,提出了一種可配置點(diǎn)數(shù)的FFT 硬件實(shí)現(xiàn)結(jié)構(gòu)。該算法實(shí)現(xiàn)結(jié)構(gòu)簡(jiǎn)單,運(yùn)算點(diǎn)數(shù)可配置,可以完成任意2點(diǎn)的FFT 運(yùn)算。另外,由于其特殊的碟形運(yùn)算結(jié)構(gòu),可以減少乘虛部操作帶來(lái)的硬件消耗。
1.1.1 DFT
N 為離散傅立葉變換的序列長(zhǎng)度。FFT 是DFT 的一種快速變換算法,大大減少了運(yùn)算量,可以快速完成時(shí)域到頻域的轉(zhuǎn)換,完成頻譜分析,在工程中有廣泛的應(yīng)用。基2 FFT 算法由于其算法簡(jiǎn)單,結(jié)構(gòu)易于實(shí)現(xiàn),應(yīng)用廣泛。
1.1.2 基2 FFT 算法
由上式可知,基2-FFT 算法每一級(jí)運(yùn)算包含兩次碟形,第一級(jí)旋轉(zhuǎn)因子乘法運(yùn)算由乘虛部運(yùn)算(*(-j))代替原來(lái)基2FFT 算法的復(fù)數(shù)運(yùn)算,乘虛部運(yùn)算只需要將實(shí)部和虛部互換,虛部取反即可完成運(yùn)算,而復(fù)數(shù)乘法運(yùn)算需要完成多次乘法和加法運(yùn)算,大大減少了運(yùn)算量。具體需要進(jìn)行乘虛部運(yùn)算的位置由當(dāng)前運(yùn)算級(jí)數(shù)和所處序列的位置共同決定。
根據(jù)以上公式推導(dǎo)可以得到基2-FFT 算法運(yùn)算流圖如圖1 所示。
圖1: 基22-FFT 算法運(yùn)算流圖
16 點(diǎn)基2FFT 算法需要完成兩級(jí)運(yùn)算,每級(jí)有2 組碟形運(yùn)算組成,但是每級(jí)運(yùn)算的第一組碟形運(yùn)算的復(fù)數(shù)乘法由乘虛部運(yùn)算(圖中模塊C)替代,乘虛部運(yùn)算只需要將數(shù)據(jù)的實(shí)部和虛部互換,不存在乘法運(yùn)算,大大減少了運(yùn)算復(fù)雜度。每一級(jí)運(yùn)算的碟形2 模塊運(yùn)算包含一次復(fù)數(shù)乘法運(yùn)算,可以通過(guò)CORDIC 算法完成?;?FFT 算法運(yùn)算流圖結(jié)構(gòu)與基2 FFT 算法基本類(lèi)似,實(shí)現(xiàn)結(jié)果簡(jiǎn)單,模塊可復(fù)用,硬件易于實(shí)現(xiàn)。
基2FFT 算法適用于2點(diǎn)的序列,其最后一級(jí)的形式由序列點(diǎn)數(shù)決定,如果N 為4 的整數(shù)次冪,最后一級(jí)包含碟形BFI 和BF2,如果N 只為2 的整數(shù)次冪,則最后一級(jí)只包含BF1。因此,運(yùn)用基2FFT 算法設(shè)計(jì)的FFT 模塊可以實(shí)現(xiàn)2點(diǎn)數(shù)的自由配置選擇,可以用在可變點(diǎn)數(shù)的FFT處理器中。
利用基2FFT 算法完成可配置點(diǎn)數(shù)FFT 處理器芯片設(shè)計(jì)。由于設(shè)計(jì)目標(biāo)要求點(diǎn)數(shù)可配置同時(shí)具有較高的運(yùn)算速度,因此采用串行流水線SDF 結(jié)構(gòu)完成可配置點(diǎn)數(shù)FFT 設(shè)計(jì)。串行流水線SDF 結(jié)構(gòu)可以達(dá)到較快的運(yùn)算速度和實(shí)時(shí)連續(xù)分析處理能力,但相應(yīng)的硬件消耗相對(duì)較高,這里可以通過(guò)合適的定點(diǎn)運(yùn)算和其他設(shè)計(jì)彌補(bǔ)?;诨?-FFT 算法設(shè)計(jì)的點(diǎn)數(shù)可配置FFT 結(jié)構(gòu)框圖如圖2 所示。
圖2: FFT 硬件實(shí)現(xiàn)結(jié)構(gòu)框圖
FFT 處理器運(yùn)算點(diǎn)數(shù)通過(guò)控制電路配置(必須滿足2),之后根據(jù)配置的運(yùn)算點(diǎn)數(shù),時(shí)序控制電路根據(jù)當(dāng)前的運(yùn)算序列數(shù)產(chǎn)生各級(jí)碟形運(yùn)算的旋轉(zhuǎn)因子,同時(shí)通過(guò)時(shí)序控制模塊內(nèi)部的狀態(tài)機(jī),配置碟形運(yùn)算單元各級(jí)的存儲(chǔ)單元數(shù)。最終根據(jù)當(dāng)前配置點(diǎn)數(shù)選擇相應(yīng)的FFT 計(jì)數(shù)終點(diǎn)和碟形運(yùn)算輸出位置。以1024 點(diǎn)數(shù)據(jù)處理為例,時(shí)序數(shù)據(jù)為實(shí)數(shù),實(shí)時(shí)輸入FFT 處理器,處理器將前512 組數(shù)據(jù)寄存在RAM中,在接收到512 個(gè)數(shù)據(jù)之后開(kāi)始第一級(jí)BF1 運(yùn)算,運(yùn)算結(jié)果給第一級(jí)BF2 寄存,到768 個(gè)數(shù)據(jù),第一級(jí)BF2 開(kāi)始碟形運(yùn)算。時(shí)序1024 點(diǎn)數(shù)據(jù)輸入完成開(kāi)始第二組1024 點(diǎn)時(shí)域數(shù)據(jù)輸入寄存,依次類(lèi)推,完成1024 點(diǎn)FFT 運(yùn)算。輸出結(jié)果為復(fù)數(shù),實(shí)時(shí)更新頻域分析結(jié)果,可以進(jìn)行幅度、相位、復(fù)數(shù)等多種形式選擇輸出。
不同點(diǎn)數(shù)基2FFT 算法運(yùn)算點(diǎn)數(shù)和運(yùn)算級(jí)數(shù)BF1/BF2關(guān)系如表1 所示。
從表1 可知,F(xiàn)FT 處理器通過(guò)選擇運(yùn)算級(jí)數(shù)和最后一級(jí)的BFI 或BF2 來(lái)改變FFT 運(yùn)算點(diǎn)數(shù),完成頻譜分析。FFT模塊的內(nèi)部計(jì)數(shù)器計(jì)數(shù)終點(diǎn)根據(jù)控制電路輸入的點(diǎn)數(shù)配置。4096 點(diǎn)基2-FFT 運(yùn)算由6 級(jí)運(yùn)算完成,每級(jí)包含兩級(jí)碟形運(yùn)算,碟形運(yùn)算1(BF1)之后不需要進(jìn)行旋轉(zhuǎn)因子的復(fù)數(shù)乘法運(yùn)算,部分點(diǎn)進(jìn)行乘虛部操作(x(k)*-j),減少了運(yùn)算量。
表1: 運(yùn)算點(diǎn)數(shù)和運(yùn)算級(jí)數(shù)BF1/BF2 關(guān)系
具體實(shí)現(xiàn)時(shí)設(shè)計(jì)采用按頻域抽取FFT 算法,因此輸入數(shù)據(jù)是正序的,輸出為倒序,在一組數(shù)據(jù)頻譜分析完成好,首先進(jìn)行幅度、相位等信息求取,幅度求取模塊可以復(fù)用復(fù)數(shù)乘法模塊,簡(jiǎn)化設(shè)計(jì)。然后輸入給頻域結(jié)果倒序處理模塊,完成數(shù)據(jù)的倒序處理,之后再將結(jié)果寄存,根據(jù)要求等待用戶讀取相應(yīng)的結(jié)果。
利用上文介紹的基2FFT 算法和可配置點(diǎn)數(shù)的串行流水線結(jié)構(gòu)完成FFT 的硬件實(shí)現(xiàn)。編寫(xiě)VERILOG 代碼,完成邏輯綜合和后端版圖設(shè)計(jì),后仿驗(yàn)證時(shí)序和功能無(wú)誤。采用0.18um 工藝完成設(shè)計(jì),芯片部分版圖如圖3 所示。
圖3: 芯片部分版圖
對(duì)芯片進(jìn)行裝配測(cè)試,完成芯片的測(cè)試,評(píng)估其性能,分別測(cè)試2MHz信號(hào)的2048、1024、512、256的頻譜分析結(jié)果,芯片的部分測(cè)試結(jié)果如圖4 所示。
圖4: 測(cè)試結(jié)果
從圖4 可以看出芯片可以正確完成不同點(diǎn)數(shù)的頻譜分析,運(yùn)算結(jié)果一致。同時(shí)將本設(shè)計(jì)和部分參考文獻(xiàn)的設(shè)計(jì)結(jié)果對(duì)比如表2 所示。
表2: 結(jié)果對(duì)比
從表2 中可見(jiàn),本設(shè)計(jì)的計(jì)算時(shí)間和面積綜合指標(biāo)比較均衡,計(jì)算時(shí)間較快,可以完成FFT 運(yùn)算點(diǎn)數(shù)自由配置,功能更加完全,芯片面積受最終流片工藝節(jié)點(diǎn)制約較多。
本設(shè)計(jì)基于基2FFT 算法提出了一種可變換點(diǎn)數(shù)的FFT 硬件實(shí)現(xiàn)結(jié)構(gòu),利用基2-FFT 算法最后一級(jí)碟形運(yùn)算可以根據(jù)運(yùn)算點(diǎn)數(shù)選擇的特點(diǎn),利用串行SDF 結(jié)構(gòu)完成了4096~256 點(diǎn),序列點(diǎn)數(shù)可調(diào)的FFT 芯片設(shè)計(jì)。
該種結(jié)構(gòu)實(shí)現(xiàn)方式簡(jiǎn)單,可以完成2 的整數(shù)次冪的點(diǎn)數(shù)FFT 運(yùn)算,芯片測(cè)試結(jié)果輸入信號(hào)位寬12bit,F(xiàn)FT 處理SQNR 可以達(dá)到50.65dB,計(jì)算時(shí)間90.02us,量化信噪比較高,同時(shí)運(yùn)算速度較快,可以很好的滿足實(shí)際運(yùn)用需求。