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