概述
上文实现了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解调仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复