zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

【高阶循环谱】基于FPGA的高阶循环谱的调制识别算法开发

识别循环算法开发 基于 FPGA 高阶 调制
2023-09-11 14:15:33 时间

1.软件版本

matlab2013b,quartusii12.1

2.本算法理论知识

参考文献《基于高阶循环累积量的 OFDM 子载波盲估计》

3.部分源码

`timescale 1ns / 1ps
module C4012_cal(
               i_clk,
					i_rst,
					i_din,
					o_C40,
					o_FM
              );
				  
input i_clk;
input i_rst;
input signed[15:0]i_din;
output signed[15:0]o_C40;				  
output[1:0]   o_FM;
				  
reg signed[31:0]S2s;
reg signed[63:0]S4s;	
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  S2s <= 32'd0;
	  S4s <= 64'd0;
	  end
else begin
	  S2s <= i_din * i_din;
	  S4s <= i_din * i_din * i_din * i_din;
     end
end


wire signed[15:0]S2;
wire signed[15:0]S4;

assign S2 = S2s[31:16];
assign S4 = S4s[63:48];


reg[11:0]cnt;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  cnt <= 12'd0;
	  end
else begin
          if(cnt == 12'd2000)
			 cnt <= 12'd2000;
	  else
	       cnt <= cnt + 12'd1;  
     end
end

reg start;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  start <= 1'd0;
	  end
else begin
          if(cnt == 12'd406)
			 start <= 1'd1;
	  else
	       start <= 1'd0;  
     end
end	
	
	
wire signed[15:0]DOUT;	
C4012 C4012_u( 
              .CLK  (i_clk),
				  .RST  (i_rst),
				  .START(start),
				  .DIN  (i_din[15:6]),
				  .DOUT (DOUT),
				  .FM   (o_FM)
				  );	
				  



reg       [15:0] CNT;
reg signed[15:0]o_C40;
reg             flag;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  flag <= 1'b0;
	  end
else begin    
          if(DOUT >= 1000)
			 flag <= 1'b1;
	  else
          flag <= flag;	  
     end
end

always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  CNT <= 16'd0;
	  end
else begin    
          if(flag == 1'b1)
			 begin
			     CNT <= CNT + 16'd1;
			     if(CNT >= 16'd10000)
			     CNT <= 16'd10000;
			 end
     end
end

always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  o_C40 <= 16'd0;
	  end
else begin    
         if(CNT <= 100)
		   o_C40 <= DOUT;
	  else
	      o_C40 <= 16'd0; 
     end
end
	
endmodule 				  

4.仿真分析

信号产生模块:

       这个部分主要是QPSK和BPSK信号的产生。根据QPSK和FSK的计算公式,获得如下的modelsim仿真结果:

信道模块:

        这个模块,主要是产生噪声信息。模拟一个高斯白噪声。即对输入信号加入白噪声。仿真结果如下所示:

计算4阶循环累积算法:

        下面开始对核心部分进行设计。计算C40,以及对应的FM。仿真结果如下所示:

QPSK:

FSK:

整个系统的RTL结构图如下所示:

5.参考文献

[1]郑文秀, 赵国庆, 罗明. 基于高阶循环累积量的OFDM子载波盲估计[J]. 电子与信息学报, 2008, 30(2):4.A01-107