0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何進(jìn)行FFT IP配置和設(shè)計

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-22 10:21 ? 次閱讀

快速傅里葉變換 (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),定義式如下:

傅里葉變換:01feb1a4-04a2-11ed-ba43-dac502259ad0.png

傅里葉逆變換:0208b848-04a2-11ed-ba43-dac502259ad0.png

信號處理領(lǐng)域大名鼎鼎的傅里葉變換,正式由傅里葉提出的,不得不說,實在太偉大了,頂禮膜拜。

在信號處理中,由于計算機(jī)通常只能處理數(shù)字信號,因此通過對連續(xù)信號進(jìn)行采樣離散化,進(jìn)而有了離散傅里葉變換。

話不多說,直入主題,首先把DFT公式搬出來:

0215dff0-04a2-11ed-ba43-dac502259ad0.png

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

021febb2-04a2-11ed-ba43-dac502259ad0.png

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。

022d971c-04a2-11ed-ba43-dac502259ad0.png

圖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)等。

0237b652-04a2-11ed-ba43-dac502259ad0.png

024d3d74-04a2-11ed-ba43-dac502259ad0.png

025d1c62-04a2-11ed-ba43-dac502259ad0.png

圖2 FFT IP配置

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

0283cd12-04a2-11ed-ba43-dac502259ad0.png

028f0ede-04a2-11ed-ba43-dac502259ad0.png

02a0d5a6-04a2-11ed-ba43-dac502259ad0.png

圖3 查看IP實現(xiàn)信息

配置完成后,輸出生成定制FFT IP,最后再將其實例化到工程模塊中。

AXI-Stream注意事項

該IP的端口采用了標(biāo)準(zhǔn)的AXI-Stream協(xié)議,數(shù)據(jù)傳輸基本握手,如圖4所示。

02ae5b7c-04a2-11ed-ba43-dac502259ad0.png

圖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所示。

02c3aefa-04a2-11ed-ba43-dac502259ad0.png

圖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所示。

02cf212c-04a2-11ed-ba43-dac502259ad0.png

圖6 浮點數(shù)定點

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

02e6aa68-04a2-11ed-ba43-dac502259ad0.png

圖7 定點16進(jìn)制數(shù)據(jù)

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

02eee41c-04a2-11ed-ba43-dac502259ad0.png

圖8 定點10進(jìn)制數(shù)據(jù)

在FPGA處理定點乘法,可用乘法器IP—Multiplier,如圖9所示。

0305e89c-04a2-11ed-ba43-dac502259ad0.png

圖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所示。

031ad4aa-04a2-11ed-ba43-dac502259ad0.png

圖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所示。

032e10ec-04a2-11ed-ba43-dac502259ad0.png

圖11 FPGA工程仿真

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

033c91e4-04a2-11ed-ba43-dac502259ad0.png

圖12 幅度值對比

計算各自的相位角弧度,如圖13所示。

0352ba46-04a2-11ed-ba43-dac502259ad0.png

圖13 相位弧度對比

通過對比分析可知,MATLAB仿真與FPGA實現(xiàn)結(jié)果基本一致。

在LTE、5G無線通信中,IFFT和FFT變換是一個繞不過的話題。即便5G在探索非正交多址接入技術(shù)(NOMA),因主動引入干擾,接收機(jī)設(shè)計復(fù)雜度急劇上升,能否被采用不得而知。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1636

    文章

    21841

    瀏覽量

    608506
  • matlab
    +關(guān)注

    關(guān)注

    187

    文章

    2988

    瀏覽量

    231808
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7223

    瀏覽量

    90194
  • FFT
    FFT
    +關(guān)注

    關(guān)注

    15

    文章

    438

    瀏覽量

    59836

