1.演算法執行效果圖預覽
fpga模擬結果
matlab呼叫FPGA的模擬結果進行影像顯示
2.演算法執行軟體版本
vivado2019.2
matlab2022a
3.部分核心程式
module test_image; //圖片大小 parameter RR=256; parameter CC=256; reg i_clk; reg i_rst; reg i_image_en; reg[7:0] i_image; wire o_en_1dfft; wire o_last_1dfft; wire[19:0] o_image_R1dfft; wire[19:0] o_image_I1dfft; Image_1Dfft Image_1Dfft_u( .i_clk (i_clk), .i_rst (i_rst), .i_image_en (i_image_en), .i_image (i_image), .o_en_1dfft (o_en_1dfft), .o_last_1dfft (o_last_1dfft), .o_image_R1dfft (o_image_R1dfft), .o_image_I1dfft (o_image_I1dfft) ); wire o_en_1difft; wire[7:0] o_image_ifft; Image_1Difft Image_1Difft_u( .i_clk (i_clk), .i_rst (i_rst), .i_image_en (o_en_1dfft), .i_Rimage (o_image_R1dfft), .i_Iimage (o_image_I1dfft), .o_en_1difft (o_en_1difft), .o_image_ifft (o_image_ifft) ); initial begin i_clk = 1; i_rst = 1; #1000; i_rst = 0; end always #10 i_clk = ~i_clk; //讀取圖片資料 integer i,j; reg[15:0]Men_images [(RR*CC-1):0]; initial #500 $readmemh("D:/FPGA_Proj/FPGAtest/codepz/FPGA_image_input.txt", Men_images); //將資料儲存到txt,用來matlab呼叫 integer Ifout1; integer fout2; initial begin Ifout1 = $fopen("EN2.txt","w"); fout2 = $fopen("IiFFT.txt","w"); end always @ (posedge i_clk) begin if(o_en_1difft) $fwrite(Ifout1,"%d\n",o_en_1difft); else $fwrite(Ifout1,"%d\n",0); if(o_en_1difft) $fwrite(fout2,"%d\n",o_image_ifft); else $fwrite(fout2,"%d\n",0); end endmodule 0X_037m
4.演算法理論概述
基於現場可程式設計門陣列(Field-Programmable Gate Array, FPGA)實現的影像一維快速傅立葉變換(Fast Fourier Transform, FFT)和逆快速傅立葉變換(Inverse Fast Fourier Transform, IFFT)是數字訊號處理領域的重要技術,特別是在影像處理、通訊和訊號分析等方面有著廣泛的應用。
基於 FPGA 的一維 FFT 和 IFFT 實現,透過高效演算法的硬體化,不僅大幅提高了計算速度,而且在功耗和實時性方面展現出優勢,特別適合於對計算密集型和實時性要求高的影像處理應用,如影像壓縮、影像濾波、影像識別等。