<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Vivado中快速傅里葉變換IP配置及應用

FPGA之家 ? 來源:FPGA算法工程師 ? 作者:Duoqiang Liu ? 2022-07-22 10:17 ? 次閱讀

快速傅里葉變換 (Fast Fourier Transform,FFT), 即利用計算機計算離散傅里葉變換(DFT)的高效、快速計算方法的統稱,簡稱FFT。DFT是實現了從頻域(頻域分析往往比時域分析更優越)對信號與系統進行分析。然而,隨著序列長度的增加,計算量也顯著增加,對于計算機而言,處理時間就越長,消耗的資源也就越多。

忘了什么是傅里葉變換的同學,趕緊拿出《信號與系統》翻一下。實在沒書,找度娘。對于連續時間信號f(t),定義式如下:

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

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

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

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

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

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

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

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

1965年,庫利和圖基提出了快速傅里葉變換(FFT)算法,采用這種算法能使計算機計算DFT所需要的乘法次數大為減少,特別是被變換的抽樣點數N越多,FFT算法計算量的節省就越顯著。

常用計算方法:

時間抽取算法:令序列的長度為N(2的冪),可以將時域序列x(n)分解為兩部分,一是偶數部分x(2n),另一部分是計數部分x(2n+1),于是信號序列x(n)的離散傅里葉變換可以用兩個N/2抽樣點的離散傅里葉變換來辨識核計算。

頻率抽取算法:按照頻率吧抽取的FFT算法是將頻域信號序列X(k)分解為奇偶兩部分,但算法仍然是由時域信號序列開始逐級計算,同樣把N點分成N/2點計算FFT。

02

FFT原理

FFT是DFT的快速算法,可以將一個信號從時域變換到頻域。很多時候信號在時域很難進行信號特征分析,變換到頻域后,就很容易看出信號的頻率、功率、相位等特征信息。更多詳細的解釋,可移步看這里深入淺出的講解傅里葉變換(真正的通俗易懂)或者在CSDN中閱讀深入淺出解釋FFT系列(非公眾號文章,超鏈接失敗,抱歉,可去CSDN看原文博客),講得比較清楚透徹,不愧是10年碼齡的巨佬。在這里我就不再贅述了。

03

FFT IP Core使用

概述

以Xilinx Vivado設計套件中提供的FFT IP為例,簡要說明如何進行FFT IP配置和設計。

FFT Core用于計算N點的DFT或IDFT,N=2m,m=3~16。對于計算FFT,有三種算術選項用于計算FFT:

全精度無縮放算法

定點縮放,提供縮放表

塊浮點(運行時調整縮放)

對于N點大小,可對正向/逆向變換、縮放表循環前綴進行配置。

提供四種可選架構:

Pipelined Streaming I/O

Radix-4 Burst I/O

Radix-2 Burst I/O

Radix-2 Lite Burst I/O

端口描述

FFT IP Core的端口如圖1所示,對端口的描述,參考產品指南PG-109-XFFT.pdf。

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

圖1 FFT端口

FFT IP配置

舉個栗子:單通道,512點,Radix-2,Burst I/O,定點數,縮放,取整模式Truncation,輸入數據位寬16bit,相位因子位寬16,自然序輸出,無循環前綴。

在Vivado中創建工程后,在工程管理器下的IP Catalog中選擇并配置FFT IP,在IP配置向導的指引下,依次進行相關參數的配置,如圖2所示。配置通道數,變換長度,實現架構,數據格式,縮放,取整模式,數據呼出順序,是否插入循環前綴(CP)等。

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

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

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

圖2 FFT IP配置

在向導視圖左側,可查看IP端口框圖,實現詳情以及時延信息,如圖3所示。這里需要注意輸入輸出數據的格式以及配置通道數據的格式。

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

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

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

圖3 查看IP實現信息

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

AXI-Stream注意事項

