付恩 琪 ,孫秀男 ,梁 昊
(1.中國科學技術大學 核探測與核電子國家重點實驗室,安徽 合肥230026;2.中國科學技術大學 近代物理系,安徽 合肥 230026)
功率譜估計是信號分析的重要方法,廣泛應用于雷達信號處理、語音識別、無線通信等領域[1-3]。針對激光雷達的微弱信號探測,由于單個脈沖功率譜強度較低,通常需要將多個脈沖功率譜進行分段累加以提高探測性能[4]。經典譜估計建立在快速傅里葉變換(Fast Fourier Transform,FFT)基礎之上,目前常用的基于MATLAB的功率譜估計運算耗時長、效率低,無法滿足實時數據處理的需求。隨著現場可編程門陣列(Field Programmable Gate Array,FPGA)集成度進一步提高,其內部資源豐富,性能強大,設計更加靈活,并具有很好的兼容性和可移植性,成為理想的解決方案。
本文設計了一種基于FPGA的功率譜分析系統,在上位機軟件控制下對關鍵參數進行配置,實現了數據采集、硬件觸發、DDR3存取、功率譜估計、結果上傳等系列功能。重點研究了兩種功率譜估計方案:方案一不加窗,由單精度浮點的并行FFT模塊實現,計算結果精度高;方案二增加了實時加窗處理,由24 bit定點的流水線FFT模塊實現,在降低頻譜泄露的同時進一步提升處理速度。系統通過分段累加處理提高了對微弱信號的探測性能。

圖1 系統硬件總體結構
功率譜分析系統的硬件總體結構如圖1所示,包括數據采集子板和數據處理母板,兩者通過FPGA夾層卡(FPGA Mezzanine Card,FMC)連接。子板負責前端模擬信號采樣,以1 GS/s的 12位 ADC芯片ADC12D500RF為核心,數字信號以250 MHz、48 bit的4路并行模式輸出。母板負責整體系統控制及信號處理,使用Xilinx公司的Virtex-6 FPGA芯片XC6VLX240T完成數據觸發采樣、DDR3存取、功率譜估計。最后,通過千兆以太網將計算結果上傳至上位機。
功率譜分析系統的邏輯結構主要可分為數據接收、功率譜估計以及結果上傳三部分。數據接收部分包括ADC數據接口、硬件觸發和DDR3接口模塊;功率譜估計部分包括FFT前置接口、FFT處理和分段累加模塊;結果上傳部分包括上位機命令解析、千兆以太網接口模塊,總體結構如圖2所示。

圖2 系統邏輯總體結構
數據采集由外部硬件觸發控制,觸發頻率為10 kHz,采集總時間為1 s。系統通過上位機配置的參數如下:(1)觸發采樣點數 L,范圍是 20 000~67 000點;(2)觸發延時 t,范圍是 0~1 000 ns,每次觸發后延遲 t ns再采集 L個采樣點;(3)距離門點數 M,范圍是 200~1 024點,以 M為節點對采樣點數L進行分段,每段都需要進行FFT處理,FFT模塊變換長度為固定的1 024點,其中輸入FFT模塊的前M點為采樣數據點,后(1 024-M)點做補零操作;(4)累加次數P,范圍是 1 000~10 000次,每次觸發分段的FFT結果需要與之前保存的相同段結果累加,當P設置為10 000次時對應連續采集1 s。
系統的工作流程如下:(1)上位機軟件完成參數的設置后,各指令通過千兆以太網接口下發至相應的功能模塊;(2)對信號進行觸發采樣,當 FIFO中達到一定數據量就開始向DDR3中寫入數據,直至寫完P次觸發的數據量;(3)將數據從DDR3中讀出進行功率譜估計,每次觸發采樣信號分為floor(L/M)段,即向下取整,進行FFT計算,求模平方后保留前一半結果,最后將每次觸發對應段結果累加P次存入相應的RAM中;(4)將功率譜估計結果上傳至上位機。
ADC數據接口使用Xilinx器件原語IBUFGDS和IBUFDS[5]將隨路時鐘和采樣信號由差分LVDS信號轉換為單端信號,同時注意將接收采樣信號的寄存器固定在FPGA的IO單元上,否則可能造成數據錯位。原信號寬度為48 bit,利用四個寄存器緩存串并轉換后信號寬度為192 bit,剩下64 bit做補零處理,與256 bit的DDR3數據存儲位寬匹配。
硬件觸發模塊負責控制采樣信號的觸發寫入、每次觸發的采樣點數以及觸發延時。系統工作時,模塊時鐘頻率為62.5 MHz,收到觸發信號后,利用計數器控制觸發延時t,在t/16個周期內禁止FIFO的寫入。同理,對采樣點數 L,在 L/16個周期內允許FIFO寫入,之后禁止寫入直至下一次觸發。觸發延時的控制精度為16 ns,觸發采樣點數的控制精度為16個采樣點。
DDR3接口由Xilinx公司提供的IP核與用戶控制模塊構成[6],根據上位機指令,與讀寫FIFO配合,完成信號存取操作。
針對兩種功率譜估計方法,方案一采用32 bit單精度浮點的并行FFT模塊,保證了譜分析的精度;另一方面,FPGA實時生成的漢寧窗系數無法達到很高的精度,為提高數據處理速度,方案二采用24 bit定點的流水線FFT模塊。
2.2.1 FFT前置接口
FFT前置接口的功能是根據距離門點數M進行分段取數、補零操作以及數據格式轉換。DDR3讀出的采樣信號經兩級FIFO緩沖后送入FFT前置接口,通過控制FIFO讀使能每次讀出M個采樣點,其余(1 024-M)點做補零處理。對于并行處理FFT模塊利用Floating-point IP核將12 bit的采樣信號轉換為32 bit單精度浮點。
為了降低頻譜泄露[7],為流水線 FFT處理模塊提供了實時硬件加窗處理,已知漢寧窗時域表達式為:

其中,n=0,1,…,N-1,而距離門點數 M就對應著式中的N。當M設置完成后,上位機同時發送系數 1/(M-1),利用乘法器、CORDIC IP核及減法器實時生成18 bit漢寧窗系數,與原信號相乘后結果保留24 bit作為流水線FFT模塊輸入。
另外,對于分段后多余的采樣點,需要讀出并丟棄。圖3展示了FFT前置接口工作狀態轉移圖。

圖3 FFT前置接口工作狀態轉移圖
2.2.2 FFT處理模塊
并行FFT處理模塊的設計主要參考了蘇斌[8]等提出的方案,采用按時間抽取(Decimation In Time,DIT)的基-2 FFT算法實現32 bit單精度浮點的快速傅里葉變換,通過四個蝶形單元并行計算提升處理速度,其結構如圖4所示。模塊中主要包含雙端口RAM、蝶形運算單元、旋轉因子ROM及地址產生控制單元等。

圖4 并行FFT處理模塊的總體結構
模塊中存儲器較多,在實現過程中為了降低地址控制復雜度,根據FFT計算規律,將RAM0、RAM2、RAM4、RAM6 分 為 一 組 ,其 讀 寫 地 址用一對寄存器 ram_up_wr_addr、ram_up_rd_addr控制,而 RAM1、RAM3、RAM5、RAM7 為另一組 , 讀寫地址用另一對寄存器ram_down_wr_addr、ram_down_rd_addr控制。同時利用多路選擇器控制四個蝶形單元與RAM的連接,在FFT計算的不同階段進行切換,最終以較少的信號實現對16個RAM的控制。
流水線FFT處理模塊采用按頻率抽取(Decimation In Frequency,DIF)的基-2 FFT 算法,通過單路延時反 饋(Single-path Delay Feedback,SDF)架 構[9-10]實 現24 bit定點的快速傅里葉變換,其結構如圖5所示。流水線結構在FFT變換的每一級都有單獨的處理模塊,每個模塊中都包含蝶形運算單元、延時緩存單元、旋轉因子ROM及信號控制單元。

圖5 流水線FFT處理模塊的總體結構
蝶形運算單元由24 bit有符號的乘法器和加減法器構成,定點運算需要考慮截斷和溢出。對于截斷,將乘法器輸出從高位開始向下截取24位作為計算結果。另一方面,為了防止加減計算發生溢出,設計在每一級的輸入端將信號大小減半。
根據流水線處理的特點,延時緩存單元由FIFO實現,當需要緩存的數據少于16點時,使用移位寄存器作為延時緩存單元。信號控制單元主要負責控制FIFO的讀寫使能、選通信號以及旋轉因子ROM的讀地址。通過控制選通信號,延時緩存單元一方面可以存儲輸入信號,另一方面也存儲蝶形運算的輸出結果,分時復用的策略保證了信號的流水線處理。
2.2.3 分段累加模塊
分段累加模塊主要包括雙端口RAM、加法器及控制邏輯,結構如圖6所示,其功能是根據累加次數P將對應段的功率譜結果累加并保存。第一次觸發的分段FFT結果直接存入RAM中,之后每次觸發處理后的結果到來時取出RAM中對應段數據送入加法器,并把結果存回RAM直至完成P次累加。