原文標(biāo)題:Vivado中FFT IP配置及應(yīng)用

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問如何進(jìn)行FFT濾波

    FFT變換后濾波,再IFFT, 1,請問這中間是怎么進(jìn)行濾波的? 2,看資料FIR濾波需要加窗,那FFT濾波時需要加窗嗎?
    發(fā)表于 09-06 17:03

    一種基于FPGA的可配置FFT IP核實現(xiàn)設(shè)計

    摘要針對FFT算法基于FPGA實現(xiàn)可配置IP核。采用基于流水線結(jié)構(gòu)和快速并行算法實現(xiàn)了蝶形運算和4k點FFT的輸入點數(shù)、數(shù)據(jù)位寬、分解基自由配置
    發(fā)表于 07-03 07:56

    基于FPGA的FFT和IFFT IP核應(yīng)用實例

    16bit,定點signed(1.15),即最高位符號位,15位小數(shù)。同時,繪制出matlab中cos時域和頻域的波形如下。 3 Vivado中添加配置FFT IP核Vivado中,打開IP
    發(fā)表于 08-10 14:30

    IP設(shè)計原理是什么?如何進(jìn)行IP模塊設(shè)計?

    USB OTG的工作原理是什么?IP設(shè)計原理是什么?如何進(jìn)行IP模塊設(shè)計?USB OTG IP核有什么特性?如何對USB OTG IP
    發(fā)表于 04-27 06:44

    IP101GR單口PHY芯片是如何進(jìn)行通信的

    IP101GR是什么?IP101GR單口PHY芯片有何功能?IP101GR單口PHY芯片是如何進(jìn)行通信的?
    發(fā)表于 11-01 06:08

    利用面向?qū)ο蠹夹g(shù)進(jìn)行配置FFT IP設(shè)計與實現(xiàn)

    利用面向?qū)ο蠹夹g(shù)進(jìn)行配置FFT IP 設(shè)計與實現(xiàn)摘要:為了縮短產(chǎn)品上市時間并降低設(shè)計成本,IP 復(fù)用已經(jīng)成為IC設(shè)計的重要手段。以往利用
    發(fā)表于 07-04 11:42 ?8次下載

    利用FFT IP Core實現(xiàn)FFT算法

    利用FFT IP Core實現(xiàn)FFT算法 摘要:結(jié)合工程實踐,介紹了一種利用FFT IP Core實現(xiàn)
    發(fā)表于 01-16 10:04 ?7001次閱讀
    利用<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b> Core實現(xiàn)<b class='flag-5'>FFT</b>算法

    Quartus中fft ip core的使用

    在論壇中經(jīng)常有人會問起 altera 軟件fft ip 中使用方法,有些人在使用這個fft ip core 的時候沒有得到正確的結(jié)果,事實上,這個i
    發(fā)表于 05-10 15:19 ?0次下載
    Quartus中<b class='flag-5'>fft</b> <b class='flag-5'>ip</b> core的使用

    Linux主機(jī)IP配置

    Linux如何進(jìn)行靜態(tài)IP的設(shè)置,在主機(jī)下運行IP配置的指令
    發(fā)表于 06-03 14:30 ?0次下載

    配置FFT IP核的實現(xiàn)及基礎(chǔ)教程

    針對FFT算法基于FPGA實現(xiàn)可配置IP核。采用基于流水線結(jié)構(gòu)和快速并行算法實現(xiàn)了蝶形運算和4k點FFT的輸入點數(shù)、數(shù)據(jù)位寬、分解基自由配置
    發(fā)表于 11-18 06:32 ?8341次閱讀
    可<b class='flag-5'>配置</b><b class='flag-5'>FFT</b> <b class='flag-5'>IP</b>核的實現(xiàn)及基礎(chǔ)教程

    何進(jìn)行OPCDCOM配置

    何進(jìn)行OPCDCOM配置(四會理士電源技術(shù)有限公司招聘)-如何進(jìn)行OPCDCOM配置? ? ? ? ? ? ? ? ? ? ??
    發(fā)表于 09-18 14:23 ?11次下載
    如<b class='flag-5'>何進(jìn)行</b>OPCDCOM<b class='flag-5'>配置</b>

    Gowin FFT IP用戶指南

    Gowin FFT IP 用戶指南主要包括功能簡介、信號定義、參數(shù)介紹、工作 原理、GUI 調(diào)用等,旨在幫助用戶快速了解高云半導(dǎo)體 Gowin FFT IP 的特 性及使用方法。
    發(fā)表于 09-15 10:19 ?1次下載
    Gowin <b class='flag-5'>FFT</b> <b class='flag-5'>IP</b>用戶指南

    何進(jìn)行IP檢測

    排查網(wǎng)絡(luò)連接問題,并及時的防范潛在的網(wǎng)絡(luò)攻擊。 那么,如何進(jìn)行 IP 地址檢測呢?接下來我將進(jìn)行圖示哦~ 使用操作系統(tǒng)自帶的工具 ① Windows 系統(tǒng)中,按win+R,輸入“ipconfig”命令。 ② Mac 系統(tǒng)中,則可
    的頭像 發(fā)表于 07-26 14:09 ?772次閱讀
    如<b class='flag-5'>何進(jìn)行</b><b class='flag-5'>IP</b>檢測

    公共 IP 地址前綴如何進(jìn)行網(wǎng)絡(luò)資源配置?

    IPv4或IPv6地址組成。在具有可用區(qū)域的地方,我們可將其創(chuàng)建區(qū)域冗余模式,也可讓其和特定的可用區(qū)域相關(guān)聯(lián)。一旦創(chuàng)建了公共IP地址前綴,就能夠進(jìn)一步創(chuàng)建公共IP地址。 公共 IP 地址前綴如
    的頭像 發(fā)表于 08-21 14:57 ?410次閱讀
    公共 <b class='flag-5'>IP</b> 地址前綴如<b class='flag-5'>何進(jìn)行</b>網(wǎng)絡(luò)資源<b class='flag-5'>配置</b>?

    Vivado中FFT IP核的使用教程

    本文介紹了Vidado中FFT IP核的使用,具體內(nèi)容為:調(diào)用IP核>>配置界面介紹>>IP核端口介紹>>MATLAB生成測試數(shù)據(jù)>>測試v
    的頭像 發(fā)表于 11-06 09:51 ?2049次閱讀
    Vivado中<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b>核的使用教程