付恩 琪 ,孫秀男 ,梁 昊
(1.中國科學(xué)技術(shù)大學(xué) 核探測與核電子國家重點(diǎn)實(shí)驗(yàn)室,安徽 合肥230026;2.中國科學(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026)
功率譜估計(jì)是信號分析的重要方法,廣泛應(yīng)用于雷達(dá)信號處理、語音識別、無線通信等領(lǐng)域[1-3]。針對激光雷達(dá)的微弱信號探測,由于單個(gè)脈沖功率譜強(qiáng)度較低,通常需要將多個(gè)脈沖功率譜進(jìn)行分段累加以提高探測性能[4]。經(jīng)典譜估計(jì)建立在快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)基礎(chǔ)之上,目前常用的基于MATLAB的功率譜估計(jì)運(yùn)算耗時(shí)長、效率低,無法滿足實(shí)時(shí)數(shù)據(jù)處理的需求。隨著現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)集成度進(jìn)一步提高,其內(nèi)部資源豐富,性能強(qiáng)大,設(shè)計(jì)更加靈活,并具有很好的兼容性和可移植性,成為理想的解決方案。
本文設(shè)計(jì)了一種基于FPGA的功率譜分析系統(tǒng),在上位機(jī)軟件控制下對關(guān)鍵參數(shù)進(jìn)行配置,實(shí)現(xiàn)了數(shù)據(jù)采集、硬件觸發(fā)、DDR3存取、功率譜估計(jì)、結(jié)果上傳等系列功能。重點(diǎn)研究了兩種功率譜估計(jì)方案:方案一不加窗,由單精度浮點(diǎn)的并行FFT模塊實(shí)現(xiàn),計(jì)算結(jié)果精度高;方案二增加了實(shí)時(shí)加窗處理,由24 bit定點(diǎn)的流水線FFT模塊實(shí)現(xiàn),在降低頻譜泄露的同時(shí)進(jìn)一步提升處理速度。系統(tǒng)通過分段累加處理提高了對微弱信號的探測性能。
圖1 系統(tǒng)硬件總體結(jié)構(gòu)
功率譜分析系統(tǒng)的硬件總體結(jié)構(gòu)如圖1所示,包括數(shù)據(jù)采集子板和數(shù)據(jù)處理母板,兩者通過FPGA夾層卡(FPGA Mezzanine Card,F(xiàn)MC)連接。子板負(fù)責(zé)前端模擬信號采樣,以1 GS/s的 12位 ADC芯片ADC12D500RF為核心,數(shù)字信號以250 MHz、48 bit的4路并行模式輸出。母板負(fù)責(zé)整體系統(tǒng)控制及信號處理,使用Xilinx公司的Virtex-6 FPGA芯片XC6VLX240T完成數(shù)據(jù)觸發(fā)采樣、DDR3存取、功率譜估計(jì)。最后,通過千兆以太網(wǎng)將計(jì)算結(jié)果上傳至上位機(jī)。
功率譜分析系統(tǒng)的邏輯結(jié)構(gòu)主要可分為數(shù)據(jù)接收、功率譜估計(jì)以及結(jié)果上傳三部分。數(shù)據(jù)接收部分包括ADC數(shù)據(jù)接口、硬件觸發(fā)和DDR3接口模塊;功率譜估計(jì)部分包括FFT前置接口、FFT處理和分段累加模塊;結(jié)果上傳部分包括上位機(jī)命令解析、千兆以太網(wǎng)接口模塊,總體結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)邏輯總體結(jié)構(gòu)
數(shù)據(jù)采集由外部硬件觸發(fā)控制,觸發(fā)頻率為10 kHz,采集總時(shí)間為1 s。系統(tǒng)通過上位機(jī)配置的參數(shù)如下:(1)觸發(fā)采樣點(diǎn)數(shù) L,范圍是 20 000~67 000點(diǎn);(2)觸發(fā)延時(shí) t,范圍是 0~1 000 ns,每次觸發(fā)后延遲 t ns再采集 L個(gè)采樣點(diǎn);(3)距離門點(diǎn)數(shù) M,范圍是 200~1 024點(diǎn),以 M為節(jié)點(diǎn)對采樣點(diǎn)數(shù)L進(jìn)行分段,每段都需要進(jìn)行FFT處理,F(xiàn)FT模塊變換長度為固定的1 024點(diǎn),其中輸入FFT模塊的前M點(diǎn)為采樣數(shù)據(jù)點(diǎn),后(1 024-M)點(diǎn)做補(bǔ)零操作;(4)累加次數(shù)P,范圍是 1 000~10 000次,每次觸發(fā)分段的FFT結(jié)果需要與之前保存的相同段結(jié)果累加,當(dāng)P設(shè)置為10 000次時(shí)對應(yīng)連續(xù)采集1 s。
系統(tǒng)的工作流程如下:(1)上位機(jī)軟件完成參數(shù)的設(shè)置后,各指令通過千兆以太網(wǎng)接口下發(fā)至相應(yīng)的功能模塊;(2)對信號進(jìn)行觸發(fā)采樣,當(dāng) FIFO中達(dá)到一定數(shù)據(jù)量就開始向DDR3中寫入數(shù)據(jù),直至寫完P(guān)次觸發(fā)的數(shù)據(jù)量;(3)將數(shù)據(jù)從DDR3中讀出進(jìn)行功率譜估計(jì),每次觸發(fā)采樣信號分為floor(L/M)段,即向下取整,進(jìn)行FFT計(jì)算,求模平方后保留前一半結(jié)果,最后將每次觸發(fā)對應(yīng)段結(jié)果累加P次存入相應(yīng)的RAM中;(4)將功率譜估計(jì)結(jié)果上傳至上位機(jī)。
ADC數(shù)據(jù)接口使用Xilinx器件原語IBUFGDS和IBUFDS[5]將隨路時(shí)鐘和采樣信號由差分LVDS信號轉(zhuǎn)換為單端信號,同時(shí)注意將接收采樣信號的寄存器固定在FPGA的IO單元上,否則可能造成數(shù)據(jù)錯(cuò)位。原信號寬度為48 bit,利用四個(gè)寄存器緩存串并轉(zhuǎn)換后信號寬度為192 bit,剩下64 bit做補(bǔ)零處理,與256 bit的DDR3數(shù)據(jù)存儲位寬匹配。
硬件觸發(fā)模塊負(fù)責(zé)控制采樣信號的觸發(fā)寫入、每次觸發(fā)的采樣點(diǎn)數(shù)以及觸發(fā)延時(shí)。系統(tǒng)工作時(shí),模塊時(shí)鐘頻率為62.5 MHz,收到觸發(fā)信號后,利用計(jì)數(shù)器控制觸發(fā)延時(shí)t,在t/16個(gè)周期內(nèi)禁止FIFO的寫入。同理,對采樣點(diǎn)數(shù) L,在 L/16個(gè)周期內(nèi)允許FIFO寫入,之后禁止寫入直至下一次觸發(fā)。觸發(fā)延時(shí)的控制精度為16 ns,觸發(fā)采樣點(diǎn)數(shù)的控制精度為16個(gè)采樣點(diǎn)。
DDR3接口由Xilinx公司提供的IP核與用戶控制模塊構(gòu)成[6],根據(jù)上位機(jī)指令,與讀寫FIFO配合,完成信號存取操作。
針對兩種功率譜估計(jì)方法,方案一采用32 bit單精度浮點(diǎn)的并行FFT模塊,保證了譜分析的精度;另一方面,F(xiàn)PGA實(shí)時(shí)生成的漢寧窗系數(shù)無法達(dá)到很高的精度,為提高數(shù)據(jù)處理速度,方案二采用24 bit定點(diǎn)的流水線FFT模塊。
2.2.1 FFT前置接口
FFT前置接口的功能是根據(jù)距離門點(diǎn)數(shù)M進(jìn)行分段取數(shù)、補(bǔ)零操作以及數(shù)據(jù)格式轉(zhuǎn)換。DDR3讀出的采樣信號經(jīng)兩級FIFO緩沖后送入FFT前置接口,通過控制FIFO讀使能每次讀出M個(gè)采樣點(diǎn),其余(1 024-M)點(diǎn)做補(bǔ)零處理。對于并行處理FFT模塊利用Floating-point IP核將12 bit的采樣信號轉(zhuǎn)換為32 bit單精度浮點(diǎn)。
為了降低頻譜泄露[7],為流水線 FFT處理模塊提供了實(shí)時(shí)硬件加窗處理,已知漢寧窗時(shí)域表達(dá)式為:
其中,n=0,1,…,N-1,而距離門點(diǎn)數(shù) M就對應(yīng)著式中的N。當(dāng)M設(shè)置完成后,上位機(jī)同時(shí)發(fā)送系數(shù) 1/(M-1),利用乘法器、CORDIC IP核及減法器實(shí)時(shí)生成18 bit漢寧窗系數(shù),與原信號相乘后結(jié)果保留24 bit作為流水線FFT模塊輸入。
另外,對于分段后多余的采樣點(diǎn),需要讀出并丟棄。圖3展示了FFT前置接口工作狀態(tài)轉(zhuǎn)移圖。
圖3 FFT前置接口工作狀態(tài)轉(zhuǎn)移圖
2.2.2 FFT處理模塊
并行FFT處理模塊的設(shè)計(jì)主要參考了蘇斌[8]等提出的方案,采用按時(shí)間抽取(Decimation In Time,DIT)的基-2 FFT算法實(shí)現(xiàn)32 bit單精度浮點(diǎn)的快速傅里葉變換,通過四個(gè)蝶形單元并行計(jì)算提升處理速度,其結(jié)構(gòu)如圖4所示。模塊中主要包含雙端口RAM、蝶形運(yùn)算單元、旋轉(zhuǎn)因子ROM及地址產(chǎn)生控制單元等。
圖4 并行FFT處理模塊的總體結(jié)構(gòu)
模塊中存儲器較多,在實(shí)現(xiàn)過程中為了降低地址控制復(fù)雜度,根據(jù)FFT計(jì)算規(guī)律,將RAM0、RAM2、RAM4、RAM6 分 為 一 組 ,其 讀 寫 地 址用一對寄存器 ram_up_wr_addr、ram_up_rd_addr控制,而 RAM1、RAM3、RAM5、RAM7 為另一組 , 讀寫地址用另一對寄存器ram_down_wr_addr、ram_down_rd_addr控制。同時(shí)利用多路選擇器控制四個(gè)蝶形單元與RAM的連接,在FFT計(jì)算的不同階段進(jìn)行切換,最終以較少的信號實(shí)現(xiàn)對16個(gè)RAM的控制。
流水線FFT處理模塊采用按頻率抽取(Decimation In Frequency,DIF)的基-2 FFT 算法,通過單路延時(shí)反 饋(Single-path Delay Feedback,SDF)架 構(gòu)[9-10]實(shí) 現(xiàn)24 bit定點(diǎn)的快速傅里葉變換,其結(jié)構(gòu)如圖5所示。流水線結(jié)構(gòu)在FFT變換的每一級都有單獨(dú)的處理模塊,每個(gè)模塊中都包含蝶形運(yùn)算單元、延時(shí)緩存單元、旋轉(zhuǎn)因子ROM及信號控制單元。
圖5 流水線FFT處理模塊的總體結(jié)構(gòu)
蝶形運(yùn)算單元由24 bit有符號的乘法器和加減法器構(gòu)成,定點(diǎn)運(yùn)算需要考慮截?cái)嗪鸵绯?。對于截?cái)?,將乘法器輸出從高位開始向下截取24位作為計(jì)算結(jié)果。另一方面,為了防止加減計(jì)算發(fā)生溢出,設(shè)計(jì)在每一級的輸入端將信號大小減半。
根據(jù)流水線處理的特點(diǎn),延時(shí)緩存單元由FIFO實(shí)現(xiàn),當(dāng)需要緩存的數(shù)據(jù)少于16點(diǎn)時(shí),使用移位寄存器作為延時(shí)緩存單元。信號控制單元主要負(fù)責(zé)控制FIFO的讀寫使能、選通信號以及旋轉(zhuǎn)因子ROM的讀地址。通過控制選通信號,延時(shí)緩存單元一方面可以存儲輸入信號,另一方面也存儲蝶形運(yùn)算的輸出結(jié)果,分時(shí)復(fù)用的策略保證了信號的流水線處理。
2.2.3 分段累加模塊
分段累加模塊主要包括雙端口RAM、加法器及控制邏輯,結(jié)構(gòu)如圖6所示,其功能是根據(jù)累加次數(shù)P將對應(yīng)段的功率譜結(jié)果累加并保存。第一次觸發(fā)的分段FFT結(jié)果直接存入RAM中,之后每次觸發(fā)處理后的結(jié)果到來時(shí)取出RAM中對應(yīng)段數(shù)據(jù)送入加法器,并把結(jié)果存回RAM直至完成P次累加。
圖6 分段累加模塊結(jié)構(gòu)
千兆以太網(wǎng)接口負(fù)責(zé)控制命令收發(fā)以及結(jié)果上傳,由Xilinx公司提供的 IP核產(chǎn)生MAC層,結(jié)合物理層芯片88E1111實(shí)現(xiàn)。最終需要上傳的數(shù)據(jù)大小為 floor(L/M)×512×32 bit,將自定義數(shù)據(jù)幀的數(shù)據(jù)長度設(shè)置為1 024 B,收到一次上傳命令則上傳2幀,如此循環(huán)floor(L/M)次即可將所有數(shù)據(jù)上傳。
功率譜分析系統(tǒng)的測試內(nèi)容包括并行FFT處理模塊的仿真、流水線FFT處理模塊的仿真、整體系統(tǒng)的功能驗(yàn)證和處理速度測試。
利用MATLAB生成波形數(shù)據(jù),作為FFT模塊測試信號。圖7是并行FFT處理模塊仿真結(jié)果與MATLAB運(yùn)算結(jié)果的對比,觀察發(fā)現(xiàn),兩者處理結(jié)果一致,頻譜峰值在 105量級,絕對誤差在 10-2量級,故單精度浮點(diǎn)處理的相對誤差為10-7量級。
圖7 并行FFT處理模塊誤差分析
綜合結(jié)果表明模塊最高工作頻率為250.2 MHz,系統(tǒng)采用200 MHz作為工作頻率,完成1 024點(diǎn)FFT計(jì)算共耗時(shí)17.41μs,除去信號輸入輸出后變換時(shí)間為7.17μs。表1展示了硬件資源占用情況。
表1 并行FFT處理模塊硬件資源消耗
圖8是流水線FFT處理模塊仿真結(jié)果與MATLAB運(yùn)算結(jié)果的對比,其中,頻譜峰值在105量級,絕對誤差在100量級,故 24 bit定點(diǎn)處理的相對誤差為10-5量級。FFT前置接口模塊生成的漢寧窗系數(shù)精度為10-5量級,將信號加窗后再進(jìn)行FFT計(jì)算,此時(shí)整體的相對誤差為10-4量級。
圖8 流水線FFT處理模塊誤差分析
綜合結(jié)果表明模塊最高工作頻率為394.3 MHz,在200 MHz頻率下完成1 024點(diǎn)FFT計(jì)算耗時(shí)10.65μs。表 2展示了流水線FFT處理模塊硬件資源占用情況。
表2 流水線FFT處理模塊硬件資源消耗
上位機(jī)指令下發(fā)后,通過ChipScope抓取各模塊中收到的參數(shù)數(shù)據(jù),對比發(fā)現(xiàn)各命令正確下發(fā)。利用控制變量法,分別改變輸入信號頻率、每次觸發(fā)采樣點(diǎn)數(shù)及累加次數(shù)等參數(shù),進(jìn)行數(shù)據(jù)采集、分段FFT處理并上傳,利用MATLAB程序分析上傳結(jié)果,驗(yàn)證了各個(gè)功能的正確性。
通過分段累加的方式,保留了大量信號的基本特征,同時(shí)改善了功率譜估計(jì)的性能。圖9展示了系統(tǒng)分段累加 1、10、100、1 000次處理后功率譜的對比,可以看出,隨著累加次數(shù)的增加,功率譜逐漸平滑。
圖9 不同累加次數(shù)下功率譜對比
將觸發(fā)采樣點(diǎn)數(shù)L設(shè)置為20 000,距離門點(diǎn)數(shù)M為 1 024,即每次觸發(fā)完成19次FFT運(yùn)算,通過改變累加次數(shù)改變整體運(yùn)算量。以信號開始輸入為計(jì)時(shí)起點(diǎn),結(jié)果開始輸出為計(jì)時(shí)終點(diǎn),分別測試兩種方案進(jìn)行功率譜估計(jì)消耗的時(shí)間,結(jié)果如表3所示。
表3 兩種功率譜估計(jì)方案耗時(shí)
表4是本文功率譜估計(jì)方案與其他方案的比較。本文系統(tǒng)的優(yōu)勢是采樣頻率高,可根據(jù)需求靈活配置關(guān)鍵參數(shù),頻率分辨合適,并提供了實(shí)時(shí)硬件加窗處理。另一方面,由于數(shù)據(jù)量較大,本文采取先緩存后處理方式,整體消耗時(shí)間相對偏長,接下來將嘗試采用多路并行FFT方案進(jìn)一步提升速度。
表4 功率譜估計(jì)方案性能比較
本文設(shè)計(jì)了一種基于FPGA的功率譜分析系統(tǒng),通過硬件平臺和邏輯算法的結(jié)合,靈活實(shí)現(xiàn)了數(shù)據(jù)采集、觸發(fā)、緩存、功率譜估計(jì)、結(jié)果上傳等系列功能。測試結(jié)果表明,兩種FFT處理方案均達(dá)到較高的精度和速度。在上位機(jī)軟件的控制下,系統(tǒng)能夠?qū)崿F(xiàn)實(shí)時(shí)功率譜估計(jì),并通過分段多次累加改善功率譜估計(jì)的性能,提高了激光雷達(dá)對微弱信號的探測處理能力。