上一篇介绍了数字通信系统中ASK调制技术的FPGA实现。调制信号经过DAC、可选的带通滤波器、功率放大器、天线发送出去后,在接收端收到ASK信号后需要对其解调,提取出包含的信息(基带信号)。无论在哪种调制解调系统中,解调总比调制要复杂很多,本文开始将介绍ASK解调系统的实现。


ASK解调

ASK信号的解调有包络检波法(非相干解调)和同步检测法(相干解调)两种方法。同步检测法系统框图如下:

相干”指的是接收端必须提取出一个与载波同频、同相的信号(窄带滤波器锁相环),相干的程度将影响到解调性能。键控信号s(n)与相干载波c(n)做乘法后,由LPF滤除高频分量得到基带波形,再经过判决输出得到基带数据m(n)。

包络检波法的系统框图如下:

键控信号s(n)经过整流,将交流信号转换为直流信号,通过LPF得到基带信号的包络,再经过判决输出得到基带数据m(n)。包络检波法不需要提取相干载波,整体要比同步检测法简单很多。在大信噪比(≥15dB)的条件下,两种方法的误码率性能几乎差不多,而ASK调制方法大多也都应用在信噪比较大的情况下,因此工程中多使用包络检波法实现ASK信号解调。


MATLAB设计

在FPGA设计前通常都会使用MATLAB对系统进行建模与仿真。设计ASK解调系统时,选定系统参数:基带信号的符号速率Rb、采样频率Fs。可以使用abs函数对ASK信号整流,设计的低通滤波器截止频率Fc设置为Rb。主要代码如下:

ASK2 = abs(ASK2);   %整流
b = fir1(32, Rb*2/Fs);  %32阶LPF
d_ASK2 = filter(b, 1, ASK2);

本系列主要是讲述FPGA设计,不详细讨论上述函数的使用,具体情况可以的MATLAB的help中查询。滤波器系数经过量化后存储为txt(coe)文件,在FPGA设计中调用。


FPGA设计

采用包络检波法,在Vivado开发环境下完成2ASK和4ASK解调技术的设计并进行仿真(符号判决模块位定时脉冲模块具体设计见本系列第12、13篇)。模块接口如下:

`timescale 1ns / 1ps
//--------------------------------------------------------
//   包络检波法(非相干解调)实现ASK信号解调
//--------------------------------------------------------
module ASKdemod_liuqi
(input rst,input clk,       //8MHz数据采样时钟input clk32,     //32MHz位同步时钟input signed [7:0] din,      //ASK键控信号输入output reg [7:0] abs_din,    //整流后ASK信号output signed [13:0] dout,   //解调输出基带信号包络output signed [13:0] mean,  //基带信号包络的直流分量(均值)output bit_data,           //判决输出的二进制数据流output bit_sync            //位同步信号
);

整流部分即为取绝对值,判断输入信号的符号位,为负数则取反,为正数则保持。代码如下:

//--------------------------------------------------------
//   整流(取绝对值)
//--------------------------------------------------------
always @ (posedge clk or posedge rst)if (rst) abs_din <= 'd0;else    //负数取反;正数保持if (din[7]) abs_din <= -din;else abs_din <= din;        

低通滤波器使用Vivado提供的FIR Compiler IP核,滤波器系数使用MATLAB生成的coe文件,具体使用方法可参考“FPGA数字信号处理(五)Vivado FIR IP核实现 https://blog.csdn.net/fpgadesigner/article/details/80621411 ”。代码如下:

wire s_tready, m_tvalid;
wire signed [23:0] m_tdata;fir_compiler_0 U0
(.aclk                 (clk),.s_axis_data_tvalid   (1'b1),.s_axis_data_tready   (s_tready),.s_axis_data_tdata    (abs_din),.m_axis_data_tvalid   (m_tvalid),.m_axis_data_tdata    (m_tdata)
);assign dout =  m_tdata[19:6];

滤波器的输出为全精度输出,对其截取14bit(保留1bit符号位)作为基带包络信号输出即可。接下来实例化符号判决模块和位定时脉冲模块:

//--------------------------------------------------------
//  实例化判决门限模块,求取基带信号包络的均值
//--------------------------------------------------------
gate U1
(.rst  (rst),.clk  (clk),.din  (dout),  //LPF输出的基带信号包络.mean (mean)  //基带信号的直流分量
);//--------------------------------------------------------
//  位同步模块
//--------------------------------------------------------
wire demod = (dout > mean) ? 1'b1 : 1'b0;  //判决
wire sync;
bitSync_liuqi U2
(.clk(clk32),      //32MHz系统时钟.rst(rst),        //高电平有效复位信号.din(demod),      //单比特基带数据输入.sync(sync)       //位同步脉冲输出
);

使用判决门限对LPF输出信号判决,判决结果输入到位同步模块中得到位同步时钟。下面代码完成在位同步脉冲的上升沿驱动下,提取出基带数据流:

reg data_out;
always @ (posedge sync or posedge  rst)if (rst) data_out <=  1'b0;else data_out <= demod; assign bit_data = data_out;
assign bit_sync = sync;    endmodule

仿真测试

编写testbench,主要是ASK调制信号的产生。使用MATLAB生成ASK调制信号数据存入txt中,在testbench中读取txt文件。文件操作方法参考“Testbench编写指南(一)文件的读写操作” https://blog.csdn.net/fpgadesigner/article/details/80470972 。

对2ASK信号解调的仿真效果如下图所示:


很明显看到输出的基带包络信号有2种电平状态,与ASK调制信号状态一一对应(ASK有波形时,包络为1;ASK无波形时,包络为0),只不过由于运算的关系,导致输出有一定延时。对4ASK信号解调的仿真效果如下图所示:

也可以看到输出的基带包络信号有4种电平状态,与ASK调制信号状态一一对应。

上面还没有提取出基带信号的数据。2ASK解调系统中经过判决输出和位定时脉冲两个模块提取出的基带数据流如下图:

可以看到基带数据流bit_data与解调信号dout完全对应,且与位同步脉冲bit_sync同步,因此可以提取出原始基带信息。但需要注意的是,这里判决门限的获取(求连续256个点的均值,具体见第12篇)会导致在解调的开始阶段出现错误:

由于一开始没有足够的数据点数计算正确的判决门限,导致红框内的解调数据是错误的,在应用中要注意此问题。

FPGA数字信号处理(十一)ASK解调技术相关推荐

  1. FPGA数字信号处理(十三)锁相环位同步技术的实现

    前面介绍了数字通信系统中ASK解调技术的FPGA实现,以及判决门限选择的问题.本文将介绍解调系统中的位同步技术,只有在位同步模块的控制下,才能正确的提取出基带信号中携带的数据.本文设计参考自杜勇老师的 ...

  2. 新书预告:Xilix FPGA数字信号处理设计——基础版

    掌握FPGA数字信号处理设计需满足三个条件:熟悉FPGA设计方法.理解数字信号处理理论.掌握理论的工程实现方法.对初学者来讲,每个条件看似都难以逾越.杜勇老师完美融合课程教学与工程设计的需求特点,以独 ...

  3. FPGADesigner《FPGA数字信号处理系列》目录与传送门

    FPGA数字信号处理(1)数字混频(NCO与DDS的使用): https://blog.csdn.net/fpgadesigner/article/details/80512067 FPGA数字信号处 ...

  4. FPGA数字信号处理(二)并行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第二篇,选题为DSP系统中极其常用的FIR滤波器.本文将简单介绍FIR滤波器的原理,详细介绍使用Verilog HDL设计并行FIR滤波器的流程和方法.接下来几篇会介绍串行 ...

  5. FPGA数字信号处理(六)直接型IIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第六篇,2-5篇介绍了DSP系统中极其常用的FIR滤波器.本文将简单介绍另一种数字滤波器--IIR滤波器的原理,详细介绍使用Verilog HDL设计直接型IIR滤波器的方 ...

  6. FPGA数字信号处理(十五)多速率FIR滤波器

    该篇是FPGA数字信号处理的第15篇,选题为多速率信号处理系统中用到的多速率FIR滤波器.本文将简单介绍多速率信号处理系统的基本概念,以及使用Quartus和Vivado的IP核设计多速率FIR滤波器 ...

  7. FPGA数字信号处理:通信类I/Q信号及产生

    FPGA数字信号处理:通信类I/Q信号及产生 大侠好,"宁夏李治廷"再一次和各位见面了,今天给各位大侠分享在FPGA数字信号处理中通信类I/Q信号及产生. 欢迎各位大侠一起切磋交流 ...

  8. FPGA数字信号处理(一)数字混频(NCO与DDS的使用)

    这是数字信号处理系列的第一篇,以简单的数字混频为例,介绍在FPGA程序设计中很重要的二进制原码.补码:有符号数.无符号数的问题.本文不是像课本那样介绍这些基础概念,而是介绍很实际的设计方法. 借助于数 ...

  9. (224)FPGA数字信号处理入门指导

    (224)FPGA数字信号处理入门指导 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA数字信号处理入门指导 5)技术交流 6)参考资料 2 FPGA入门与提 ...

最新文章

  1. android ndk 编译c++11,Android NDK的C++11标准支持
  2. mysql group by over,PostgreSQL相当于MySQL GROUP BY
  3. Mybatis中查询结果resultMap使用分析
  4. 百度投资了光学AI芯片初创公司Lightelligence
  5. 金字塔原理读书笔记 一 为什么使用金字塔结构
  6. linux中查看rpm包位置,linux中,查看某个命令是来自哪个RPM包或者是通过哪个RPM包安装的...
  7. swift 使用Moya进行网络请求
  8. html图片垂直居中的方法,CSS图片垂直居中实现方法详解
  9. 多元共线性检测 -- 方差膨胀因子(Python 实现)
  10. 计算机wold标题文字加背景,office word文档添加背景图片以及背景颜色来美化枯燥乏味的文字...
  11. pdf合并在线,大家都在用的工具
  12. 计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857
  13. 停止线程 暂停线程
  14. aws php 上传文件 限制大小_php如何实现文件上传下载-PHP问题
  15. Http详解,2021年是做Android开发人员的绝佳时机
  16. 棋盘格检测--Automatic Detection of Checkerboards on Blurred and Distorted Images
  17. MetaTrader软件的功能扩展(关于程序补丁制作的一个例子)
  18. mysql 单表最多能存多少数据?
  19. 【ROS】中级操作学习整理-gazebo机器人仿真
  20. 采用PCB源文件(PADS格式)在嘉立创下单需要注意覆铜问题

热门文章

  1. 图像增强及直方图均衡化在图像去雾上的应用(附matlab代码)
  2. Action Unit Memory Network for Weakly Supervised Temporal Action Localization 笔记
  3. Master和Slave是什么意思
  4. 让我们来搞清楚8b/10b编码到底是怎么回事吧
  5. android手机密码忘了,安卓手机密码忘记了怎么解锁
  6. .NET编程和SQL Server ——Sql Server 与CLR集成
  7. BIG DATA 神奇的大数据 - Hadoop(Linux)环境搭建与部署
  8. 使用IDEA完成支付宝开放平台的Demo测试
  9. CNN用于句子分类时的超参数分析
  10. 《中国新闻周刊》报道:施一公深陷泥潭