基於FPGA的影像一維FFT變換IFFT逆變換verilog實現,包含tb測試檔案和MATLAB輔助驗證

简简单单做算法發表於2024-06-28

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 實現,透過高效演算法的硬體化,不僅大幅提高了計算速度,而且在功耗和實時性方面展現出優勢,特別適合於對計算密集型和實時性要求高的影像處理應用,如影像壓縮、影像濾波、影像識別等。

相關文章