基于System Generator的Rife算法設(shè)計(jì)實(shí)現(xiàn)與仿真分析
摘 要: 在FPGA平臺(tái)上應(yīng)用System Generator工具實(shí)現(xiàn)了高精度頻率估計(jì)Rife算法。不同于傳統(tǒng)的基于HDL代碼和IP核的設(shè)計(jì)方法,采用System Generator工具可以使復(fù)雜算法在FPGA中更快、更準(zhǔn)確地實(shí)現(xiàn)。給出了Rife算法的描述和實(shí)現(xiàn)結(jié)構(gòu)框圖,并在System Generator和ISE環(huán)境中進(jìn)行了仿真,驗(yàn)證了設(shè)計(jì)的正確性。
頻率測(cè)量在電子偵察中扮演了重要的角色[1]。隨著電子技術(shù)的發(fā)展,傳統(tǒng)的偵察接收機(jī)向著數(shù)字化、軟件化方向發(fā)展[2]。傳統(tǒng)的基于模擬電路的測(cè)頻方法需要轉(zhuǎn)換為數(shù)字方法實(shí)現(xiàn)。模擬偵察接收機(jī)中通常采用基于相位差的頻率測(cè)量方法[3]。該方法在數(shù)字電路中同樣可以方便地實(shí)現(xiàn),但該方法對(duì)信噪比要求比較高[3]?;跀?shù)字電路的優(yōu)點(diǎn),可采用先進(jìn)的算法實(shí)現(xiàn)更高的性能。Rife算法[4]是一種常用的基于DFT頻譜的頻率測(cè)量算法,具有算法實(shí)現(xiàn)容易、精度高等優(yōu)點(diǎn)。而DFT運(yùn)算可以通過FFT進(jìn)行快速運(yùn)算。
為保證截獲概率,偵察接收機(jī)帶寬不斷增大,現(xiàn)瞬時(shí)帶寬已達(dá)500 MHz[2]。傳統(tǒng)的基于DSP和GPP的系統(tǒng)已難以滿足實(shí)時(shí)處理的需求,采用基于FPGA的信號(hào)處理機(jī)已成為普遍的解決方法[5-7]。
FPGA設(shè)計(jì)中基于HDL和定點(diǎn)的設(shè)計(jì)方法不同于傳統(tǒng)的DSP和GPP平臺(tái)中基于C語言和浮點(diǎn)的設(shè)計(jì)方法。HDL語言語法和語言的可綜合性限制了算法的實(shí)現(xiàn)[7-8]?;诖?,Xilinx和Altera公司分別推出了簡(jiǎn)化FPGA數(shù)字處理系統(tǒng)的集成開發(fā)工具System Generator for DSP和DSP Builder[9],快速、簡(jiǎn)易地將DSP系統(tǒng)的抽象算法轉(zhuǎn)化成可綜合的、可靠的硬件系統(tǒng),為DSP設(shè)計(jì)者掃清了編程的障礙[8-9]。
2 System Generator
System Generator 是高性能、高效的DSP算法建模工具,是DSP算法與FPGA的橋梁[7-8]。其作用如圖1所示,可在Matlab/Simulink環(huán)境下對(duì)算法以及系統(tǒng)進(jìn)行建模,并生成相應(yīng)的工程,再調(diào)用ISE進(jìn)行仿真、綜合、實(shí)現(xiàn)。
Xilinx為System Generator提供了大量的信號(hào)處理模塊(如FIR濾波器、FFT)、糾錯(cuò)算法、存儲(chǔ)器以及數(shù)字邏輯功能,可以在設(shè)計(jì)環(huán)境下直接調(diào)用,快速構(gòu)建DSP系統(tǒng)。同時(shí)還支持.m文件和HDL導(dǎo)入[7-8]。
雖然System Generator中只有Xilinx提供的模塊可以在FPGA中實(shí)現(xiàn),但利用Simulink中豐富的資源可方便地生成測(cè)試向量,同時(shí)快速對(duì)結(jié)果進(jìn)行準(zhǔn)確直觀的分析??紤]到資源消耗,F(xiàn)PGA中實(shí)現(xiàn)的算法以定點(diǎn)算法為主,定點(diǎn)算法的精度和范圍很有限,容易發(fā)生溢出或者計(jì)算誤差過大,導(dǎo)致算法失敗[5-6]。采用傳統(tǒng)的基于HDL和IP核的設(shè)計(jì)方法,如果早期分析得不完全,在設(shè)計(jì)后期進(jìn)行修改是一件費(fèi)時(shí)費(fèi)力的事情,而且極易發(fā)生錯(cuò)誤。而在System Generator環(huán)境下,采用基于模型的設(shè)計(jì)方法可以方便地實(shí)現(xiàn)和驗(yàn)證定點(diǎn)算法,發(fā)現(xiàn)問題后也容易進(jìn)行修改。
3 Rife算法的FPGA設(shè)計(jì)從第1節(jié)的Rife算法介紹可知,Rife算法以FFT運(yùn)算為核心,通過頻譜峰值與次峰值的插值運(yùn)算計(jì)算頻率值。FFT算法是一種塊運(yùn)算,逐幀進(jìn)行,需要提供幀的起止邊界。本設(shè)計(jì)中采用恒虛警模塊提供幀的起止信號(hào)。FPGA中實(shí)現(xiàn)的Rife頻率測(cè)量算法主要包含如下功能模塊:快速傅里葉變換模塊(FFT)、取模模塊、峰值檢測(cè)與鎖存模塊、Rife計(jì)算模塊和控制模塊。系統(tǒng)整體框圖如圖2所示。
System Generator工具中提供了FFT模塊,其通過參數(shù)化配置,支持從8點(diǎn)到65 536點(diǎn)的基2、基4 FFT運(yùn)算,其在FPGA中的實(shí)現(xiàn)對(duì)應(yīng)著LogicCORE中的FFT核。使用該模塊主要需要關(guān)心start信號(hào)、dv信號(hào)和輸入輸出信號(hào)。從恒虛警模塊來的start信號(hào)通過一個(gè)上升沿指示轉(zhuǎn)換開始,此時(shí)在時(shí)鐘的同步下逐點(diǎn)將待轉(zhuǎn)換數(shù)據(jù)輸入,當(dāng)輸入的信號(hào)點(diǎn)數(shù)達(dá)到設(shè)定的采樣點(diǎn)時(shí)開始FFT計(jì)算。恒虛警模塊在沒有檢測(cè)到信號(hào)的情況下會(huì)輸出0,故當(dāng)信號(hào)點(diǎn)數(shù)小于FFT所需的點(diǎn)數(shù)時(shí)會(huì)自動(dòng)插0。
經(jīng)過一段時(shí)間的延時(shí),dv輸出高電平,指示轉(zhuǎn)換完成。此時(shí)會(huì)逐點(diǎn)輸出轉(zhuǎn)換完成的頻譜信號(hào),同時(shí)xk_index輸出頻譜點(diǎn)對(duì)應(yīng)的索引值。
Rife算法需要DFT頻譜的幅度信息,而FFT模塊輸出的為I、Q兩路復(fù)信號(hào)。|u|絕對(duì)值模塊完成頻譜的絕對(duì)值運(yùn)算。在FPGA中實(shí)現(xiàn)諸如 的運(yùn)算需要占用大量的資源,其中開根號(hào)運(yùn)算可采用System Generator提供的CORDIC模塊進(jìn)行近似運(yùn)算,降低了資源的消耗。同時(shí)I2+Q2的運(yùn)算可通過MCode模塊完成,MCode實(shí)現(xiàn)了Matlab函數(shù)的有限子集,用于快速開發(fā)DSP算法,同時(shí)可生成HDL代碼,用于FPGA工程應(yīng)用中。