【FPGA通信入门】完整2ASK调制解调工程(非相干+相干Costas锁相解调 超详细)(附源码)

一、项目简介

本项目基于FPGA实现标准2ASK幅度键控调制与双方案解调,完整复现通信原理中的ASK调制技术。

工程包含两套解调体系,适合初学者对比学习:

  • 方案一:非相干解调(包络检波):整流+滑动平均滤波+阈值判决,结构简单、无需载波同步

  • 方案二:相干解调(Costas锁相环):I/Q正交混频+锁相环+PI环路滤波,抗干扰强、工业标准高精度解调

工程核心参数

  • 系统主时钟:26MHz

  • 载波频率:100KHz

  • 基带码元速率:25kbps

  • 基带数据源:6阶M序列伪随机码

二、2ASK原理通俗讲解

2ASK(二进制幅度键控)是最基础的数字调制方式,原理极简:

  • 基带码元为 1:输出高频载波

  • 基带码元为0:关闭载波输出

数学本质:高频载波 × 基带0/1序列

调制后信号携带基带信息,可通过信道传输,接收端通过解调还原原始数据。

三、整体工程模块架构

1、发射端(调制链路)

M序列生成(m_wave) → 载波ROM存储(rom_carry) → 载波生成(carry_wave) → 乘法调制(modulator)

2、接收端(双解调链路)

非相干解调:全波整流(ask_demod) → 滑动平均滤波(fir) → 阈值判决

相干解调:Costas锁相解调(coherent_dem) + PI环路滤波(loop_filter) 闭环锁相同步解调

四、发射端模块逐代码解析

1、基带数据源模块:m_wave(M序列生成)

功能

基于6阶LFSR线性反馈移位寄存器,生成周期63位伪随机二进制序列,模拟真实通信随机数据流。

核心代码
复制代码

module m_wave( input CLK_25K, output m_seq ); reg [5:0] m_reg=6'b111111; always @(posedge CLK_25K) begin m_reg <= {m_reg[4:0], m_reg[5] ^ m_reg[4]}; end assign m_seq = m_reg[5]; endmodule

核心原理
  • 本原多项式:x\^6+x\^5+1

  • 序列周期:2\^6-1=63

  • 25KHz时钟驱动,码元速率25kbps

  • 禁止全0初始化,防止寄存器锁死无输出

2、载波存储模块:rom_carry

功能

基于Block ROM固化260点8位余弦波量化数据,配合26MHz时钟,输出100KHz标准载波。

核心参数

载波频率计算:26M/260=100KHz

使用 (* rom_style="block" *) 约束,强制占用块存储器,节省寄存器资源、波形更稳定。

3、调制器模块:modulator

功能

2ASK调制核心,基带码元与载波相乘

复制代码

assign ask_out = carry_in*m_seq;

  • m_seq=1:输出完整余弦载波

  • m_seq=0:输出归零,无载波

纯组合逻辑、零资源消耗,是标准OOK通断键控调制。

五、接收端一:非相干解调(包络检波)

适用场景:信噪比高、简易解调场景,无需载波同步。

1、全波整流模块:ask_demod

核心作用(重难点)

调制后的ASK波形是正负交变交流波形,如果直接滤波,正负半周会相互抵消,包络彻底消失,无法解调。

全波整流 = 负数取补码绝对值,全部转为正向单极性波形,保留幅度包络,为滤波做准备。

复制代码

assign abs_value = (ask_signal_in[7] == 1'b1) ? (~ask_signal_in + 8'd1) : ask_signal_in;

2、滑动平均滤波模块:fir

功能

128点滑动平均FIR滤波,抹平整流后的100KHz高频载波波纹,还原平滑基带包络。

核心优化
  • 采用递推求和:新和 = 旧和 + 新数据 - 最老数据,无需多次累加

  • 除以128采用右移7位实现,FPGA无除法器资源消耗

  • 彻底滤除高频载波,保留低速基带码元轮廓

六、接收端二:相干解调(Costas锁相环解调)

优势:自动同步发射端载波频率与相位,抗干扰强、低信噪比下仍可正常解调,是工程主流方案。

1、顶层解调模块:coherent_dem

整体流程

DDS正交载波生成 → I/Q双路相干混频 → 双路滑动滤波 → Costas鉴相 → PI环路滤波闭环 → 码元判决输出

核心原理
  • I路(同相):承载基带数据,用于最终码元解调

  • Q路(正交):承载相位误差,用于锁相闭环修正

通过鉴相得到相位偏差,经过环路滤波后修正DDS频率,实现载波自动同步

2、PI环路滤波模块:loop_filter(锁相心脏)

功能

鉴相输出的误差信号抖动大、噪声多,无法直接调频。本模块通过比例+积分PI滤波,平滑误差、消除稳态偏差,输出稳定频率调节字。

核心公式
复制代码

pi_out_full = (error_in * Kp) + (integral * Ki);

  • 比例Kp:快速纠偏,提升锁相速度

  • 积分Ki:累积微小误差,消除稳态相位差,实现无静差锁相

工程关键设计
  • 算术右移>>>4:保留负数符号,防止负频率修正错误,阻尼环路震荡

  • code_en使能保护:无有效信号时冻结频率,防止噪声漂移

  • 超宽积分寄存器:杜绝长期积分溢出

七、非相干解调 VS 相干解调(核心对比)

对比项 非相干解调(包络检波) 相干解调(Costas锁相)
载波同步 不需要 自动锁相同步
抗干扰能力 弱,易受噪声影响 强,低信噪比可用
资源消耗 极低,结构简单 较高,包含锁相闭环
解调精度 一般,存在包络失真 高,无稳态相位误差
适用场景 教学、简易通信系统 工程实际通信、抗干扰场景

八、工程重难点总结(面试/考试必背)

  1. 为什么ASK解调必须整流? ASK为正负交变交流波形,直接滤波会正负抵消、包络消失;全波整流转为单极性正向波形,才能保留幅度包络完成解调。

  2. 滑动平均滤波优势 无需复杂FIR IP核、无乘法器、资源极小,专门适配载波波纹滤除,完美匹配2ASK参数。

  3. Costas环I/Q两路作用 I路传数据、Q路传相位误差,缺一不可,构成正交锁相闭环。

  4. PI滤波器参数设计逻辑 Kp控速度、Ki控精度,参数过大会震荡跑飞,过小锁相速度慢,工程需折中配置。

  5. 相干解调核心优势 依靠锁相实现载波同步,利用相位信息解调,彻底甩开噪声干扰,是现代数字通信主流方案。

九、项目总结

本工程完整实现了FPGA 2ASK调制+双方案解调,从最基础的M序列数据源、载波存储、乘法调制,到传统包络检波解调、进阶Costas锁相相干解调,层层递进、逻辑闭环。

非常适合通信原理、FPGA数字调制解调初学者入门,既能理解基础调制解调思想,又能掌握锁相环、PI滤波、正交混频等进阶工程技术。