快速傅利葉變換(fast fourier transform)最為一種高效的演算法,被廣泛的用於訊號處理與資料分析等領域。對於設計工程師來講,自己動手取樣可程式語言來實現乙個fft/ifft模組,不知要花費多少心血。所幸的是altera和xilinx兩大巨頭都提供了自己fft核,本文將詳細講解如何使用altera的fft核。
fft ip core的總體架構分析:fft分為fixed transform size architectture 和 variable streaming architecture。variable streaming architecture下又分為radix 2 和radix 4兩種運算結構,而內部資料運算表達方式可分為fixed point ,floating point 和block floating point三種。
io資料流支援流(streaming)、可變流(variable streaming)、快取突發(buffered burst)和突發(burst)等i/o資料流結構。流fft結構可以連續處理輸入的資料和輸出連續的複數資料流,不需要在fft快內或模組外暫停資料流。突發快取結構和突發結構的fft比流fft結構所需資源更少,但代價是平均塊吞吐量下降。
quartus ii提供gui介面來配置引數,按照以下步驟操作,進可完成功能**。
1. 建立工程,根據gui介面完成fft核配置引數
2. 設定好**工具(在quartus工具欄options下選擇eda tools options),編譯。
3. 執行工程目錄下的tcl檔案,然後啟動**
當完成功能**後,發現得到資料和matlab**的結果相差比較大,因為功能**的結果需要按照公式ou
tput
∗2−e
xpon
ent 進行轉換(注意:公式1n
∗out
put∗
2−ex
pone
nt對應於ifft),才可以得到正確的結果。
實際工程中,需要我們編寫邏輯來控制fft核。ifft是ofdm基帶傳送部分的關鍵,下面給出怎麼實現ifft變換。配置引數為:點數n為64、流水線結構、輸入輸出位寬16bit、輸入輸出為自然順序、quad output(4 輸出)。
上圖是流水線結構的輸入時序。在reset訊號無效後,將sink_valide置為高有效,表示輸入端至少有n個復資料樣點可以輸入。當sink_ready(fft核輸出的)訊號為高電平,表明有能力接收這些輸入資料。同時將sink_sop(start)訊號置為高電平,表示輸入一幀資料(64)的開始,當最後乙個資料輸入後,sink_eop 被置為高電平 ,表示完成這一幀資料的傳輸。一定要控制好sink_valid、sink_sop、sink_eop三個訊號的時序,否則會導致沒有輸出或者輸出資料出錯(筆者曾遇到過)。下圖為功能**波形圖:
參考資料fft megacore function user guide
工程**
核函式概念詳解
核函式包括線性核函式 多項式核函式 高斯核函式等,其中高斯核函式最常用,可以將資料對映到無窮維。對映 概念理解如下 知乎回答截圖 核函式k v1,v2 表示將原始空間中的兩個點v1,v2對映成為高維空間的兩個點然後做點積運算,核函式本質為高維空間兩點的點積 其中含有這樣的對映規則 總結 k 原始點1...
vivado ILA核使用教程
ila可以加在 裡使用,也可以加在網表裡使用。在這裡舉例加在 中使用,硬體平台 xilinx ax7020 1.開啟vivado,新建專案 選擇對應的晶元型號 2.新增原始檔,編寫rtl timescale 1ns 1ps company engineer create date 2019 03 2...
Vivado PLL IP核的使用
當我們需要用到分頻或者倍頻的時候,就需要使用vivado中的 pll ip核來獲得我們想要的時鐘頻率。下面簡單說明一下如何配置pll ip核。1 查詢 pll ip核 2 指定用於分頻的輸入頻率 3 設定輸出頻率 相位以及占空比 4 設定locked訊號的名字 locked訊號是用來觀察pll輸出時...