您现在的位置:首页 >> 通信 >> 内容

基于FPGA的FFT变换和反变换实现,使用IP核设计,包含testbench

时间:2023/4/2 23:19:25 点击:

  核心提示:A794,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJeVmJlx

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

        FFT的基本思想是把原始的N点序列,依次分解成一系列的短序列。充分利用DFT计算式中指数因子 所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法运算和简化结构的目的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。它们的共同特点是,当N是素数时,可以将DFT算转化为求循环卷积,从而更进一步减少乘法次数,提高速度。

4.部分源码

...................................................

reg [15:0]cnts;

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

     begin

         cnts       <= 16'd0;

         i_real_dat <= 16'b1111110000000000;

         i_imag_dat <= 16'b0000000000111111;

     end

else begin

          

          if(i_enable == 1'b1)

          begin

          cnts       <= cnts+16'd1;

          

              if(cnts>=16'd17 & cnts<=16'd512-16)

              begin

                  i_real_dat <= ~i_real_dat;

                  

                  if (cnts[2]==1'b1)

                  i_imag_dat <= ~i_imag_dat;

                  else

                  i_imag_dat <=  i_imag_dat;

 

              end    

          end

          else begin

          cnts       <= 16'd0;

         i_real_dat <= 16'b1111110000000000;

         i_imag_dat <= 16'b0000001111111111;

          end

     end

end

...........................................................................

FFT_tops FFT_tops_u(

                .i_clk       (i_clk),

                .i_rst       (i_rst),

                .i_before_fft(i_before_fft),

                .i_last_fft  (i_last_fft),

                .i_enable    (i_enable),

                .i_real_dat  (i_real_dat),

                .i_imag_dat  (i_imag_dat),

                

                .o_start     (o_start),

                .o_ends      (o_ends),

                .o_enable    (o_enable),

                .o_real_ifft (o_real_ifft),

                .o_imag_ifft (o_imag_ifft)

                ); 

initial

begin

i_before_fft2=1'b0;

 

#53540

i_before_fft2=1'b1;

#40

i_before_fft2=1'b0;

end

 

IFFT_tops IFFT_tops_u(

                .i_clk       (i_clk),

                .i_rst       (i_rst),

                .i_before_fft(o_start),

                .i_last_fft  (o_ends),

                .i_enable    (o_enable),

                .i_real_dat  (o_real_ifft[31-9:7]),

                .i_imag_dat  (o_imag_ifft[31-9:7]),

                

                .o_start     (o_start2),

                .o_ends      (o_ends2),

                .o_enable    (o_enable2),

                .o_real_ifft (o_real_ifft2),

                .o_imag_ifft (o_imag_ifft2)

                ); 

 

initial

begin

    i_clk = 1'b1;

    i_rst = 1'b1;

    #10000

    i_rst = 1'b0;

end

always #10 i_clk=~i_clk;

endmodule

A794

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168