FPGA實現OFDM通信

2024年2月6日 19点热度 0人点赞

OFDM中調制使用IFFT,解調使用IFFT,在OFDM實現系統中,FFT和IFFT時必備的關鍵模塊。在使用Xilinx的7系列FPGA(KC705)實現OFDM系統時,有以下幾種選擇:

(1)在Vivado中調用官方的FFT的IP核(AXI-Stream總線);

(2)在Vivado HLS中調用官方的FFT的IP核(內部FFT通信AXI-Stream總線),可以自己增加外部封裝接口類型;

(3)Verilog編寫FFT,很復雜,找到了一個1024點的並行流水線的,但是資源耗費太大,8192點時很難滿足,不采用;

(4)使用HLS用C語言自己編寫FFT,程序比較簡單,開發快,但是我需要100M時鐘下跑8192點FFT的時鐘時序約束不夠,跑不到100M;

最後還是選擇使用HLS裡面調用FFT的庫,並且根據我們的項目需要,對其外部輸入輸出封裝成一個AXI-Master接口,並且在Devcpp裡面使用C語言實現(不考慮延時和資源消耗等)對比結果,發現基本一致。

本節主要講Devcpp裡的實現結果。

1.定義計算點數和復數類型

2.計算

(1)初始化蝶形因子;

(2)比特反轉,變址運算;

(3)FFT蝶形循環計算;

(4)計算功率,輸出結果;

3.結果驗證

以100Hz的sin函數作為輸入信號,幅值-1~1,輸出功率最大值在p[100],趨近於1。

4.計算IFFT

(1)將輸入的復數取共軛;

(2)調用FFT;

(3)對輸出的數據取共軛;

完成。

最初始的sin信號如下:

經過FFT之後,對結果取共軛,並且縮小N點(8192)倍,再次調用FFT,對輸出取共軛,得到IFFT結果如下: