高阶循环谱基于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的高阶循环谱的调制识别算法开发的主要内容,如果未能解决你的问题,请参考以下文章
[从零开始学习FPGA编程-53]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Xilinx)
[从零开始学习FPGA编程-51]:高阶篇 - 基于IP核的FPGA开发- 什么是FPGA IP核(软核固核硬核)与学习方法
[从零开始学习FPGA编程-54]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Altera)