您现在的位置:首页 >> 通信 >> 内容

m基于FPGA的带相位偏差16QAM调制信号相位估计和补偿算法verilog实现

时间:2023/7/1 16:39:20 点击:

  核心提示:00_021m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJqclJlp

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

      在实际应用中,16QAM调制信号的相位可能会受到多种因素的影响,如噪声、多径衰落等,从而导致信号存在相位偏差。为了保证信号的正确解调,需要对信号进行相位估计和补偿。

      相位估计和补偿的一般流程包括以下几个步骤:

      选择合适的相位参考信号,例如载波信号或训练序列等。提取接收信号的相位信息,例如使用差分解调器提取相位差等。对相位信息进行滤波和处理,例如使用低通滤波器平滑相位信息,使用PLL等算法进行相位跟踪等。根据估计得到的相位信息,对信号进行相位补偿,以消除相位偏差。

4.部分源码

 

module TEST;

 

reg clk;

reg rst;

reg start;

 

    wire  [3:0] parallel_data;

    wire [15:0]sin;

    wire [15:0]cos;

wire signed[19:0]  I_com;

wire signed[19:0]  Q_com;

wire signed[19:0]  I_com2;

wire signed[19:0]  Q_com2;

    wire signed[15:0]I_comcos;

    wire signed[15:0]Q_comsin;

 

 

// DUT

tops_16QAM_mod  top(

   .clk(clk),

   .rst(rst),

   .start(start),

   .parallel_data(parallel_data),

   .sin(sin),

   .cos(cos),

   .I_com(I_com),

   .Q_com(Q_com),

   .I_com2(I_com2),

   .Q_com2(Q_com2),

   .I_comcos(I_comcos),

   .Q_comsin(Q_comsin)

   );

   

   

wire signed[23:0]I_comcos2;

wire signed[23:0]Q_comsin2;

wire signed[7:0]o_Ifir;

wire signed[7:0]o_Qfir;

wire signed[15:0]o_Ifir_phase;

wire signed[15:0]o_Qfir_phase;

wire signed[31:0]o_phase;

tops_16QAM_phase_est  top2(

   .clk(clk),

   .rst(rst),

   .start(start),

   .I_comcos(I_comcos),

   .Q_comsin(Q_comsin),

   .I_comcos2(I_comcos2),

   .Q_comsin2(Q_comsin2),

   .o_Ifir(o_Ifir),

   .o_Qfir(o_Qfir),

   .o_I_phase(o_Ifir_phase),

   .o_Q_phase(o_Qfir_phase),

   .o_phase(o_phase)

   );  

   

 

initial begin

clk = 0;

rst = 0;

start = 1;

#10;

rst = 1;

end

always #5

clk <= ~clk;

reg writeen;

initial

begin

    writeen = 1'b0;

    #150000

    writeen = 1'b1;

end

reg[4:0]divcnt;

always @(posedge clk or negedge rst)

begin

     if(~rst)

  begin

  divcnt<={5{1'b0}};

  end

else begin

  divcnt<=divcnt+{5{1'b1}};

     end

end 

integer fout1;

integer fout2;

initial begin

 fout1 = $fopen("It.txt","w");

 fout2 = $fopen("Qt.txt","w"); 

end

 

always @ (posedge divcnt[4])

 begin

     if(writeen==1)

     begin

    $fwrite(fout1,"%d\n",I_com2);

$fwrite(fout2,"%d\n",Q_com2);

end

end

 

 

 

 

integer fout3;

integer fout4;

initial begin

 fout3 = $fopen("IR.txt","w");

 fout4 = $fopen("QR.txt","w"); 

end

 

always @ (posedge divcnt[4])

 begin

     if(writeen==1)

     begin

    $fwrite(fout3,"%d\n",o_Ifir_phase);

$fwrite(fout4,"%d\n",o_Qfir_phase);

end

end

endmodule

00_021m

---


作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168