設(shè)OFDM信號發(fā)射時間周期為[0,T],子載波數(shù)為N,N也是符號序列的時間間隔。可以證明滿足子載波正交的條件為:=1/T。(式中為子載波的頻率間隔。)輸入數(shù)據(jù)流首先被QAM調(diào)制器調(diào)制,這里其實(shí)是完成一個星座點(diǎn)的映射過程,并沒有進(jìn)行頻譜搬移。經(jīng)過星座映射后得到的符號,存在兩個相互正交的分量和。設(shè)。所以再進(jìn)行OFDM調(diào)制進(jìn)行頻譜搬移后,已調(diào)信號的數(shù)學(xué)表達(dá)式為:
————————————————
由上式可知,恰好是的逆離散傅里葉變換(IDFT)。所以O(shè)FDM調(diào)制可以由IDFT實(shí)現(xiàn),解調(diào)可以由DFT實(shí)現(xiàn)。對于調(diào)制過程,輸入數(shù)據(jù)流首先被QAM調(diào)制器調(diào)制,這里其實(shí)是完成一個星座點(diǎn)的映射過程,并沒有進(jìn)行頻譜搬移。得到了一個復(fù)符號流d[0],d[1],…,d[N-1],復(fù)符號流通過串/并變換,得到一系列并行的QAM符號d[0],d[1],…,d[N-1]。經(jīng)過IFFT變換,得到一系列并行的符號流,,…,,再將它們經(jīng)過并/串變換,得到一串串行的符號流,,…,。由于此時符號流為離散的,所以要經(jīng)過D/A轉(zhuǎn)換,將其變?yōu)闀r間上連續(xù)的信號。最后再將信號搬移到射頻。解調(diào)過程正好相反。
應(yīng)此我們設(shè)計(jì)的數(shù)字系統(tǒng)是一個OFDM 通信系統(tǒng)中的基帶數(shù)據(jù)處理部分,就是不包括變頻,射頻電路部分的設(shè)計(jì),甚至沒有加入同步的部分,而是只包括信道編碼、交織、星座映射、FFT 和插入循環(huán)前綴的部分。這離一個完整的 OFDM 系統(tǒng)還差得很遠(yuǎn),不過我覺得自己已經(jīng)盡力了,也許以后有機(jī)會還可以在此基礎(chǔ)上再做得更好些。下面敘述一下發(fā)射和接收端的具體結(jié)構(gòu)。
OFDM接收模塊,其主要包括解碼模塊,串并轉(zhuǎn)換,F(xiàn)FT變化,并串轉(zhuǎn)換,信號解調(diào)模塊(QAM/QPSK)。根據(jù)上面的設(shè)計(jì)原理,在本課題中,我們使用BPSK作為映射方式,最后獲得如下的仿真結(jié)果:
————————————————

`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