快速傅里葉變換 (Fast Fourier Transform,F(xiàn)FT), 即利用計算機(jī)計算離散傅里葉變換(DFT)的高效、快速計算方法的統(tǒng)稱,簡稱FFT。DFT是實現(xiàn)了從頻域(頻域分析往往比時域分析更優(yōu)越)對信號與系統(tǒng)進(jìn)行分析。然而,隨著序列長度的增加,計算量也顯著增加,對于計算機(jī)而言,處理時間就越長,消耗的資源也就越多。
忘了什么是傅里葉變換的同學(xué),趕緊拿出《信號與系統(tǒng)》翻一下。實在沒書,找度娘。對于連續(xù)時間信號f(t),定義式如下:
傅里葉變換:
傅里葉逆變換:
信號處理領(lǐng)域大名鼎鼎的傅里葉變換,正式由傅里葉提出的,不得不說,實在太偉大了,頂禮膜拜。
在信號處理中,由于計算機(jī)通常只能處理數(shù)字信號,因此通過對連續(xù)信號進(jìn)行采樣離散化,進(jìn)而有了離散傅里葉變換。
話不多說,直入主題,首先把DFT公式搬出來:

原信號x(t)的采樣信號x[n]也可以用X[K]來表示:

1965年,庫利和圖基提出了快速傅里葉變換(FFT)算法,采用這種算法能使計算機(jī)計算DFT所需要的乘法次數(shù)大為減少,特別是被變換的抽樣點數(shù)N越多,F(xiàn)FT算法計算量的節(jié)省就越顯著。
常用計算方法:
時間抽取算法:令序列的長度為N(2的冪),可以將時域序列x(n)分解為兩部分,一是偶數(shù)部分x(2n),另一部分是計數(shù)部分x(2n+1),于是信號序列x(n)的離散傅里葉變換可以用兩個N/2抽樣點的離散傅里葉變換來辨識核計算。
頻率抽取算法:按照頻率吧抽取的FFT算法是將頻域信號序列X(k)分解為奇偶兩部分,但算法仍然是由時域信號序列開始逐級計算,同樣把N點分成N/2點計算FFT。
02
FFT原理
FFT是DFT的快速算法,可以將一個信號從時域變換到頻域。很多時候信號在時域很難進(jìn)行信號特征分析,變換到頻域后,就很容易看出信號的頻率、功率、相位等特征信息。更多詳細(xì)的解釋,可移步看這里深入淺出的講解傅里葉變換(真正的通俗易懂)或者在CSDN中閱讀深入淺出解釋FFT系列(非公眾號文章,超鏈接失敗,抱歉,可去CSDN看原文博客),講得比較清楚透徹,不愧是10年碼齡的巨佬。在這里我就不再贅述了。
03
FFT IP Core使用
概述
以Xilinx Vivado設(shè)計套件中提供的FFT IP為例,簡要說明如何進(jìn)行FFT IP配置和設(shè)計。
FFT Core用于計算N點的DFT或IDFT,N=2m,m=3~16。對于計算FFT,有三種算術(shù)選項用于計算FFT:
全精度無縮放算法
定點縮放,提供縮放表
塊浮點(運行時調(diào)整縮放)
對于N點大小,可對正向/逆向變換、縮放表循環(huán)前綴進(jìn)行配置。
提供四種可選架構(gòu):
Pipelined Streaming I/O
Radix-4 Burst I/O
Radix-2 Burst I/O
Radix-2 Lite Burst I/O
端口描述
FFT IP Core的端口如圖1所示,對端口的描述,參考產(chǎn)品指南PG-109-XFFT.pdf。

圖1 FFT端口
FFT IP配置
舉個栗子:單通道,512點,Radix-2,Burst I/O,定點數(shù),縮放,取整模式Truncation,輸入數(shù)據(jù)位寬16bit,相位因子位寬16,自然序輸出,無循環(huán)前綴。
在Vivado中創(chuàng)建工程后,在工程管理器下的IP Catalog中選擇并配置FFT IP,在IP配置向?qū)У闹敢?,依次進(jìn)行相關(guān)參數(shù)的配置,如圖2所示。配置通道數(shù),變換長度,實現(xiàn)架構(gòu),數(shù)據(jù)格式,縮放,取整模式,數(shù)據(jù)呼出順序,是否插入循環(huán)前綴(CP)等。



圖2 FFT IP配置
在向?qū)б晥D左側(cè),可查看IP端口框圖,實現(xiàn)詳情以及時延信息,如圖3所示。這里需要注意輸入輸出數(shù)據(jù)的格式以及配置通道數(shù)據(jù)的格式。



圖3 查看IP實現(xiàn)信息
配置完成后,輸出生成定制FFT IP,最后再將其實例化到工程模塊中。
AXI-Stream注意事項
該IP的端口采用了標(biāo)準(zhǔn)的AXI-Stream協(xié)議,數(shù)據(jù)傳輸基本握手,如圖4所示。

圖4 AXI-Stream信道數(shù)據(jù)傳輸
AXI信道規(guī)則
所有的TDATA和TUSER字段被打包成小端格式,也就是一個子字段的第0位與TDATA或TUSER的第0位對齊。
字段不包括在TDATA或TUSER中,除非以這種方式配置了核它需要字段出現(xiàn)。例如,如果核心配置為有一個固定的點大小,沒有位分配給指定點大小的NFFT字段。
所有的TDATA和TUSER矢量都是8bit的整數(shù)倍。
配置通道
配置通道端口信號如表1所示。
表1 配置通道端口信號
| 名稱 | 寬度 | 方向 | 描述 |
| s_axis_config_tdata | 可變 | I | 承載配置信息:CP_LEN,F(xiàn)WD/INV,NFFT和SCALE_SCH |
| s_axis_config_tvalid | 1 | I | 由外部主機(jī)輸入,指示當(dāng)前數(shù)據(jù)可用 |
| s_axis_config_tready | 1 | I | 由從機(jī)輸入,指示從機(jī)可接收數(shù)據(jù) |
配置通道(s_axis_config)接口是AXI通道,TDATA字段接口定義如下表2所示,所有需要paded的字段如果未達(dá)到8bit邊界,則需要擴(kuò)展到8bit邊界。擴(kuò)展的bit可以未任意值,設(shè)計為常量值可節(jié)省器件資源。
表2TDATA字段接口定義
| 字段名稱 | 寬度 | Padded | 描述 |
| NFFT | 5 | yes | 轉(zhuǎn)換點數(shù):NFFT為最大轉(zhuǎn)換點數(shù)或者更小點數(shù)。例如,一個1024點FFT可以計算1024點,512點,256點等。該值為log2(point_size) |
| CP_LEN | Log2(最大point_size) | no | 循環(huán)前綴長度:CP_LEN可以是0到(point_size-1)的任意值,該值僅在循環(huán)前綴插入有效 |
| FWD_INV | 1 | no |
FWD_INV=1,表示FFT運算; FWD_INV=0,表示IFFT運算。在多通道中,bit0(LSB)表示通道0配置,bit1表示通道1配置,以此類推。 |
| SCALE_SCH |
流水線I/O和Radix-4 I/O架構(gòu):2×ceil(NFFT/2) Radix-2突發(fā) I/O和Radix-2Lite I/O架構(gòu):2×NFFT |
no |
縮放方案: (1)對于突發(fā)I/O架構(gòu),每級縮放因子由2bit定義,縮放因子可以為3,2,1,0,代表右移bit數(shù)。例如,對于N=1024點,Radix-4突發(fā)I/O的縮放因子為[1 0 2 3 2],對于N=128點,Radix-2突發(fā)I/O或者Radix-2 Lite突發(fā)I/O架構(gòu),可能的縮放方案[1 1 1 1 0 1 2] (2)對于流水I/O架構(gòu),縮放因子由每對Radix-2運算級定義,也是采樣2bit位寬。例如,NFFT=256,可能的縮放因子為[2 2 2 3],當(dāng)N不是4的冪次時,最后一級最大bit為1bit。例如,N-512,可能的縮放方案[0 2 2 2 ]或者[1 2 2 2],但是[2 2 2 2 ]是非法的,因為此時縮放因子的MSB位只能是00或01. |
TDATA數(shù)據(jù)格式如圖5所示。

圖5 config_tdata數(shù)據(jù)據(jù)格式
其中,NFFT設(shè)置情況,如表3所示。需要注意的是,如果選項runtime configurable transform length被選后,變換點大小才可以在配置通道的NFFT字段進(jìn)行設(shè)置。
表3NFFT設(shè)置
| NFFT[4:0] | Transform size(N) |
| 00011 | 8 |
| 00100 | 16 |
| 00101 | 32 |
| 00110 | 64 |
| 00111 | 128 |
| 01000 | 256 |
| 01001 | 512 |
| 01010 | 1024 |
| 01011 | 2048 |
| 01100 | 4096 |
| 01101 | 8192 |
| 01110 | 16384 |
| 01111 | 32768 |
| 10000 | 65536 |
正反變換及縮放
FWD_INV=1時,正向變換;FWD_INV=0時,逆向變換。
對于FFT/IFFT各級縮放,在不同的實現(xiàn)架構(gòu)中,縮放因子的設(shè)置有所不同??蓞⒖急? 或者產(chǎn)品指南:PG109-xfft.pdf文檔ch.4操作理論的Run Time Transform Configuration部分。
循環(huán)前綴(CP)
將輸出結(jié)果的尾部復(fù)制到頭部,輸出順序要選擇自然序。插入循環(huán)前綴,可逐幀設(shè)置,不用打斷幀處理進(jìn)程。
補(bǔ)充:定點數(shù)
在FPGA處理過程中,常常要對浮點數(shù)進(jìn)行定點化處理。Matlab中提供了一個非常方便的定點化函數(shù)fi。
fi(data,s,w,f) 各參數(shù)的定義:
s:signed or unsigned 標(biāo)志;
signed: 包含符號位;
f:定點小數(shù)精度。
例如:在命令行輸入fi(pi,1,16,13),回車,如圖6所示。

