許多應(yīng)用都要求能夠在頻域內(nèi)開展工作。本文將介紹如何處理FPGA設(shè)計中的頻域問題。
對許多工程師而言,在頻域中開展工作不如在時域中開展工作那么自然,可能是因為頻率與復雜的數(shù)學運算有關(guān)。但是要充分發(fā)揮賽靈思FPGA解決方案的潛力,您需要在這兩個域中自由切換。
令人欣慰的是詳細地掌握頻域并不像您最初想象的那樣令人生畏。不管是您自己設(shè)計的定制模塊還是市場上現(xiàn)有的IP 模塊,都能幫助您輕松轉(zhuǎn)入轉(zhuǎn)出頻域。同時在頻域中實現(xiàn)高速處理的方法也不乏其數(shù)。
時域還是頻域?
工程師既能在時域中檢驗和處理信號,根據(jù)時間分析信號,也能在頻域中檢驗和處理信號,根據(jù)頻率分析信號。項目對工程師的主要要求之一,就是應(yīng)該知道什么時候應(yīng)該開展哪種分析。
一般在電子系統(tǒng)中,需要考查的信號是一個不斷變化的電壓、電流或頻率。它可以是傳感器的輸出,也可能是系統(tǒng)其他部分生成的輸出。在時域中,您可以測量信號的幅度、頻率和周期,以及信號上升或下降時間等更有意義的參數(shù)。實驗室環(huán)境中觀察時域信號常用的是示波器或邏輯分析儀。
但是信號的一些參數(shù)體現(xiàn)在頻域內(nèi)。必須在頻率中分析這些參數(shù),才能解讀其中包含的信息。在頻域中可以識別信號的頻率分量、各自的幅度和每種頻率的相位。由于在頻域中便于開展卷積運算,因此在頻域中工作也能大大簡化信號處理。卷積是一種將兩種信號混合成第三種信號的數(shù)學方法。和時域分析一樣,如果想要在實驗室環(huán)境中觀察頻域信號,可以使用頻譜分析儀。
對某些應(yīng)用而言在時域中工作比較合適,例如用于監(jiān)測更大型系統(tǒng)的電壓或溫度的系統(tǒng)。雖然噪聲可能是個問題,在許多情況下取一定數(shù)量樣本的平均值就可以滿足要求。但對其他應(yīng)用來說,最好是在頻域中開展工作。例如需要從另一信號中過濾某種信號的信號處理應(yīng)用,或是需要將信號與噪聲源分離的信號處理應(yīng)用,最好在頻率中開展分析。
由于采樣是在時域中完成的,在時域中工作基本不需要對量化數(shù)字信號進行后處理。與此相反,在頻域中開展工作首先要求應(yīng)用將量化數(shù)據(jù)從時域變換到頻域。同樣,從頻域輸出后處理過的數(shù)據(jù)時,需要從頻率轉(zhuǎn)回到時域。
如何進行變換?
根據(jù)信號的類型,如重復性還是非重復性、離散還是非離散,有多種方法可用于時域和頻域之間的變換,包括傅里葉級數(shù)、傅里葉變換和Z 變換。尤其是在電子信號處理和FPGA應(yīng)用中,最常用到的變換是離散傅里葉變換(DFT),傅里葉變換中的一種。工程師使用DFT 分析具有周期性和離散性的信號,即由一定數(shù)量均勻分布在采樣頻率中的n 位樣本組成的信號。在許多應(yīng)用中這種信號一般來自系統(tǒng)內(nèi)的ADC。
簡單地說,DFT 的工作原理就是把輸入信號分解成代表信號正弦分量和余弦分量的兩個輸出信號。因此對由N 個樣本組成的時域序列,DFT 會返回兩組N/2+1 個余弦波樣本和正弦波樣本,分別被稱為實分量和虛分量(圖1)。實樣本和虛樣本的寬度為n位輸入信號寬度的n/2。
?
圖1 - 時域中的n位被變換為頻域中n/2實位和n/2虛位
計算DFT 的算法十分簡明,如下式所示:
?
其中,x[i] 代表時域信號;i 的取值為0 到N-1 ;k 的取值為0 到N/2。這種方法被稱為關(guān)聯(lián)法,其功能是將輸入信號與對應(yīng)迭代的正弦波或余弦波相乘,以確定其幅度。
當然,您可能想要在應(yīng)用中的某點從頻域變換回時域。為此可以使用綜合公式,它將實波形和虛波形結(jié)合起來,重建時域信號,即:
但ReX 和ImX 是正弦波和余弦波的縮放結(jié)果,因此需要進行縮放。除Rex[0] 和Rex[N/2] 之外的所有情況,ReX 和ImX 的值均為ReX[k]或ImX[k] 除以N/2。對Rex[0] 和Rex[N/2],則除以N。出于明顯的理由,這種運算被稱為傅里葉反變換(IDFT)。
通過探討確定DFT 和IDFT 所使用的算法,可能有助于了解如何加以利用這些算法。
您可以使用Octave、MATLAB?乃至Excel 對所采集的數(shù)據(jù)進行DFT計算。許多實驗室工具,如示波器,也能根據(jù)需要執(zhí)行DFT 計算。
不過需要指出的是上述的DFT 和IDFT 被稱為實DFT 和實IDFT,因為輸入的是實數(shù)而非復數(shù)。很快就會清楚為何要了解這一點。
從電信到圖像處理、雷達和聲納,難以想象有比傅里葉變換更強大、更適合并可實現(xiàn)FPGA 中的分析技術(shù)。實際上DFT 是最常用FPGA 應(yīng)用之一(即,生產(chǎn)有限輸入響應(yīng)(FIR)濾波器系數(shù))的基礎(chǔ)(參閱賽靈思中國通訊第43 期《數(shù)字濾波器設(shè)計與實現(xiàn)詳情》)。
但其用途不局限于濾波。DFT 和IDFT 還可用于電信處理中,用于執(zhí)行電信通道的信道化和重組。在頻譜監(jiān)測應(yīng)用中,它們可用來判斷監(jiān)測帶寬內(nèi)的頻率構(gòu)成。在圖像處理中,它們用于處理圖像卷積,供濾波器內(nèi)核開展圖像模式識別等操作。所有這些應(yīng)用在實現(xiàn)過程中一般使用比上文介紹的更有效的算法來計算DFT。
總而言之,了解DFT 并將其實現(xiàn)在FPGA 中是每個FPGA 開發(fā)人員的必備技能。
基于FPGA的實現(xiàn)方式
上文介紹的DFT 和IDFT 的實現(xiàn)一般采用嵌套循環(huán),每個循環(huán)完成N次計算。因此實現(xiàn)DFT 計算所需的時間為:
DFTtime = N * N * Kd ft
其中,Kdft 表示完成每次迭代的處理時間。顯然這種方法實現(xiàn)起來極為耗時。為此FPGA 中實現(xiàn)DFT 一般使用快速傅里葉變換算法(FFT)。FFT 常常被稱為我們時代最重要的算法,因為它對許多行業(yè)都產(chǎn)生根本性的影響。
FFT 與DFT 算法稍有不同,它計算的是復數(shù)DFT,即它需要實時域信號和虛時域信號,得到的結(jié)果的寬度是n 位而非n/2 位。這意味著如果需要計算實DFT,必須首先把虛部設(shè)為0,然后把時域信號轉(zhuǎn)移到實部。如果要在賽靈思FPGA 實現(xiàn)FFT,可以有兩種選擇。您可以使用您選擇的HDL 重新編寫FFT,也可以使用Vivado? 設(shè)計套件IP Catalog 或其他來源提供的FFT IP。除非有不得已的原因不能使用IP,為縮短開發(fā)時間,一般都應(yīng)該選擇IP。
FFT 的基本方法是將時域信號分解為一系列單點時域信號。因為樣本被重新排序,這個過程常被稱為位反轉(zhuǎn)。如果沒有位反轉(zhuǎn)算法這一捷徑可走,那么創(chuàng)建單點時域信號的級數(shù)可以用Log2 N 計算得到,其中,N 表示位數(shù)。
隨后使用這些單點時域信號計算每個點的頻譜。這一計算相當簡單,因為頻譜與單點的時域相等。
這些單頻點的重組是FFT 算法最復雜環(huán)節(jié)。必須每一級重組一次這些頻點,恰好是時域分解的反向操作。因此要重建頻譜需要Log2 N 級,這里就是著名的蝶形FFT 發(fā)揮作用的地方。
與DFT 的執(zhí)行時間相比,F(xiàn)FT 用時為:
FFTtime = K f ft * N Log2 N
與計算DFT 相比,執(zhí)行時間明顯縮短。
在FPGA 中實現(xiàn)FFT 算法時,還必須考慮FFT 采樣數(shù)。FFT 采樣數(shù)將決定本底噪聲,在此之下將無法再看到有用信號。FFT 采樣數(shù)還將決定頻點之間的間距。使用下面的公式可以確定FFT 采樣數(shù):
其中, n 為時域中量化位的數(shù)量,F(xiàn)FTSize 為FFT 采樣數(shù)。對基于FPGA 的設(shè)計,這一般是2 的冪,如256、512、1,024 等。頻點可采用下列公式計算出其等間隔:
舉個非常簡單的例子,在采樣頻率(FS)為100 MHz 的情況下,使用128 個FFT 樣本可實現(xiàn)0.39 Hz 的頻率精度。這意味著如果頻率彼此之間的間隔小于0.39 Hz 將無法分辨。
高速采樣
許多FPGA 中的FFT 應(yīng)用和較高性能的系統(tǒng)都工作在非常高的頻率下。高頻運行會產(chǎn)生自己特有的設(shè)計難題。
因為在高頻下無法維持奈奎斯特采樣率(每個周期兩個樣本),因此需要不同的方法。例如使用2.5 GHz采樣率采樣3 GHz 全功率帶寬模擬輸入。運用奈奎斯特頻率法則,高于1.25 GHz 的信號將被混疊到有用的第一個奈奎斯特域中。這些混疊鏡像將成為基本信號的諧波分量,因此包含與非混疊信號相同的信息,如圖2所示。
?
圖2 - 奈奎斯特域與混疊
要判斷得到的諧波或諧波成分的頻率布局,可使用下列算法:
?
其中,N 表示有用諧波的整數(shù)。
繼續(xù)前述例子,如果采樣率為2,500 MHz,基頻為1,807 MHz,則會在第一奈奎斯特域中產(chǎn)生693 MHz 的諧波成分,供在FFT 中進一步處理。
在掌握了頻譜的基本知識之后,下一個需要考慮的關(guān)鍵因素是如何將這些ADC 和DAC 器件與FPGA 連接在一起。在上面所述的實例中,無法從ADC 接收頻率為采樣頻率一半(采樣率為2.5 Gbps)的數(shù)據(jù)。為此,高性能數(shù)據(jù)轉(zhuǎn)換器使用多路復用的數(shù)字輸入輸出,該輸入輸出工作在較低頻率下,一般為轉(zhuǎn)換器的采樣頻率的四分之一或二分之一(即FS/4 或 FS/2)。
FPGA 通過多個數(shù)據(jù)流接收到數(shù)據(jù)后,如果希望執(zhí)行DFT,那么下一個要解決的問題就是如何在FPGA 內(nèi)處理數(shù)據(jù)。包括電信和射電天文在內(nèi)的多種應(yīng)用常用的方法是使用重組或分解FFT 結(jié)構(gòu)(如圖3 所示)。
?
圖3 - 分解與重組FFT結(jié)構(gòu)
雖然這種應(yīng)用與直接FFT 相比更復雜,使用這種方法能夠?qū)崿F(xiàn)高速處理。
正您所見,在頻域中工作并非像最初想象的那樣困難,特別是有IP 模塊幫助轉(zhuǎn)入轉(zhuǎn)出頻域的情況下。此外還有多種方法可供選擇,幫助您實現(xiàn)高速處理。
?
?
評論
查看更多