FPGA實(shí)現OFDM通信
OFDM中調制使用IFFT,解調使用IFFT,在OFDM實(shí)現系統中,FFT和IFFT時(shí)必備的關(guān)鍵模塊。在使用Xilinx的7系列FPGA(KC705)實(shí)現OFDM系統時(shí),有以下幾種選擇:
本文引用地址:http://dyxdggzs.com/article/202401/455253.htm(1)在Vivado中調用官方的FFT的IP核(AXI-Stream總線(xiàn));
(2)在Vivado HLS中調用官方的FFT的IP核(內部FFT通信AXI-Stream總線(xiàn)),可以自己增加外部封裝接口類(lèi)型;
(3)Verilog編寫(xiě)FFT,很復雜,找到了一個(gè)1024點(diǎn)的并行流水線(xiàn)的,但是資源耗費太大,8192點(diǎn)時(shí)很難滿(mǎn)足,不采用;
(4)使用HLS用C語(yǔ)言自己編寫(xiě)FFT,程序比較簡(jiǎn)單,開(kāi)發(fā)快,但是我需要100M時(shí)鐘下跑8192點(diǎn)FFT的時(shí)鐘時(shí)序約束不夠,跑不到100M;
最后還是選擇使用HLS里面調用FFT的庫,并且根據我們的項目需要,對其外部輸入輸出封裝成一個(gè)AXI-Master接口,并且在Devcpp里面使用C語(yǔ)言實(shí)現(不考慮延時(shí)和資源消耗等)對比結果,發(fā)現基本一致。
本節主要講Devcpp里的實(shí)現結果。
1.定義計算點(diǎn)數和復數類(lèi)型
2.計算
(1)初始化蝶形因子;
(2)比特反轉,變址運算;
(3)FFT蝶形循環(huán)計算;
(4)計算功率,輸出結果;

3.結果驗證
以100Hz的sin函數作為輸入信號,幅值-1~1,輸出功率最大值在p[100],趨近于1。

4.計算IFFT
(1)將輸入的復數取共軛;
(2)調用FFT;
(3)對輸出的數據取共軛;
完成。
最初始的sin信號如下:

經(jīng)過(guò)FFT之后,對結果取共軛,并且縮小N點(diǎn)(8192)倍,再次調用FFT,對輸出取共軛,得到IFFT結果如下:


評論