一、说明:
- 功能:AM解调
- 平台:Vivado 2016.4 和 Matlab R2017a
二、原理:
1.AM解调原理
-
模拟电路中采用“包络检波”的方法:
-
**数字电路中采用类似的方法: **
先将已调信号取绝对值,再经过低通滤波器,滤除高频分量(经AM调制的信号包含两个高频分量:载波频率+/-调制信号频率,因此低通滤波器的截止频率小于两个高频分量就可以),得到的就是叠加了直流分量的调制信号,去直流后便可以得到调制信号。
三、AM解调的FPGA实现
1.将已调制的AM信号取绝对值
关于AM信号的产生,参见上一篇博客: AM调制的FPGA实现
简单说明一下对数据取反的思路:如果是无符号数,则不存在符号位,也就是说数据都是正数,不需要取绝对值;如果是有符号数,通过检测最高位的符号位,如果符号位是1,则表示数据是负数,对数据取反,如果符号位是0,则表示数据是正数,不需要取反操作。
- 取绝对值的Verilog实现:
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
data_tdata <= 0;
end
else if(AM_mod[15] == 1) begin
data_tdata <= -{AM_mod}; //如果符号位是1,对数据取反
end
else if(AM_mod[15] == 0) begin
data_tdata <= AM_mod; //如果符号位是0,数据不变
end
else begin
data_tdata <= data_tdata;