我是靠谱客的博主 清爽自行车,最近开发中收集的这篇文章主要介绍基于FPGA的2ASK解调仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

上文实现了2ASK技术的调制,今天我们来讲怎么对调制信号进行解调。

解调无非就两种,相干解调、非相干解调。本着怎么简单怎么来的思路,我们不考虑复杂因素,这里选择非相干解调。

简单来说就是先把调制信号进行整流,负的变成正的,正的保持不变,这样信号都变成在零线以上,只要经过一个低通滤波器,就可以提取该信号的包络。接下来,就是对包络进行判决。这里需要考虑两个问题,判决脉冲怎么确定?判决门限怎么确定?

第一个,我们之前产生的基带信号码元速率为1M,那么要想恢复原来的基带信号,意味着判决脉冲是1M,占空比为1:1。
第二个,我们要用包络进行判决,原本负的变成了正的,而无论正负,都是载波所对应的,也就是基带信号的1,那基带信号对于的0呢,在包络中就是0附近徘徊。因此,我们随便设置一个值,只有比0大就可以当作判决门限。

在该判决脉冲的驱使下,输出由判决门限判决地值,就是我们解调信号。

接下来看代码实现

module demod_ask(
 input clk,
 input clk_in,
 input [7:0]data_in,
 output [13:0]fir_dout,
 output [13:0]mean,
 output bit_data,
 output bit_sync
);

reg[7:0]abs_data;//整流信号

always @(posedge clk)
begin
 if(data_in[7])
  abs_data <= ~data_in;
 else
  abs_data <= data_in;
end

//例化FIR模块
wire source_valid;
wire [1:0] source_error;
wire [27:0]source_out;

My_fir U0(
    .clk                (clk),
    .reset_n            (1'b1),
    .ast_sink_data      (abs_data),
    .ast_sink_valid     (1'b1),
    .ast_sink_error     (2'd0),
    .ast_source_data    (source_out),
    .ast_source_valid   (source_valid),
    .ast_source_error   (source_error)
);
assign fir_dout = source_out[24:11];

assign mean = 14'd1133;//判决门限
wire demod = (fir_dout > mean) ? 1'b1 : 1'b0;

wire sync;//同步脉冲
assign sync = clk_in;

reg data_out;
always @(posedge sync)
begin
 data_out <= demod; 
end

assign bit_data = data_out;
assign bit_sync = sync;

endmodule

在Signal Tap仿真的整个调制解调图
在这里插入图片描述
最后附上整个仿真文件,感兴趣者自行下载。
链接:https://pan.baidu.com/s/16X2rdpoueLVAZ_iJkR2grw
提取码:0vza

参考文献
数字调制解调技术的MATLAB与FPGA实现 Altera Verilog版_杜勇

最后

以上就是清爽自行车为你收集整理的基于FPGA的2ASK解调仿真的全部内容,希望文章能够帮你解决基于FPGA的2ASK解调仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部