本文作者:賽靈思工程師 Vivek Krishna Kanchanapalli
賽靈思 Fast Fourier Transform (FFT) IP 具有專用于處理 FFT 輸出中的位增長的縮放因子。本文旨在提供有關(guān)此 IP 中可用縮放方法的見解,并提供縮放調(diào)度選擇方法以避免出現(xiàn)文中所述的溢出問題。
縮放原因:
《快速傅里葉變換 (Fast Fourier Transform) 產(chǎn)品指南》(PG109) 中對于縮放的解釋如下:用于實現(xiàn) FFT 算法的算術(shù)運算可能導(dǎo)致位增長,而使用縮放則可避免出現(xiàn)此問題。在 Radix-2 和 Radix-4 FFT 實現(xiàn)的最差情況下,可能會出現(xiàn)這種位增長問題。
在Radix-2 蝶形中,其輸出可能按 1+sqrt(2) 的因子(即 2.414)出現(xiàn)增長。因此,在此情況下根據(jù)用于 FFT 的有符號格式,輸出將增長 2 位。同樣,Radix-4 的輸出可能按 1+3sqrt(2)=5.24 的因子出現(xiàn)增長,即增長 3 位。
后續(xù)每個蝶形階段都會引入這種位增長的問題(作為最差情況)。如果輸出中的位數(shù)必須與輸入中的位數(shù)相同,那么該位增長問題必須得到妥善處理。
對于 Radix-4,根據(jù)縮放調(diào)度中的值,其中位元可向右移 1、2 或 3 位。對應(yīng)的輸出值將縮小 2^(縮放值),這樣結(jié)果即可得到妥善處理,且輸出中不發(fā)生任何位增長。
如果不使用縮放,則會導(dǎo)致出現(xiàn)如上所述的位增長,即未經(jīng)縮放的輸出中包含整數(shù)值。輸出精度將包含整數(shù)部分,而二進制小數(shù)點則仍位于輸入精度中小數(shù)點所在相同位置。綜上,輸出精度為 (C_INPUT_WIDTH + C_NFFT_MAX + 1) 位,且在二進制小數(shù)點之后仍有 (C_INPUT_WIDTH - 1) 個小數(shù)位。
縮放類型:
僅當(dāng)數(shù)據(jù)格式為定點類型時,F(xiàn)FT IP 中的“縮放 (Scaling)”選項才可用。假定 FFT IP 的輸入精度類型為 Fix(C_INPUT_WIDTH,C_INPUT_WIDTH - 1)。
FFT IP 中有 3 個縮放選項可供使用:
1. 未縮放 (Unscaled)
2. 已縮放 (Scaled)
3. 塊浮點 (Block Floating Point)
Unscaled:正如其名,對 FFT IP 中的數(shù)據(jù)不應(yīng)用任何縮放。這會導(dǎo)致輸出中出現(xiàn)位增長。在此情況下,輸出精度將包含整數(shù)部分,LSB 中的增長將被截斷或舍入。此時,輸出精度為“Fix(C_INPUT_WIDTH + C_NFFT_MAX + 1, C_INPUT_WIDTH - 1)”,其中,給定的“C_NFFT_MAX”為 log2(maximum FFT point size)。
Scaled:通過在每個 FFT 階段中對位元執(zhí)行右移,從而使 FFT IP 的輸出縮小。每個階段的相移量是使用 scaling_sch 來設(shè)置的,并使用 FFT IP 上的“配置接口 (Configuration interface)”來提供此相移量。由于進行了縮放,F(xiàn)FT IP 的輸出精度與輸入精度相同,即,F(xiàn)ix((C_INPUT_WIDTH,C_INPUT_WIDTH - 1)。
為每個階段提供足夠的縮放時請務(wù)必謹(jǐn)慎,否則,可能會發(fā)生溢出,導(dǎo)致數(shù)據(jù)卷繞。一旦發(fā)生溢出,則可能導(dǎo)致無法繼續(xù)在應(yīng)用中使用這些數(shù)據(jù)。(PG109) 描述了 Vivado 中的 FFT IP、C/Mex 模型和 System Generator 中的 FFT IP 塊的縮放調(diào)度字段的寬度和格式。
Block Floating point (BFP):
在此模式下,核會自動判定縮放值,它會以最佳方式使用可用動態(tài)范圍,并避免溢出。輸出精度與輸入精度相同,即 Fix((C_INPUT_WIDTH,C_INPUT_WIDTH - 1)。核所應(yīng)用的位元右移總數(shù)的輸出結(jié)果為“m_axis_data_tuser”接口和“m_axis_status_tdata”接口上的指數(shù)值 (blk_exp)??s放因子計算方式為 (2^blk_exp)。由于該核自動計算縮放值,它會使用附加資源,從而導(dǎo)致資源計數(shù)比“scaled”模式下的資源數(shù)更高。
判定縮放調(diào)度:
在 FFT IP 中使用 scaled 模式時,需通過運行系統(tǒng)仿真來判定用于避免溢出的縮放調(diào)度。
對于特定類型的輸入數(shù)據(jù)中的大部分幀而言,要選出能夠避免溢出的最佳縮放值,可能難度較大。在此情況下,可使用 C 語言模型工具來幫助選擇縮放調(diào)度。
在每個階段中,對典型輸入數(shù)據(jù)集運行仿真時,通過監(jiān)控狀態(tài)總線中的溢出信號,可以判定適用縮小還是放大。(PG109) 的第 5 章對 FFT C 語言模型和 MATLAB 模型進行了詳細(xì)解釋。
(PG109) 還描述了適用于每種 FFT 架構(gòu)類型的保守縮放調(diào)度方法。此縮放調(diào)度可避免所有數(shù)據(jù)類型出現(xiàn)溢出。
如果 N=1024
Radix-4 突發(fā) I/O:[10 10 10 10 11]
流水打拍式串流 I/O:[10 10 10 10 11]
Radix-2 突發(fā) I/O 或 Radix-2 輕量級突發(fā) I/O:[01 01 01 01 01 01 01 01 01 10]
保守型縮放調(diào)度可根據(jù)“N”的值進行進一步擴展或縮減。
例如,在流水打拍式串流模式下,保守型縮放調(diào)度如下:
如果 N=512:[01 10 10 10 11]
如果 N=2048:[01 10 10 10 10 11]
雖然保守型縮放可阻止所有輸入值出現(xiàn)溢出,但由于過度縮放,它也會減小輸出值。這可能導(dǎo)致無法有效利用輸出值的可用動態(tài)范圍,并導(dǎo)致輸出值過度縮放。由此導(dǎo)致需要執(zhí)行仿真才能判定相應(yīng)的縮放因子,使所提供的輸出既能有效利用可用動態(tài)范圍同時也能避免溢出。
另一種縮放值的判定方法是在 Block-Floating Point (BFP) 模式下使用 FFT IP。FFT C 語言模型可在 BFP 模式下使用,并可對輸入數(shù)據(jù)運行仿真。BFP 將在狀態(tài)接口中生成塊指數(shù)值,以指示核所應(yīng)用的縮放量,從而以最有效方式利用輸出的動態(tài)范圍并避免輸出發(fā)生溢出。
由于 BFP 下的塊指數(shù)表示核內(nèi)部的位元相移數(shù),因此“Scaled”模式下的縮放調(diào)度的相移位數(shù)可設(shè)置為與之相同的值。例如,在 BFP 模式下且 N=1024,如果塊指數(shù)值為“9”,那么“Scaled”模式下的“scaling_ sch”可設(shè)置為相移 9 位。有多種方法可用于在不同 FFT 階段間實現(xiàn)相同的位移,遵循保守型縮放調(diào)度模式正是其中一種適合的“scaling_sch”配置方法。
在以上示例中,塊指數(shù)值 9 可在“Scaling_sch”中配置為 ( 00 10 10 10 11),從而導(dǎo)致相移 9 位。此縮放調(diào)度所提供的輸出比保守型縮放調(diào)度更好,后者可能導(dǎo)致數(shù)據(jù)過度縮放。
示例:
在 MATLAB 中,F(xiàn)FT Mex 模型的用途示例之一就是用于觀測縮放對于輸出的影響。由于使用了 Mex 模型,因此數(shù)據(jù)圖也可供使用。在此示例中,F(xiàn)FT 含 14 種不同輸入幀,并針對每個幀使用不同縮放調(diào)度來執(zhí)行計算。MEX 文件包含在本文隨附的 ZIP 文件內(nèi)。
首先,在 BFP 模式下配置 FFT,并將其用于判定每個幀的塊指數(shù)。隨后,在 scaled 模式下配置 FFT,并通過將 scaling_schedule 設(shè)置為如下值來計算每個幀:
1. 保守型縮放值。
2. 等同于 BFP 模式下針對該幀獲取的塊指數(shù)的縮放值。
隨后,即可繪制出通過 Block Floating pointing (BFP) 模式和 Scaled 模式使用上述縮放因子獲取的 FFT 的量級。圖例如下。在圖中可以觀測得知,保守型縮放導(dǎo)致數(shù)據(jù)縮放過度,并避免了溢出,而含塊指數(shù)輸出的 BFP 輸出和 Scaled FFT 輸出則可提供更高輸出量級,同時避免溢出。
示例的局限性:此示例使用的 .txt 文件含 14 幀,每幀含 2048 個樣本。要檢查其它 FFT 點數(shù)大小“N”,請生成含“N”個樣本的數(shù)據(jù)幀。
FFT IP 輸出。紅線 - BFP 模式輸出,綠色虛線 - Scaled 模式下的 FFT IP 輸出,縮放因子設(shè)置為塊指數(shù),藍色 - 使用保守型縮放因子的輸出。
說明:
此處隨附的 m 腳本需要使用 FFT IP C 語言模型文件。要運行此示例,請將該目錄解壓,將示例文件(m 腳本和文本文件)復(fù)制到在 Vivado 中生成 FFT IP 輸出文件時所創(chuàng)建的 C 模型目錄中。
完成文件復(fù)制后,需構(gòu)建專為 FFT 提供的 Mex 文件 (make_xfft_v9_1_mex.m)。如需獲取有關(guān)使用 FFT C 語言模型的更多指示信息,請參閱 (PG109) 第 5 章:C 語言模型。
PG109:
https://china.xilinx.com/support/documentation/ip_documentation/xfft/v9_1/pg109-xfft.pdf
審核編輯:湯梓紅
-
賽靈思
+關(guān)注
關(guān)注
32文章
1794瀏覽量
131162 -
IP
+關(guān)注
關(guān)注
5文章
1647瀏覽量
149327 -
FFT
+關(guān)注
關(guān)注
15文章
434瀏覽量
59304
原文標(biāo)題:開發(fā)者分享|賽靈思 Fast Fourier Transform IP 中的縮放因子選擇
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論