fft的FPGA實現

首先離散時間傅里葉變換的公式是
在這裏插入圖片描述
令Wn=e^(-j2pi/N),則X[k]可以表示爲
在這裏插入圖片描述

按時間抽取基2的FFT算法的實現不多介紹,自己查資料。下面給出N=8點的示意圖
在這裏插入圖片描述
基於時間抽取的FFT算法和按頻率抽取的FFT算法的輸入數據的順序是不同的,所以在一開始要在fpga中進行碼位倒置。這裏簡單說一下,第一級的時候每組有2個數,一共有4組,每組要進行1次蝶形運算。第二級每組4個數,一共2組,每組進行2次蝶形運算,所以一共有log2(N)級。本次實驗,我用的是1024個點,所以應該是10級。考慮先用matlab生成Wn的實部、虛部和一開始的輸入數據。
在這裏插入圖片描述生成虛部和實部的類似只要把cos改爲sin即可。這裏需要注意的是,Wn被放大了2^8倍,在後面的代碼中需要縮小。
在這裏插入圖片描述
上面爲matlab生成的輸入數據,並且同時給出了fft的計算結果,在fpga中計算完成之後與其進行比對。把這三個數據分別存放在三個rom裏,具體方法在dds的那篇博客中有手把手解釋。接下來在vivado中定義每一級的輸出與數據存儲的數組。
在這裏插入圖片描述
先進行數據的存儲和碼位倒置在這裏插入圖片描述
以第三組的計算爲例,其他的只需要改變其中的值就好了
在這裏插入圖片描述
仿真結果如下與matlab中的結果進行比對發現基本相同
在這裏插入圖片描述
感謝一位朋友的耐心教導!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章