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

1.算法运行效果图预览

fpga仿真结果

 

 

 

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

 

 

 

2.算法运行软件版本

vivado2019.2

 

matlab2022a

 

3.部分核心程序

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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 实现,通过高效算法的硬件化,不仅大幅提高了计算速度,而且在功耗和实时性方面展现出优势,特别适合于对计算密集型和实时性要求高的图像处理应用,如图像压缩、图像滤波、图像识别等。

 

posted @   简简单单做算法  阅读(40)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示