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

m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含

时间:2023/12/1 0:02:58 点击:

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

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

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

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

点击店铺

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

2.部分仿真图预览


3.算法概述

       OFDM是一种多载波调制技术,其基本原理是将高速数据流分成若干个低速数据流,然后分别调制到一组正交的子载波上进行传输。在接收端,通过对各个子载波进行解调,可以恢复出原始的高速数据流。具体地,假设OFDM系统的子载波数量为N,符号周期为Ts,则第k个子载波的频率为fk=k/Ts。

4.部分源码

`timescale 1ns / 1ps

//

// Company: 

// Engineer: 

// 

// Create Date: 2022/07/27 01:35:32

// Design Name: 

// Module Name: TEST_OFDM_tops

// Project Name: 

// Target Devices: 

// Tool Versions: 

// Description: 

// 

// Dependencies: 

// 

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

// 

//

 

 

module TEST_OFDM_tops;

 

 

reg             i_clk;               

reg             i_rst;          

reg             i_before_fft1;               

reg             i_last_fft1;   

reg             i_enable1;  

reg signed[15:0]i_real_dat1;                 

reg signed[15:0]i_imag_dat1;   

 

 

wire  o_enable_ifft;

wire signed[15:0]o_real_ifft;                 

wire signed[15:0]o_imag_ifft; 

 

 

wire  o_enable_ifftcp;

wire signed[15:0]o_real_ifftcp;                 

wire signed[15:0]o_imag_ifftcp; 

 

 

wire  o_enable_fftdcp;

wire signed[15:0]o_real_fftdcp;                 

wire signed[15:0]o_imag_fftdcp; 

 

 

wire  o_enable_fft;

wire signed[15:0]o_real_fft;                 

wire signed[15:0]o_imag_fft; 

 

 

OFDM_tops OFDM_tops_u(

                .i_clk         (i_clk),

                .i_rst         (i_rst),

                

                .i_before_fft1 (i_before_fft1),

                .i_last_fft1   (i_last_fft1),

                .i_enable1     (i_enable1),

                .i_real_dat1   (i_real_dat1),

                .i_imag_dat1   (i_imag_dat1),

 

                .o_start_ifft  (),

                .o_ends_ifft   (),

                .o_enable_ifft (o_enable_ifft),

                .o_real_ifft    (o_real_ifft),

                .o_imag_ifft    (o_imag_ifft),

 

                .o_start_ifftcp  (),

                .o_ends_ifftcp   (),

                .o_enable_ifftcp (o_enable_ifftcp),

                .o_real_ifftcp   (o_real_ifftcp),

                .o_imag_ifftcp   (o_imag_ifftcp),

                

                .o_start_fftdcp  (),

                .o_ends_fftdcp   (),

                .o_enable_fftdcp (o_enable_fftdcp),

                .o_real_fftdcp   (o_real_fftdcp),

                .o_imag_fftdcp   (o_imag_fftdcp), 

                

                .o_start_fft  (),

                .o_ends_fft   (),

                .o_enable_fft (o_enable_fft),

                .o_real_fft   (o_real_fft),

                .o_imag_fft   (o_imag_fft) 

                );

 

reg [15:0]cnts;

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

     begin

     cnts       <= 16'd0;

         i_real_dat1 <= 16'b1111110000000000;

         i_imag_dat1 <= 16'b0000001111111111;

     end

else begin

          

          if(i_enable1 == 1'b1)

          begin

          cnts       <= cnts+16'd1;

          

              if(cnts>=16'd200 & cnts<=16'd1848)

              begin

                  i_real_dat1 <= ~i_real_dat1;

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

                  i_imag_dat1 <= ~i_imag_dat1;

                  else

                  i_imag_dat1 <=  i_imag_dat1;

              end    

          end

          else begin

          cnts       <= 16'd0;

         i_real_dat1 <= 16'b1111110000000000;

         i_imag_dat1 <= 16'b0000001111111111;

          end

     end

end

reg [19:0]cnts2;

always @(posedge i_clk or posedge i_rst)

begin

     if(i_rst)

     begin

     cnts2        <= 20'd0;

     i_before_fft1<=1'b0;

     i_enable1    <=1'b0;

     i_last_fft1  <=1'b0;

     end

else begin

          if(cnts2==20'd25000)

          cnts2  <= 20'd0;

          else

          cnts2  <= cnts2 + 20'd1;

 

          if(cnts2==20'd0)

          begin

             i_before_fft1<=1'b1;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

          if(cnts2==20'd1)

          begin

             i_before_fft1<=1'b1;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

          if(cnts2==20'd2)

          begin

             i_before_fft1<=1'b1;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

          if(cnts2==20'd3)

          begin

             i_before_fft1<=1'b1;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

          

          if(cnts2==20'd4)

          begin

             i_before_fft1<=1'b0;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

          if(cnts2>=20'd5 & cnts2<=20'd4+2047)

          begin

             i_before_fft1<=1'b0;

             i_enable1    <=1'b1;

             i_last_fft1  <=1'b0;

          end

          

          if(cnts2==20'd4+2048)

          begin

             i_before_fft1<=1'b0;

             i_enable1    <=1'b1;

             i_last_fft1  <=1'b1;

          end

          

          if(cnts2>20'd4+2048)

          begin

             i_before_fft1<=1'b0;

             i_enable1    <=1'b0;

             i_last_fft1  <=1'b0;

          end

     

     

     

     end

end

initial

begin

    i_clk = 1'b1;

    i_rst = 1'b1;

    #2000

    i_rst = 1'b0;

end

 

always #10 i_clk=~i_clk;

 

 

 

 

endmodule

00_053m

---

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