基于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
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的基于FPGA的简易OFDM调制解调系统开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于随机接入代价的异构网络速率分配算法研
- 下一篇: 基于深度学习的步态识别算法的MATLAB