基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证

124 阅读2分钟

1.算法运行效果图预览

fpga仿真结果

image.png  

matlab调用FPGA的仿真结果进行图像显示

 

image.png

 

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)是数字信号处理领域的重要技术,特别是在图像处理、通信和信号分析等方面有着广泛的应用。

image.png

  image.png

 

       基于 FPGA 的一维 FFT 和 IFFT 实现,通过高效算法的硬件化,不仅大幅提高了计算速度,而且在功耗和实时性方面展现出优势,特别适合于对计算密集型和实时性要求高的图像处理应用,如图像压缩、图像滤波、图像识别等。