圖6 浮點數(shù)定點
查看定點后的數(shù)據(jù), 命令行輸入ans.hex,顯示十六進(jìn)制數(shù)6488,如圖7所示。

圖7 定點16進(jìn)制數(shù)據(jù)
命令行輸入ans.dec,顯示十進(jìn)制數(shù),如圖8所示。

圖8 定點10進(jìn)制數(shù)據(jù)
在FPGA處理定點乘法,可用乘法器IP—Multiplier,如圖9所示。

圖9 乘法器IP
04
FFT模塊設(shè)計demo
以調(diào)用FFT,并通過ROM預(yù)存所需數(shù)據(jù)進(jìn)行一個簡單的demo設(shè)計。
利用FFT IP,搭建工程。分別使用兩個ROM存儲DMRS0的I、Q兩路數(shù)據(jù),外部主機(jī)斷言m_data_tready拉高時,準(zhǔn)備開始從ROM讀取數(shù)據(jù),同時配置FFT。IFFT計算輸出通過乘以一個系數(shù),使其幅度值接近于1。設(shè)計框圖如圖10所示。

圖10 設(shè)計框圖
以DMRS0信號5M帶寬300點(中間補(bǔ)零,至512點)作IFFT為例,創(chuàng)建工程,編寫RTL代碼。針對配置通道的數(shù)據(jù)配置(如SCALE_SCH、FWD/INV、CP_LEN、NFFT),假設(shè)基于Radix-2架構(gòu)作IFFT,不加循環(huán)前綴,不更改NFFT點數(shù),配置情況如下。
s_axis_config_tdata = 23'b0000_0000_0000_0000_0000_0000;
注意,高M(jìn)SB五位做了填充,使得TDATA的位寬是8的整數(shù)倍。
FPGA仿真結(jié)果如圖11所示。

圖11 FPGA工程仿真
MATLAB進(jìn)行IFFT變換,并進(jìn)行適當(dāng)?shù)目s放,同時將FPGA仿真的結(jié)果導(dǎo)入,計算各自的幅度,并繪于同一圖中,如圖12所示。

圖12 幅度值對比
計算各自的相位角弧度,如圖13所示。

圖13 相位弧度對比
通過對比分析可知,MATLAB仿真與FPGA實現(xiàn)結(jié)果基本一致。
在LTE、5G等無線通信中,IFFT和FFT變換是一個繞不過的話題。即便5G在探索非正交多址接入技術(shù)(NOMA),因主動引入干擾,接收機(jī)設(shè)計復(fù)雜度急劇上升,能否被采用不得而知。
-
FPGA
+關(guān)注
關(guān)注
1660文章
22416瀏覽量
636571 -
matlab
+關(guān)注
關(guān)注
189文章
3025瀏覽量
238757 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94804 -
FFT
+關(guān)注
關(guān)注
15文章
458瀏覽量
63093
原文標(biāo)題:Vivado中FFT IP配置及應(yīng)用
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問如何進(jìn)行FFT濾波
一種基于FPGA的可配置FFT IP核實現(xiàn)設(shè)計
基于FPGA的FFT和IFFT IP核應(yīng)用實例
IP設(shè)計原理是什么?如何進(jìn)行IP模塊設(shè)計?
IP101GR單口PHY芯片是如何進(jìn)行通信的
利用面向?qū)ο蠹夹g(shù)進(jìn)行可配置的FFT IP設(shè)計與實現(xiàn)
利用FFT IP Core實現(xiàn)FFT算法
Quartus中fft ip core的使用
可配置FFT IP核的實現(xiàn)及基礎(chǔ)教程
如何進(jìn)行OPCDCOM配置
Gowin FFT IP用戶指南
如何進(jìn)行IP檢測
公共 IP 地址前綴如何進(jìn)行網(wǎng)絡(luò)資源配置?
Vivado中FFT IP核的使用教程
如何進(jìn)行FFT IP配置和設(shè)計
評論