1.算法仿真效果
本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:
将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:
2.算法涉及理论知识概要
FFT傅里叶变换是一种高效的频谱分析方法,可以将时域信号转换为频域信号,用于频偏估计。FFT傅里叶变换是一种将时域信号转换为频域信号的方法,可以将信号的频谱信息展现出来。对于基带信号,通过FFT可以分析信号的频谱分布,从中获得频偏的估计。FFT傅里叶变换的数学原理如下:
假设输入的时域信号为 x(n),通过FFT傅里叶变换将其转换为频域信号 X(k):
频偏估计和补偿的目标是通过接收到的信号来估计频偏,并在接收端对接收信号进行频偏补偿,使其与发送信号的频率完全一致。基于FFT傅里叶变换的频偏估计和补偿算法的数学原理如下(其实现原理和QPSK类似):
综上所述,基于FFT傅里叶变换的QPSK基带信号频偏估计和补偿算法的实现过程主要包括64QAM调制、信号传输、接收、FFT傅里叶变换、频偏估计和频偏补偿等步骤。
3.Verilog核心程序
`timescale 1ns / 1ns module TEST; reg clk; reg i_clkSYM; reg rst; reg start; wire [5: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_64QAM_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; //64相位估计和补偿 tops_64QAM_Fre_est tops_16QAMU( .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
标签:64QAM,wire,15,FFT,signed,星座图,信号,频偏 From: https://www.cnblogs.com/51matlab/p/17624158.html