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

Posted fpga&matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高阶循环谱基于FPGA的高阶循环谱的调制识别算法开发相关的知识,希望对你有一定的参考价值。

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

以上是关于高阶循环谱基于FPGA的高阶循环谱的调制识别算法开发的主要内容,如果未能解决你的问题,请参考以下文章

基于信号功率谱和GRNN神经网络的联合调制识别算法

高阶累积量基于高阶累积量的信噪比盲估计法的matlab仿真

[从零开始学习FPGA编程-53]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Xilinx)

[从零开始学习FPGA编程-51]:高阶篇 - 基于IP核的FPGA开发- 什么是FPGA IP核(软核固核硬核)与学习方法

[从零开始学习FPGA编程-54]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Altera)

m基于大衍数无高阶环稀疏校验矩阵H构造算法和RMP消息传递的QC-LDPC性能matlab仿真