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

m基于FPGA的带相位偏差QPSK调制信号相位估计和补偿算法verilog实现,包含testbenc

时间:2023/6/29 4:17:12 点击:

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

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

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

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

点击店铺

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

2.部分仿真图预览





3.算法概述

  相位偏差是数字通信系统中常见的问题,在QPSK调制通信系统中也同样存在。相位偏差可能导致误码率的增加和系统性能下降。因此,相位偏差的估计和补偿是数字通信系统中一个重要的问题。本文提出了一种基于V&V算法的带相位偏差QPSK调制信号相位估计和补偿方法,提高QPSK调制通信系统的性能。

4.部分源码

.............................................................

 

//QPSK调制

TQPSK TQPSKU(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_clkSYM(i_clkSYM),

.i_dat  (i_dat),

.o_Idiff(o_Idiff),

.o_Qdiff(o_Qdiff),

 

.o_Ifir (o_Ifir_T),

.o_Qfir (o_Qfir_T),

.o_cos  (o_cos_T),

.o_sin  (o_sin_T),

.o_modc (o_modc_T),

.o_mods (o_mods_T),

.o_mod  (o_mod_T)

);

 

 

 

 

//QPSK相位估计和补偿

RQPSK_phase_est RQPSKU(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_clkSYM(i_clkSYM),

.i_med  (o_mod_T[25:10]),

.o_cos  (o_cos_R),

.o_sin  (o_sin_R),

.o_modc (o_modc_R),

.o_mods (o_mods_R),

.o_Ifir (o_Ifir_R),

.o_Qfir (o_Qfir_R),

.o_I_phase(o_I_phase),

.o_Q_phase(o_Q_phase),

.o_phase(o_phase)

);

reg writeen;

initial

begin

    writeen = 1'b0;

    i_clk = 1'b1;

    i_clkSYM=1'b1;

    i_rst = 1'b1;

    #1600

    i_rst = 1'b0;

    

    #100

    writeen = 1'b1;

end

 

always #5 i_clk=~i_clk;

always #80 i_clkSYM=~i_clkSYM;

 

 

initial

begin

    i_dat = 1'b0;

    #1440

    repeat(10)

    begin

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    end

    

    repeat(10)

    begin

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    end

    repeat(10)

    begin

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b0;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b1;

    #160 i_dat = 1'b0;

    end

    $stop();

end

 

 

//显示发射端带相位旋转的星座图

integer fout1;

integer fout2;

initial begin

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

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

end

 

always @ (posedge i_clk)

 begin

     if(writeen==1)

     begin

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

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

end

end

 

显示接收端相位估计和补偿之后的星座图

 

integer fout3;

integer fout4;

initial begin

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

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

end

 

always @ (posedge i_clk)

 begin

     if(writeen==1)

     begin

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

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

end

end

 

 

endmodule

00_020m

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