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