m基于FFT傅里叶变换的256QAM基带信号频偏估计和补偿FPGA实现,含testbench和matlab星座图显示

目录

1.算法仿真效果

2.算法涉及理论知识概要  

3.Verilog核心程序 

4.完整算法代码文件


1.算法仿真效果

本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:

 频偏基带256qam信号和频偏补偿后的256qam基带信号使用matlab显示星座图,结果如下: 

2.算法涉及理论知识概要  

        FFT傅里叶变换是一种高效的频谱分析方法,可以将时域信号转换为频域信号,用于频偏估计。FFT傅里叶变换是一种将时域信号转换为频域信号的方法,可以将信号的频谱信息展现出来。对于基带信号,通过FFT可以分析信号的频谱分布,从中获得频偏的估计。FFT傅里叶变换的数学原理如下: 

       假设输入的时域信号为 x(n),通过FFT傅里叶变换将其转换为频域信号 X(k):
 

        频偏估计和补偿的目标是通过接收到的信号来估计频偏,并在接收端对接收信号进行频偏补偿,使其与发送信号的频率完全一致。基于FFT傅里叶变换的频偏估计和补偿算法的数学原理如下(其实现原理和QPSK类似):  

        综上所述,基于FFT傅里叶变换的256qam基带信号频偏估计和补偿算法的实现过程主要包括64QAM调制、信号传输、接收、FFT傅里叶变换、频偏估计和频偏补偿等步骤。   

3.Verilog核心程序 

`timescale 1ns / 1ns
module TEST;

	reg clk;
	reg i_clkSYM;
	reg rst;
	reg start;

    wire  [7: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[15:0]o_Ifir_T;
    wire signed[15:0]o_Qfir_T;
	 

	// DUT
	tops_256QAM_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_comcos(o_Ifir_T),
	   .Q_comsin(o_Qfir_T)
	   );
	   
	   
wire [15:0]o_freq;
wire signed[15:0]o_cos;
wire signed[15:0]o_sin;
wire signed[15:0]o_Ifir;
wire signed[15:0]o_Qfir;
wire o_ends;
wire o_start;
wire o_enable;
wire signed[31:0]absy;
//256相位估计和补偿
tops_256QAM_Fre_est tops_256QAMU(
.i_clk  (clk),
.i_rst  (~rst),
.i_clkSYM(i_clkSYM),
.i_I(o_Ifir_T),
.i_Q(o_Qfir_T), 
.o_ends(o_ends),
.o_start(o_start),
.o_enable(o_enable),
.absy  (absy),
.o_freq(o_freq),
.o_cos  (o_cos),
.o_sin (o_sin),
.o_Ifir (o_Ifir),
.o_Qfir (o_Qfir)
);

	   
 
	initial begin
		clk = 0;
		rst = 0;
		start = 1;
		#10;
		rst = 1;
	end
	
	always #5
	clk <= ~clk;
	


reg writeen;
initial
begin
    writeen = 1'b0;
 
    i_clkSYM=1'b1;

    
    #100
    writeen = 1'b1;
end
 
always #80 i_clkSYM=~i_clkSYM;


initial
begin
 
    #14400000
    
    $stop();
end


//显示发射端带相位旋转的星座图
integer fout1;
integer fout2;
initial begin
 fout1 = $fopen("It.txt","w");
 fout2 = $fopen("Qt.txt","w"); 
end

always @ (posedge 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 clk)
 begin
     if(writeen==1)
     begin
   	 $fwrite(fout3,"%d\n",o_Ifir);
	 $fwrite(fout4,"%d\n",o_Qfir);
	 end
end
 

endmodule
00_036m

4.完整算法代码文件

V

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值