基於FPGA的1024QAM基帶通訊系統,包含testbench,高斯通道模組,誤位元速率統計模組,可以設定不同SNR

我爱C编程發表於2024-11-13

1.演算法模擬效果

vivado2019.2模擬結果如下(完整程式碼執行後無水印):

設定SNR=40db

將資料匯入matlab顯示星座圖:

設定SNR=35db

將資料匯入matlab顯示星座圖:

模擬操作步驟可參考程式配套的操作影片。

2.演算法涉及理論知識概要

1024QAM是一種高階調製方式,可以攜帶更多的資訊位(10位元/符號),從而實現更高的資料傳輸速率。然而,這也帶來了更高的誤位元速率(BER)要求和更復雜的訊號處理需求。FPGA由於其可程式設計性和高效能,成為實現這種複雜調製的理想平臺。1024QAM調製將輸入的10位元對映到一個複數平面上的1024個不同的星座點之一。每個星座點的位置由輸入位元決定,且分佈在二維平面上。

基於FPGA的1024QAM基帶通訊系統通常包含以下幾個模組:

資料介面:負責資料的輸入輸出。

串並轉換:將序列資料轉換為並行資料。

星座對映:將輸入資料對映到星座點。

調製器:生成IQ訊號。

解調器:從接收到的訊號中恢復IQ訊號。

星座檢測:檢測最接近的星座點。

並串轉換:將並行資料轉換為序列資料。

3.verilog核心程式

	// DUT
tops_1024QAM_mod  top(
	   .clk(clk),
	   .rst(rst),
	   .start(start),
	   .parallel_data(parallel_data),
	   .sin(sin),
	   .cos(cos),
	   .I_com(),
	   .Q_com(),
	   .I_comcos(I_com),//基帶方式輸出,即實際通訊中的複數模式
	   .Q_comsin(Q_com)
	   );
    
    
//加入通道
//實部
awgns awgns_u1(
    .i_clk(clk), 
    .i_rst(~rst), 
    .i_SNR(i_SNR), //這個地方可以設定訊雜比,數值大小從-10~50,
    .i_din(I_com), 
    .o_noise(),
    .o_dout(I_Ncom)
    );  
//虛部    
awgns awgns_u2(
    .i_clk(clk), 
    .i_rst(~rst), 
    .i_SNR(i_SNR), //這個地方可以設定訊雜比,數值大小從-10~50,
    .i_din(Q_com), 
    .o_noise(),
    .o_dout(Q_Ncom)
    ); 
     
tops_1024QAM_demod  top2(
	   .clk(clk),
	   .rst(rst),
	   .start(start),
	   .I_Ncom(I_Ncom),
	   .Q_Ncom(Q_Ncom),
	   .I_comcos2(I_comcos2),
	   .Q_comsin2(Q_comsin2),
	   .o_Ifir(o_Ifir),
	   .o_Qfir(o_Qfir),
	   .o_sdout(o_sdout),
	   .flag_reg(flag_reg)
	   );  
	   
//6個bit同時統計誤位元速率	   
wire signed[31:0]o_error_num1;
wire signed[31:0]o_total_num1;
Error_Chech Error_Chech_u1(
    .i_clk(clk), 
    .i_rst(~rst), 
    .i_trans(parallel_data), 
    .i_rec(o_sdout), 
    .o_error_num(o_error_num1), 
    .o_total_num(o_total_num1)
    );  
 
assign o_total_num = o_total_num1;
assign o_error_num = o_error_num1;  
	   
	   
	   
endmodule

  

相關文章