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