該IP的端口采用了標準的AXI-Stream協議,數據傳輸基本握手,如圖4所示。

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

圖4 AXI-Stream信道數據傳輸

AXI信道規則

所有的TDATA和TUSER字段被打包成小端格式,也就是一個子字段的第0位與TDATA或TUSER的第0位對齊。

字段不包括在TDATA或TUSER中,除非以這種方式配置了核它需要字段出現。例如,如果核心配置為有一個固定的點大小,沒有位分配給指定點大小的NFFT字段。

所有的TDATA和TUSER矢量都是8bit的整數倍。

配置通道

配置通道端口信號如表1所示。

表1 配置通道端口信號

pYYBAGLaCDaAWN55AAAS0jANigA031.png

配置通道(s_axis_config)接口是AXI通道,TDATA字段接口定義如下表2所示,所有需要paded的字段如果未達到8bit邊界,則需要擴展到8bit邊界。擴展的bit可以未任意值,設計為常量值可節省器件資源。

表2 TDATA字段接口定義

poYBAGLaCCqAbjCZAABmLF1Pn4I087.png

TDATA數據格式如圖5所示。

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

圖5 config_tdata數據據格式

其中,NFFT設置情況,如表3所示。需要注意的是,如果選項runtime configurable transform length被選后,變換點大小才可以在配置通道的NFFT字段進行設置。

表3 NFFT設置

pYYBAGLaCB2AT2hOAAArk1wbxAA832.png

正反變換及縮放

FWD_INV=1時,正向變換;FWD_INV=0時,逆向變換。

對于FFT/IFFT各級縮放,在不同的實現架構中,縮放因子的設置有所不同??蓞⒖急? 或者產品指南:PG109-xfft.pdf文檔ch.4操作理論的Run Time Transform Configuration部分。

循環前綴(CP)

將輸出結果的尾部復制到頭部,輸出順序要選擇自然序。插入循環前綴,可逐幀設置,不用打斷幀處理進程。

補充:定點數

FPGA處理過程中,常常要對浮點數進行定點化處理。Matlab中提供了一個非常方便的定點化函數fi。

fi(data,s,w,f) 各參數的定義:

s:signed or unsigned 標志;

signed: 包含符號位;

f:定點小數精度。

例如:在命令行輸入fi(pi,1,16,13),回車,如圖6所示。

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

圖6 浮點數定點

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

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

圖7 定點16進制數據

命令行輸入ans.dec,顯示十進制數,如圖8所示。

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

圖8 定點10進制數據

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

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

圖9 乘法器IP

04

FFT模塊設計demo

以調用FFT,并通過ROM預存所需數據進行一個簡單的demo設計。

利用FFT IP,搭建工程。分別使用兩個ROM存儲DMRS0的I、Q兩路數據,外部主機斷言m_data_tready拉高時,準備開始從ROM讀取數據,同時配置FFT。IFFT計算輸出通過乘以一個系數,使其幅度值接近于1。設計框圖如圖10所示。

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

圖10 設計框圖

以DMRS0信號5M帶寬300點(中間補零,至512點)作IFFT為例,創建工程,編寫RTL代碼。針對配置通道的數據配置(如SCALE_SCH、FWD/INV、CP_LEN、NFFT),假設基于Radix-2架構作IFFT,不加循環前綴,不更改NFFT點數,配置情況如下。

s_axis_config_tdata = 23‘b0000_0000_0000_0000_0000_0000;

注意,高MSB五位做了填充,使得TDATA的位寬是8的整數倍。

FPGA仿真結果如圖11所示。

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

圖11 FPGA工程仿真

MATLAB進行IFFT變換,并進行適當的縮放,同時將FPGA仿真的結果導入,計算各自的幅度,并繪于同一圖中,如圖12所示。

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

圖12 幅度值對比

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

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

圖13 相位弧度對比

通過對比分析可知,MATLAB仿真與FPGA實現結果基本一致。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    6757

    瀏覽量

    85307
