快速傅里葉變換 (Fast Fourier Transform,F(xiàn)FT), 即利用計(jì)算機(jī)計(jì)算離散傅里葉變換(DFT)的高效、快速計(jì)算方法的統(tǒng)稱(chēng),簡(jiǎn)稱(chēng)FFT。DFT是實(shí)現(xiàn)了從頻域(頻域分析往往比時(shí)域分析更優(yōu)越)對(duì)信號(hào)與系統(tǒng)進(jìn)行分析。然而,隨著序列長(zhǎng)度的增加,計(jì)算量也顯著增加,對(duì)于計(jì)算機(jī)而言,處理時(shí)間就越長(zhǎng),消耗的資源也就越多。
忘了什么是傅里葉變換的同學(xué),趕緊拿出《信號(hào)與系統(tǒng)》翻一下。實(shí)在沒(méi)書(shū),找度娘。對(duì)于連續(xù)時(shí)間信號(hào)f(t),定義式如下:
傅里葉變換:
傅里葉逆變換:
信號(hào)處理領(lǐng)域大名鼎鼎的傅里葉變換,正式由傅里葉提出的,不得不說(shuō),實(shí)在太偉大了,頂禮膜拜。
在信號(hào)處理中,由于計(jì)算機(jī)通常只能處理數(shù)字信號(hào),因此通過(guò)對(duì)連續(xù)信號(hào)進(jìn)行采樣離散化,進(jìn)而有了離散傅里葉變換。
話不多說(shuō),直入主題,首先把DFT公式搬出來(lái):
原信號(hào)x(t)的采樣信號(hào)x[n]也可以用X[K]來(lái)表示:
1965年,庫(kù)利和圖基提出了快速傅里葉變換(FFT)算法,采用這種算法能使計(jì)算機(jī)計(jì)算DFT所需要的乘法次數(shù)大為減少,特別是被變換的抽樣點(diǎn)數(shù)N越多,F(xiàn)FT算法計(jì)算量的節(jié)省就越顯著。
常用計(jì)算方法:
時(shí)間抽取算法:令序列的長(zhǎng)度為N(2的冪),可以將時(shí)域序列x(n)分解為兩部分,一是偶數(shù)部分x(2n),另一部分是計(jì)數(shù)部分x(2n+1),于是信號(hào)序列x(n)的離散傅里葉變換可以用兩個(gè)N/2抽樣點(diǎn)的離散傅里葉變換來(lái)辨識(shí)核計(jì)算。
頻率抽取算法:按照頻率吧抽取的FFT算法是將頻域信號(hào)序列X(k)分解為奇偶兩部分,但算法仍然是由時(shí)域信號(hào)序列開(kāi)始逐級(jí)計(jì)算,同樣把N點(diǎn)分成N/2點(diǎn)計(jì)算FFT。
02
FFT原理
FFT是DFT的快速算法,可以將一個(gè)信號(hào)從時(shí)域變換到頻域。很多時(shí)候信號(hào)在時(shí)域很難進(jìn)行信號(hào)特征分析,變換到頻域后,就很容易看出信號(hào)的頻率、功率、相位等特征信息。更多詳細(xì)的解釋?zhuān)梢撇娇催@里深入淺出的講解傅里葉變換(真正的通俗易懂)或者在CSDN中閱讀深入淺出解釋FFT系列(非公眾號(hào)文章,超鏈接失敗,抱歉,可去CSDN看原文博客),講得比較清楚透徹,不愧是10年碼齡的巨佬。在這里我就不再贅述了。
03
FFT IP Core使用
概述
以Xilinx Vivado設(shè)計(jì)套件中提供的FFT IP為例,簡(jiǎn)要說(shuō)明如何進(jìn)行FFT IP配置和設(shè)計(jì)。
FFT Core用于計(jì)算N點(diǎn)的DFT或IDFT,N=2m,m=3~16。對(duì)于計(jì)算FFT,有三種算術(shù)選項(xiàng)用于計(jì)算FFT:
全精度無(wú)縮放算法
定點(diǎn)縮放,提供縮放表
塊浮點(diǎn)(運(yùn)行時(shí)調(diào)整縮放)
對(duì)于N點(diǎn)大小,可對(duì)正向/逆向變換、縮放表循環(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所示,對(duì)端口的描述,參考產(chǎn)品指南PG-109-XFFT.pdf。
圖1 FFT端口
FFT IP配置
舉個(gè)栗子:?jiǎn)瓮ǖ溃?12點(diǎn),Radix-2,Burst I/O,定點(diǎn)數(shù),縮放,取整模式Truncation,輸入數(shù)據(jù)位寬16bit,相位因子位寬16,自然序輸出,無(wú)循環(huán)前綴。
在Vivado中創(chuàng)建工程后,在工程管理器下的IP Catalog中選擇并配置FFT IP,在IP配置向?qū)У闹敢拢来芜M(jìn)行相關(guān)參數(shù)的配置,如圖2所示。配置通道數(shù),變換長(zhǎng)度,實(shí)現(xiàn)架構(gòu),數(shù)據(jù)格式,縮放,取整模式,數(shù)據(jù)呼出順序,是否插入循環(huán)前綴(CP)等。
圖2 FFT IP配置
在向?qū)б晥D左側(cè),可查看IP端口框圖,實(shí)現(xiàn)詳情以及時(shí)延信息,如圖3所示。這里需要注意輸入輸出數(shù)據(jù)的格式以及配置通道數(shù)據(jù)的格式。
圖3 查看IP實(shí)現(xiàn)信息
配置完成后,輸出生成定制FFT IP,最后再將其實(shí)例化到工程模塊中。
AXI-Stream注意事項(xiàng)
該IP的端口采用了標(biāo)準(zhǔn)的AXI-Stream協(xié)議,數(shù)據(jù)傳輸基本握手,如圖4所示。
圖4 AXI-Stream信道數(shù)據(jù)傳輸
AXI信道規(guī)則
所有的TDATA和TUSER字段被打包成小端格式,也就是一個(gè)子字段的第0位與TDATA或TUSER的第0位對(duì)齊。
字段不包括在TDATA或TUSER中,除非以這種方式配置了核它需要字段出現(xiàn)。例如,如果核心配置為有一個(gè)固定的點(diǎn)大小,沒(méi)有位分配給指定點(diǎn)大小的NFFT字段。
所有的TDATA和TUSER矢量都是8bit的整數(shù)倍。
配置通道
配置通道端口信號(hào)如表1所示。
表1 配置通道端口信號(hào)
配置通道(s_axis_config)接口是AXI通道,TDATA字段接口定義如下表2所示,所有需要paded的字段如果未達(dá)到8bit邊界,則需要擴(kuò)展到8bit邊界。擴(kuò)展的bit可以未任意值,設(shè)計(jì)為常量值可節(jié)省器件資源。
表2 TDATA字段接口定義
TDATA數(shù)據(jù)格式如圖5所示。
圖5 config_tdata數(shù)據(jù)據(jù)格式
其中,NFFT設(shè)置情況,如表3所示。需要注意的是,如果選項(xiàng)runtime configurable transform length被選后,變換點(diǎn)大小才可以在配置通道的NFFT字段進(jìn)行設(shè)置。
表3 NFFT設(shè)置
正反變換及縮放
FWD_INV=1時(shí),正向變換;FWD_INV=0時(shí),逆向變換。
對(duì)于FFT/IFFT各級(jí)縮放,在不同的實(shí)現(xiàn)架構(gòu)中,縮放因子的設(shè)置有所不同。可參考表2 或者產(chǎn)品指南:PG109-xfft.pdf文檔ch.4操作理論的Run Time Transform Configuration部分。
循環(huán)前綴(CP)
將輸出結(jié)果的尾部復(fù)制到頭部,輸出順序要選擇自然序。插入循環(huán)前綴,可逐幀設(shè)置,不用打斷幀處理進(jìn)程。
補(bǔ)充:定點(diǎn)數(shù)
在FPGA處理過(guò)程中,常常要對(duì)浮點(diǎn)數(shù)進(jìn)行定點(diǎn)化處理。Matlab中提供了一個(gè)非常方便的定點(diǎn)化函數(shù)fi。
fi(data,s,w,f) 各參數(shù)的定義:
s:signed or unsigned 標(biāo)志;
signed: 包含符號(hào)位;
f:定點(diǎn)小數(shù)精度。
例如:在命令行輸入fi(pi,1,16,13),回車(chē),如圖6所示。
圖6 浮點(diǎn)數(shù)定點(diǎn)
查看定點(diǎn)后的數(shù)據(jù), 命令行輸入ans.hex,顯示十六進(jìn)制數(shù)6488,如圖7所示。
圖7 定點(diǎn)16進(jìn)制數(shù)據(jù)
命令行輸入ans.dec,顯示十進(jìn)制數(shù),如圖8所示。
圖8 定點(diǎn)10進(jìn)制數(shù)據(jù)
在FPGA處理定點(diǎn)乘法,可用乘法器IP—Multiplier,如圖9所示。
圖9 乘法器IP
04
FFT模塊設(shè)計(jì)demo
以調(diào)用FFT,并通過(guò)ROM預(yù)存所需數(shù)據(jù)進(jìn)行一個(gè)簡(jiǎn)單的demo設(shè)計(jì)。
利用FFT IP,搭建工程。分別使用兩個(gè)ROM存儲(chǔ)DMRS0的I、Q兩路數(shù)據(jù),外部主機(jī)斷言m_data_tready拉高時(shí),準(zhǔn)備開(kāi)始從ROM讀取數(shù)據(jù),同時(shí)配置FFT。IFFT計(jì)算輸出通過(guò)乘以一個(gè)系數(shù),使其幅度值接近于1。設(shè)計(jì)框圖如圖10所示。
圖10 設(shè)計(jì)框圖
以DMRS0信號(hào)5M帶寬300點(diǎn)(中間補(bǔ)零,至512點(diǎn))作IFFT為例,創(chuàng)建工程,編寫(xiě)RTL代碼。針對(duì)配置通道的數(shù)據(jù)配置(如SCALE_SCH、FWD/INV、CP_LEN、NFFT),假設(shè)基于Radix-2架構(gòu)作IFFT,不加循環(huán)前綴,不更改NFFT點(diǎn)數(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放,同時(shí)將FPGA仿真的結(jié)果導(dǎo)入,計(jì)算各自的幅度,并繪于同一圖中,如圖12所示。
圖12 幅度值對(duì)比
計(jì)算各自的相位角弧度,如圖13所示。
圖13 相位弧度對(duì)比
通過(guò)對(duì)比分析可知,MATLAB仿真與FPGA實(shí)現(xiàn)結(jié)果基本一致。
在LTE、5G等無(wú)線通信中,IFFT和FFT變換是一個(gè)繞不過(guò)的話題。即便5G在探索非正交多址接入技術(shù)(NOMA),因主動(dòng)引入干擾,接收機(jī)設(shè)計(jì)復(fù)雜度急劇上升,能否被采用不得而知。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7168瀏覽量
87142
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論