基于FPGA的简易OFDM调制解调系统开发
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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
以上是关于基于FPGA的简易OFDM调制解调系统开发的主要内容,如果未能解决你的问题,请参考以下文章
FPGA教程案例79通信案例5——基于FPGA的QPSK调制解调系统实现