圖6 分段累加模塊結構
千兆以太網接口負責控制命令收發以及結果上傳,由Xilinx公司提供的 IP核產生MAC層,結合物理層芯片88E1111實現。最終需要上傳的數據大小為 floor(L/M)×512×32 bit,將自定義數據幀的數據長度設置為1 024 B,收到一次上傳命令則上傳2幀,如此循環floor(L/M)次即可將所有數據上傳。
功率譜分析系統的測試內容包括并行FFT處理模塊的仿真、流水線FFT處理模塊的仿真、整體系統的功能驗證和處理速度測試。
利用MATLAB生成波形數據,作為FFT模塊測試信號。圖7是并行FFT處理模塊仿真結果與MATLAB運算結果的對比,觀察發現,兩者處理結果一致,頻譜峰值在 105量級,絕對誤差在 10-2量級,故單精度浮點處理的相對誤差為10-7量級。

圖7 并行FFT處理模塊誤差分析
綜合結果表明模塊最高工作頻率為250.2 MHz,系統采用200 MHz作為工作頻率,完成1 024點FFT計算共耗時17.41μs,除去信號輸入輸出后變換時間為7.17μs。表1展示了硬件資源占用情況。

表1 并行FFT處理模塊硬件資源消耗
圖8是流水線FFT處理模塊仿真結果與MATLAB運算結果的對比,其中,頻譜峰值在105量級,絕對誤差在100量級,故 24 bit定點處理的相對誤差為10-5量級。FFT前置接口模塊生成的漢寧窗系數精度為10-5量級,將信號加窗后再進行FFT計算,此時整體的相對誤差為10-4量級。

圖8 流水線FFT處理模塊誤差分析
綜合結果表明模塊最高工作頻率為394.3 MHz,在200 MHz頻率下完成1 024點FFT計算耗時10.65μs。表 2展示了流水線FFT處理模塊硬件資源占用情況。

表2 流水線FFT處理模塊硬件資源消耗
上位機指令下發后,通過ChipScope抓取各模塊中收到的參數數據,對比發現各命令正確下發。利用控制變量法,分別改變輸入信號頻率、每次觸發采樣點數及累加次數等參數,進行數據采集、分段FFT處理并上傳,利用MATLAB程序分析上傳結果,驗證了各個功能的正確性。
通過分段累加的方式,保留了大量信號的基本特征,同時改善了功率譜估計的性能。圖9展示了系統分段累加 1、10、100、1 000次處理后功率譜的對比,可以看出,隨著累加次數的增加,功率譜逐漸平滑。

圖9 不同累加次數下功率譜對比
將觸發采樣點數L設置為20 000,距離門點數M為 1 024,即每次觸發完成19次FFT運算,通過改變累加次數改變整體運算量。以信號開始輸入為計時起點,結果開始輸出為計時終點,分別測試兩種方案進行功率譜估計消耗的時間,結果如表3所示。

表3 兩種功率譜估計方案耗時
表4是本文功率譜估計方案與其他方案的比較。本文系統的優勢是采樣頻率高,可根據需求靈活配置關鍵參數,頻率分辨合適,并提供了實時硬件加窗處理。另一方面,由于數據量較大,本文采取先緩存后處理方式,整體消耗時間相對偏長,接下來將嘗試采用多路并行FFT方案進一步提升速度。

表4 功率譜估計方案性能比較
本文設計了一種基于FPGA的功率譜分析系統,通過硬件平臺和邏輯算法的結合,靈活實現了數據采集、觸發、緩存、功率譜估計、結果上傳等系列功能。測試結果表明,兩種FFT處理方案均達到較高的精度和速度。在上位機軟件的控制下,系統能夠實現實時功率譜估計,并通過分段多次累加改善功率譜估計的性能,提高了激光雷達對微弱信號的探測處理能力。