基于FPGA的專(zhuān)用信號處理器設計和實(shí)現
摘 要:本文介紹基于FPGA、用VHDL語(yǔ)言編程實(shí)現矢量脫靶量測量專(zhuān)用信號處理器的方法。有效利用FPGA片內硬件資源,無(wú)需外圍電路,高度集成,實(shí)現了對復數數據進(jìn)行去直流、加窗、512點(diǎn)FFT和求模平方運算。
關(guān)鍵詞:512點(diǎn)FFT;FPGA;蝶形運算
前言
矢量脫靶量測量系統中,信號處理電路模塊的主要任務(wù)是完成目標檢測、數據存儲以及給其它單元控制信號。系統所進(jìn)行的目標檢測需要計算信號的功率譜,所以先要對采集到的多通道(8路)數據按512點(diǎn)為一幀,作FFT處理,得到其頻譜。為了監測接收機工作狀態(tài),需要在頻域用恒虛警的方法,判斷各路接收通道是否正常。除此之外,還需要對數據進(jìn)行去直流、加窗的初始化處理,FFT結果再進(jìn)行求模平方、累加運算,結果以FIFO輸出。
選擇用FPGA完成上述功能有諸多優(yōu)點(diǎn)。首先,FPGA實(shí)現FFT運算是硬件處理,采用多個(gè)硬件乘法器、加法器,運算周期短,加上內部集成的大量塊RAM可高速訪(fǎng)問(wèn),所以速度大大提高。其次,FPGA片內邏輯資源豐富,可用的寄存器、鎖存器、查找表和多路數據選擇器等,能夠實(shí)現硬件流水結構。這樣多種運算可同時(shí)流水進(jìn)行,減少了中間等待時(shí)間,整體速度大幅提高。再次,用硬件處理數據時(shí)延固定,可準確預測。
當然,FPGA也有不足。在FPGA內設定的數據長(cháng)度相對固定,不夠靈活,如果為實(shí)現高精度而采用浮點(diǎn)運算,則設計復雜,速度會(huì )降低,而且硬件開(kāi)銷(xiāo)大。用“塊浮點(diǎn)”算法,可以很好地兼顧高速和高精度,并且硬件實(shí)現和控制相對簡(jiǎn)單,彌補了FPGA這一不足。
各運算單元算法和實(shí)現
如圖1所示,信號處理器共包括4大部分:去直流、加窗的預處理單元,FFT運算單元,模平方累加與檢測單元,FIFO輸出單元。每個(gè)單元都分配有存儲器來(lái)存儲中間結果,它們是由FPGA中的塊RAM生成的,不占用邏輯資源,而且訪(fǎng)問(wèn)快速。
預處理單元
如圖2所示,預處理單元首先讀入控制單元,在收到啟動(dòng)信號后,產(chǎn)生讀信號和讀地址,讀取外部數據到內部存儲器R、I,同時(shí)數據送入累加單元求和,移位后得到平均值,也就是直流分量。然后,在讀取數據完畢時(shí),讀入控制單元啟動(dòng)加窗運算控制單元,讀取原始數據和窗函數,這時(shí)原始數據減掉直流分量后,與窗函數相乘,就得到去直流和加窗后的結果,為FFT單元作好準備。
FFT運算單元
如圖3所示,FFT運算單元主要包括蝶形運算、讀寫(xiě)控制、塊浮點(diǎn)運算、數據存儲R、I和旋轉因子存儲單元。以下分別介紹。
蝶形運算單元
時(shí)域抽樣(DIT)的基-2蝶型運算算法可以表示為:
其中復乘運算可表示為:
由蝶形運算算法公式可以看出一個(gè)基-2蝶形運算要進(jìn)行一個(gè)復乘、兩個(gè)復加。由復乘運算公式可知:若在一個(gè)時(shí)鐘周期內實(shí)現復乘,需4個(gè)實(shí)數乘法器和2個(gè)實(shí)數加法器。因為這里采用的是Xilinx公司的VirtexII系列FPGA,內部有硬件乘法器,不占用邏輯資源,因此為了簡(jiǎn)化結構和提高系統的穩定性,采用4乘法器的直接實(shí)現結構(見(jiàn)圖4)。
讀寫(xiě)控制
FFT讀寫(xiě)控制單元負責產(chǎn)生FFT運算過(guò)程、各個(gè)階段RAM的讀寫(xiě)信號和地址信號,以保證各級運算數據的正確調用和存儲。此外,還需要協(xié)調各部分的時(shí)序關(guān)系。因為按時(shí)間抽取的FFT是混序,在實(shí)際運算中,直接將輸入數據按原位運算要求的“亂序”存放是很不方便的。因此總是按自然順序將輸入序列存入存儲單元,再通過(guò)變址運算將自然順序變換成按時(shí)間抽取的FFT算法要求的順序。變址過(guò)程可以用程序安排加以實(shí)現。計數器順序計數(0~511),將計數器的最低位(第‘0’位)取反后,對應位進(jìn)行交換,就能產(chǎn)生每一級的數據讀取地址。同樣的,旋轉因子的地址是由計數器地址交換后,特定位置零產(chǎn)生的。由于采用原位運算,每級蝶形運算的寫(xiě)地址和抽取地址完全相同。
塊浮點(diǎn)
塊浮點(diǎn)由“溢出檢測”和“指數累加器”組成。如果輸入蝶形單元中的數據的實(shí)部和虛部是16比特,那么輸出數據實(shí)部和虛部最大溢出是2比特。所以,每一級蝶形運算中,“溢出檢測”根據輸出數據的高三位(最高位是符號位)就可以判斷溢出情況,由此決定下一級蝶形運算時(shí),如何選擇上一級18位結果數據中的16位進(jìn)入蝶形單元。溢出的位數由指數累加器累加,最后決定FFT運算結果的指數位。
數據存儲
FFT運算單元先讀取預處理結果的實(shí)部、虛部,送入蝶形運算單元。第一級結果也會(huì )分成實(shí)部、虛部存儲在本單元的數據存儲器中。此后每一級都進(jìn)行原位操作,最終的結果也存于這兩片RAM中。旋轉因子事先單獨存儲在一片512
評論