收藏 人收藏

    評論

    相關推薦

    Vivado快速傅里葉變換FFT IP配置及應用

    快速傅里葉變換 (Fast Fourier Transform,FFT), 即利用計算機計算離散傅里葉變換(DFT)的高效、快速計算方法的統稱,簡稱FFT。
    的頭像 發表于 07-20 16:46 ?2627次閱讀
    <b class='flag-5'>Vivado</b>中<b class='flag-5'>快速</b><b class='flag-5'>傅里葉變換</b>FFT <b class='flag-5'>IP</b>的<b class='flag-5'>配置</b>及應用

    快速傅里葉變換

    快速傅里葉變換,越來越看著重要了,一定要好好學習
    發表于 06-04 15:47

    分享C語言的快速傅里葉變換源代碼

    分享C語言的快速傅里葉變換源代碼,本人是新手,希望大家多多指點,調錯誤
    發表于 05-07 19:17

    FFT快速傅里葉變換

    快速傅里葉變換FFT
    發表于 07-15 17:52

    詳解快速傅里葉變換FFT算法

    本帖最后由 richthoffen 于 2019-7-19 16:41 編輯 詳解快速傅里葉變換FFT算法
    發表于 07-18 08:07

    詳解快速傅里葉變換FFT算法

    詳解快速傅里葉變換FFT算法
    發表于 03-28 11:48

    詳解快速傅里葉變換FFT算法

    詳解快速傅里葉變換FFT算法
    發表于 05-25 09:31

    快速傅里葉變換FFT算法及其應用

    快速傅里葉變換FFT算法及其應用
    發表于 05-28 09:13

    詳解快速傅里葉變換FFT算法

    詳解快速傅里葉變換FFT算法
    發表于 03-05 11:07

    快速傅里葉變換C語言實現

    快速傅里葉變換C語言實現 模擬采樣進行頻譜分析FFT是DFT的快速算法用于分析確定信號(時間連續可積信號、不一定是周期信號)的頻率(或相位、此處不研究相位)成分,且傅里葉變換對應的ω\
    發表于 07-20 06:01

    DSP變換運算-傅里葉變換

    第24章 DSP變換運算-傅里葉變換本章節開始進入此教程最重要的知識點之一傅里葉變換。關于傅里葉變換,本章主要是把傅里葉相關的基礎知識進行必要的介紹,沒有這些基礎知識的話,后面學習FF
    發表于 08-03 06:14

    利用快速傅里葉變換計算相關面

      快速傅里葉變換 (fast Fourier transform),即利用計算機計算離散傅里葉變換(DFT)的高效、快速計算方法的統稱,簡稱FFT。
    發表于 11-27 16:23 ?1551次閱讀

    如何在Vivado配置FIFO IP

    Vivado IP核提供了強大的FIFO生成器,可以通過圖形化配置快速生成FIFO IP核。
    的頭像 發表于 08-07 15:36 ?2261次閱讀
    如何在<b class='flag-5'>Vivado</b>中<b class='flag-5'>配置</b>FIFO <b class='flag-5'>IP</b>核

    在AI引擎上實現逐塊可配置快速傅里葉變換應用說明

    電子發燒友網站提供《在AI引擎上實現逐塊可配置快速傅里葉變換應用說明.pdf》資料免費下載
    發表于 09-13 11:48 ?19次下載
    在AI引擎上實現逐塊可<b class='flag-5'>配置</b>的<b class='flag-5'>快速</b><b class='flag-5'>傅里葉變換</b>應用說明

    基于快速傅里葉變換快速算法

    電子發燒友網站提供《基于快速傅里葉變換快速算法.pdf》資料免費下載
    發表于 11-06 10:25 ?1次下載
    基于<b class='flag-5'>快速</b><b class='flag-5'>傅里葉變換</b>的<b class='flag-5'>快速</b>算法
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>