基于FPGA的简易OFDM调制解调系统开发

       设OFDM信号发射时间周期为[0,T],子载波数为N,N也是符号序列的时间间隔。可以证明满足子载波正交的条件为:=1/T。(式中为子载波的频率间隔。)输入数据流首先被QAM调制器调制,这里其实是完成一个星座点的映射过程,并没有进行频谱搬移。经过星座映射后得到的符号,存在两个相互正交的分量和。设。所以再进行OFDM调制进行频谱搬移后,已调信号的数学表达式为:

       由上式可知,恰好是的逆离散傅里叶变换(IDFT)。所以OFDM调制可以由IDFT实现,解调可以由DFT实现。对于调制过程,输入数据流首先被QAM调制器调制,这里其实是完成一个星座点的映射过程,并没有进行频谱搬移。得到了一个复符号流d[0],d[1],…,d[N-1],复符号流通过串/并变换,得到一系列并行的QAM符号d[0],d[1],…,d[N-1]。经过IFFT变换,得到一系列并行的符号流,,…,,再将它们经过并/串变换,得到一串串行的符号流,,…,。由于此时符号流为离散的,所以要经过D/A转换,将其变为时间上连续的信号。最后再将信号搬移到射频。解调过程正好相反。

        应此我们设计的数字系统是一个OFDM 通信系统中的基带数据处理部分,就是不包括变频,射频电路部分的设计,甚至没有加入同步的部分,而是只包括信道编码、交织、星座映射、FFT 和插入循环前缀的部分。这离一个完整的 OFDM 系统还差得很远,不过我觉得自己已经尽力了,也许以后有机会还可以在此基础上再做得更好些。下面叙述一下发射和接收端的具体结构。

OFDM接收模块,其主要包括解码模块,串并转换,FFT变化,并串转换,信号解调模块(QAM/QPSK)。根据上面的设计原理,在本课题中,我们使用BPSK作为映射方式,最后获得如下的仿真结果:

`timescale 1 ns / 1 ps
module tops(
            i_clk,
                i_rst,
                o_signals,
                o_sp,
                o_spflag,
                o_Dreal,
                o_Dimag,
                o_flag_fft,
                o_doutfft1,
                o_Rec
           );

input       i_clk;
input       i_rst;
output      o_signals; 
output[31:0]o_sp; 
output      o_spflag;
output signed[8:0]o_Dreal;
output signed[8:0]o_Dimag;
output      o_flag_fft;
output[31:0]o_doutfft1; 
output      o_Rec; 


signals signals_u(
                 .i_clk  (i_clk),
                      .i_rst  (i_rst),
                      .o_dout (o_signals)
               );
                    
//Transform                    
s2p s2p_u(
           .i_clk  (i_clk),
              .i_rst  (i_rst),
              .i_din  (o_signals),
              .o_dout (o_sp),
              .o_flag (o_spflag)
           );

//IFFT & P2S        
IFFTs_p2s IFFTs_p2s_u(
                             .i_clk   (i_clk),
                             .i_rst   (i_rst),
                             .i_en    (o_spflag),
                             .i_dn    (o_sp),
                             .o_Dreal (o_Dreal),
                             .o_Dimag (o_Dimag)
                             );

//Reciver
//FFT & S2P    
FFT_s2p FFT_s2p_u(
               .i_clk   (i_clk),
                    .i_rst   (i_rst),
                    .i_I     (o_Dreal[7:0]),
                    .i_Q     (o_Dimag[7:0]),
                    .o_flag  (o_flag_fft),
                    .o_dout1 (o_doutfft1),
                    .o_dout2 (),
                    .o_dout0 (),
                    .test1   (),
                    .test2   ()
              );

//P2S
p2s p2s_u(
           .i_clk  (i_clk),
              .i_rst  (i_rst),
              .i_din  (o_doutfft1),
              .i_en   (o_flag_fft), 
              .o_dout (o_Rec)
           );
              
endmodule
 

A01-119

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/121752349