基于FPGA的信號頻譜分析系統(tǒng)
摘要 利用FPGA實現(xiàn)了信號的采集與頻譜分析系統(tǒng),對系統(tǒng)進行了模塊劃分,并分別給出了各模塊的設(shè)計要點,完成了模擬信號采集模塊、快速傅里葉變換模塊、存儲模塊以及VGA顯示模塊的設(shè)計。最后對設(shè)計的各模塊進行了功能與時序仿真,驗證了系統(tǒng)設(shè)計的正確性與可靠性。試驗表明,該設(shè)計可以實現(xiàn)信號的采集、頻譜分析與顯示等功能,系統(tǒng)穩(wěn)定可靠。
關(guān)鍵詞 A/D轉(zhuǎn)換;信號采集;頻譜分析;快速傅里葉變換;FPGA
數(shù)字信號處理技術(shù)飛速發(fā)展,其信號來源往往是模擬信號的A/DC輸出。該頻譜分析系統(tǒng)主要實現(xiàn)的功能包括對模擬信號進行采集,并對采集到的數(shù)字信號進行快速傅里葉變換(FFT),最后將頻譜分析結(jié)果顯示在VGA上。系統(tǒng)的核心部分采用Altera公司的FPGA芯片CycloneII實現(xiàn),采用ADI公司的AD7655來實現(xiàn)待分析模擬信號的A/D轉(zhuǎn)換。
1 系統(tǒng)組成
系統(tǒng)通過FPGA控制AD7655芯片采集待分析的模擬信號,并對A/D采集所得來的數(shù)字信號進行FFT變換,計算結(jié)束后將結(jié)果放在存儲器中,F(xiàn)PGA以存儲器中的數(shù)據(jù)作為數(shù)據(jù)源進行控制,VGA將信號的頻譜分析結(jié)果以圖形的方式顯示。系統(tǒng)由A/D采集模塊、主控制模塊、FIFO模塊、FFT運算模塊、數(shù)據(jù)存儲模塊、VGA控制模塊等6個模塊組成。各模塊之間的關(guān)系如圖1所示。
2 系統(tǒng)設(shè)計
2.1 A/D采集模塊
系統(tǒng)控制模塊在接收到采集使能信號后,便會啟動A/DC來采集原始模擬信號。設(shè)計采用16位低功耗A/D轉(zhuǎn)換器AD7655對模擬信號進行采樣。AD7655有4個通道,1 Mbit·s-1采樣率,輸入模擬信號的范圍為0~5 V。該芯片的時序如圖2所示。
輸入待測模擬信號經(jīng)過調(diào)理電路之后滿足AD7655模擬輸入電平的要求,AD7655采用模擬5 V,數(shù)字5 V與接口3.3 V供電,由FPGA的主控制模塊控制AD7655進行A/D轉(zhuǎn)換。模數(shù)轉(zhuǎn)換部分如圖3所示。
2.2 FIFO模塊
FIFO是一種先進先出的數(shù)據(jù)緩存器,他與普通存儲器的區(qū)別在于沒有外部讀寫地址線,使用簡便,缺點是只能順序?qū)懭霐?shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,不能像普通存儲器那樣,由地址線決定讀取或?qū)懭肽硞€指定的地址,F(xiàn)IFO一般用于不同時鐘域之間的數(shù)據(jù)傳輸。
FPGA將經(jīng)過A/D轉(zhuǎn)換后的16位數(shù)據(jù)存儲到FPGA內(nèi)部的FIFO存儲器中,之所以選擇FIFO而沒有選擇雙端口,RAM作為緩沖器是因為FIFO不需要地址信號。當(dāng)FIFO的狀態(tài)為“滿”時會向FPGA內(nèi)部的主控制模塊發(fā)出請求,主控制模塊允許之后將數(shù)據(jù)寫入FFT運算模塊用于存儲實部的雙口RAM中作為FFT運算的初始數(shù)據(jù)。FIFO的數(shù)據(jù)寬度與A/DC的輸出數(shù)據(jù)寬度一致,其深度是進行FFT運算的點數(shù)。系統(tǒng)中每次采樣1 000點進行頻域分析,為避免產(chǎn)生時域混疊現(xiàn)象需滿足頻域采樣點數(shù)N≥1 000,設(shè)計取頻域采樣點數(shù)N=1 024。所以FIFO緩沖器的寬度為16位,深度為1 024,結(jié)構(gòu)如圖4所示。
2.3 FFT運算模塊
離散傅里葉變換(DFT)開辟了頻域離散化的道路,使得數(shù)字信號處理可以在頻域采用數(shù)字運算方法進行。快速傅里葉變換(FFT)是DFT的快速算法,F(xiàn)FT運算模塊是本系統(tǒng)的核心模塊。在基2快速算法中,頻域抽取法FFT是一種常用的快速算法,即DIF—FFT。其數(shù)學(xué)模型為
系統(tǒng)采用按頻率抽選的順序輸入,倒序輸出結(jié)構(gòu),這種結(jié)構(gòu)中的每一級運算都是固定的,便于尋址,適合于在FPGA上實現(xiàn),其運算流圖結(jié)構(gòu)如圖5所示。
FFT運算模塊主要由乒乓RAM、蝶形運算單元、存儲單元、地址產(chǎn)生單元、控制單元等組成。FFT運算模塊的設(shè)計采用了乒乓操作,系統(tǒng)有兩塊乒乓RAM,每一塊由兩塊完全相同的雙口RAM組成。在具體計算過程中,A乒乓RAM中的一塊參加運算,另一塊從外部接收下一次FFT運算的數(shù)據(jù)。B乒乓RAM中也有一塊參加運算,另一塊向外部輸出上一次運算的結(jié)果。一次FFT運算完成后,兩塊乒乓RAM做一次乒乓,如此反復(fù),直到FFT運算結(jié)束并將結(jié)果求模輸出到結(jié)果存儲器。采用乒乓操作主要是為了保證運算模塊不會為了數(shù)據(jù)的載入而停止運算可以有效提高運算速度。
蝶形運算單元是整個FFT處理單元的重要部分,直接影響整個FFT單元性能。一個基2蝶形運算要進行1次復(fù)乘、2次復(fù)加。為提高運算速度采用并行運算,采用4個實數(shù)乘法器、3個實數(shù)加法器和3個實數(shù)減法器組成。數(shù)據(jù)格式選擇定點16位二進制補碼。設(shè)計時必須考慮乘法器速度,將會直接影響整個FFT處理單元的運算速度,乘法器的兩輸入均為16位,輸出32位。因為乘法器中帶有旋轉(zhuǎn)因子項,所以乘法運算后不應(yīng)改變輸入的幅值即乘法器的輸出仍為16位,因此要對輸出數(shù)據(jù)進行截取,截取其中16位作為加法器的輸入。一個蝶形運算在一個時鐘周期內(nèi)即可完成。FFT運算模塊結(jié)構(gòu)如圖6所示。
存儲單元包括2塊乒乓RAM、一塊RAM和一塊ROM,蝶形運算的輸入數(shù)據(jù)和輸出數(shù)據(jù)分別存儲在兩個雙口乒乓RAM中,RAM用來存儲FFT的模,旋轉(zhuǎn)因子事先計算好并存儲在ROM中。數(shù)據(jù)存入結(jié)果存儲器前,要將倒序輸出變?yōu)檎蜉敵?。轉(zhuǎn)換方法是將地址的最高位和最低位交換,次高位與次低位交換,依次類推。
2.4 VGA顯示模塊
VGA顯示模塊的設(shè)計,完成的功能:(1)在一定的工作頻率下,產(chǎn)生正確的時序關(guān)系,即工作時鐘信號、水平同步信號(HSyn)、垂直同步信號(VSyn)、消隱信號之間的關(guān)系。(2)在正確的時序控制下讀出幀緩存中的像素數(shù)據(jù),同時在當(dāng)前幀顯示完畢時,向視頻存儲控制器發(fā)信號,使視頻存儲控制器能夠及時刷新幀緩存中的像素數(shù)據(jù),圖7是VGA顯示模塊視圖。
其中CLK是VGA顯示模塊的時鐘信號,RST是復(fù)位信號,F(xiàn)ULL是VGA顯示模塊中幀緩存滿標(biāo)志信號,當(dāng)幀緩存中數(shù)據(jù)滿時,VGA顯示模塊將此信號發(fā)送給視頻存儲控制器,WR為VGA顯示模塊中的幀緩存寫操作信號,Pixel_data_in為讀入到VGA顯示模塊的幀緩存中的像素數(shù)據(jù),該數(shù)據(jù)來自視頻存儲器,而EOF則表明VGA顯示模塊的幀緩存已空,可以重新讀入一幀新的像素數(shù)據(jù)以供顯示。信號HSyn是由VGA顯示模塊產(chǎn)生的水平同步信號,發(fā)往顯示器的VGA接口,信號VSyn是由VGA顯示模塊產(chǎn)生的垂直同步信號,發(fā)往顯示器的VGA接口。信號尺是經(jīng)D/A轉(zhuǎn)換器分離的像素數(shù)據(jù)中的紅色基色信號,發(fā)往顯示器的VGA接口,信號G是經(jīng)D/A轉(zhuǎn)換器分離的像素數(shù)據(jù)中的綠色基色信號,發(fā)往顯示器的VGA接口,信號B
是經(jīng)D/A轉(zhuǎn)換器分離的像素數(shù)據(jù)中的藍(lán)色基色信號,發(fā)往顯示器的VGA接口。
其中VGA顯示時序驅(qū)動是完成設(shè)計的關(guān)鍵。在VGA顯示控制過程中,完成一幀掃描所需要的時間成為垂直掃描時間,其倒數(shù)稱為垂直掃描頻率,又稱刷新頻率。圖8是VGA顯示的時序關(guān)系。
3 仿真結(jié)果
該系統(tǒng)選擇Altera公司Cyclone II系列的EP2C70F89618芯片來實現(xiàn),F(xiàn)FT模塊是設(shè)計的核心部分。系統(tǒng)時鐘100 MHz,實驗輸入模擬信號為余弦信號,初始化參數(shù)設(shè)置FFT的點數(shù)為1 024點,旋轉(zhuǎn)因子精度為16 b,復(fù)數(shù)乘法器結(jié)構(gòu)為“4 Mults/2 Adders”。經(jīng)綜合時序分析得知:其工作時鐘頻率68.82 MHz。編譯成功后的RTL級電路描述如圖9所示。
在系統(tǒng)復(fù)位信號變?yōu)榈碗娖胶螅瑪?shù)據(jù)源將sink_ready信號置為高電平,表明有能力接收輸入信號。數(shù)據(jù)源加載第一個數(shù)據(jù)樣點到FFT函數(shù)中,同時將sink_sop信號置高電平,表明輸入模塊的開始。在下一個時鐘周期,sink_sop信號被復(fù)位,并以自然的順序加載后面的N-1個數(shù)據(jù)輸入樣點。當(dāng)FFT完成了輸入模塊的變換并且將source_ready信號置為高電平,并且以自然順序輸出復(fù)數(shù)變換域數(shù)據(jù)模塊。FFT模塊的功能仿真波形如圖10所示。
該模塊讀取一組數(shù)據(jù)點的實部和虛部,并將其進行運算處理得出結(jié)果并輸出相應(yīng)波形。從仿真波形可知這種設(shè)計結(jié)構(gòu)完全符合實現(xiàn)FFT電路的要求。
4 結(jié)束語
使用FPGA實現(xiàn)了從模擬信號采樣,到對采樣信號進行頻譜分析,最后控制VGA顯示器將這些頻譜數(shù)據(jù)以圖形的方式顯示出來。經(jīng)實驗證明,設(shè)計完全符合實際要求,可實現(xiàn)信號的頻譜分析與顯示功能。