当前位置: 首页 > news >正文

立创EDA开源:2023电赛D题国一方案全解析——基于ZYNQ FPGA的六种信号调制识别与参数估计系统

立创EDA开源:2023电赛D题国一方案全解析——基于ZYNQ FPGA的六种信号调制识别与参数估计系统

大家好,我是华科电工电子科技创新中心的一名队员。去年我们团队参加了全国大学生电子设计竞赛,选择了D题“信号调制方式识别与参数估计”,并最终拿到了全国一等奖。比赛结束后,我们把整个方案在立创EDA上开源了,希望能给后来参加电赛的同学,或者对FPGA数字信号处理感兴趣的朋友们一些参考。

这个项目的核心目标,是做一个“聪明的”信号分析仪:给它一个未知的调制信号(比如AM广播信号、FM电台信号或者数字通信里的ASK/FSK/PSK信号),它不仅能自动识别出是哪种调制方式,还能把调制深度、频偏这些关键参数给算出来,并且把解调后的原始信号(比如音频)还原输出。整个过程要求在一秒内完成,对实时性要求很高。

我们最终选用了Xilinx的ZYNQ XC7Z035 FPGA平台作为核心处理器,搭配高速ADC和DAC,在FPGA里用纯硬件逻辑并行实现了三路不同的解调器,硬扛下了这个任务。今天,我就来带大家一步步拆解这个“国一”方案,从系统设计思路、硬件选型、算法原理到工程实现,把我们的经验和踩过的坑都分享出来。

1. 系统总览:我们的解题思路是什么?

面对“识别六种调制方式并估计参数”这个题目,最直接的想法可能是:写一个超级复杂的算法,对输入信号做各种变换(比如FFT、小波分析),然后提取特征去分类。但这种方法计算量大,在资源有限的嵌入式平台上(尤其是要求一秒内出结果)很难实现。

我们的思路反其道而行之,可以概括为“并行解调,特征判决”。这更像是一个“暴力破解”但极其高效的工程化思路。

1.1 核心设计框图

先来看一下我们系统的总体框图,这是理解整个方案的关键:

输入信号 -> 前端放大 -> ADC采样 -> FPGA处理 -> 结果输出 | |-> 并行三路解调 | 1. 包络检波路 (针对AM/ASK) | 2. 正交相干解调路 (针对FM/FSK) | 3. 延时相乘检波路 (针对PSK) | |-> 特征提取 (有效值、峰峰值、频率) | |-> PS端ARM核判决与参数计算 | |-> 输出至串口屏和DAC

这个设计的精妙之处在于:我们不是先去猜信号是什么,然后再用对应的方法去解调。而是同时用三种最典型的解调方法(对应三大类调制)去处理输入信号。对于任意一个输入信号,只有与其调制方式匹配的那一路解调器会输出“漂亮”的、有意义的基带波形;其他两路要么输出噪声,要么输出直流。这样,我们只需要在解调之后,判断哪一路的输出“看起来像”有效的调制信号,就能反推出原始的调制方式。

1.2 为什么选择“解调后识别”?

在方案选型时,我们对比了两种思路:

  • 方案一(识别输入信号特征):直接分析调制信号,需要计算瞬时幅度、瞬时频率、瞬时相位等。这些参数计算复杂,且对噪声敏感,测量精度很难保证。
  • 方案二(识别解调信号特征):先解调,再分析解调后的基带信号。不同调制方式解调后,其基带信号的特征差异非常明显,主要体现在幅度上。例如,AM解调后是音频波形,ASK解调后是方波,FM/FSK解调后是电压值,PSK解调后也是方波,但生成机制不同。

我们最终选择了方案二。因为解调后的信号特征更简单、更鲁棒。我们只需要测量每路解调输出的有效值峰峰值,再结合一点简单的逻辑(比如判断输出是否是直流),就足以区分六种调制方式(CW、AM、FM、2ASK、2FSK、2PSK)。计算量小,非常适合在FPGA中实现。

2. 硬件电路设计:信号进来和出去的门户

光有算法不行,硬件是基础。我们的硬件核心任务是:把微弱的输入信号无失真地放大并数字化(ADC),以及把FPGA解调出的数字信号高质量地还原成模拟波形(DAC)。

2.1 信号输入与放大电路

题目要求输入信号是2MHz载波、100mVpp(峰峰值)。而我们的ADC(LTC2248)最佳输入范围是±1V左右。所以第一步,需要把信号放大。

我们设计了一个同相放大电路,核心是高速运放OPA656。

Vin (100mVpp, 50Ω) -> 50Ω匹配电阻 -> OPA656放大电路 (增益=20) -> Vout (2Vpp) -> ADC
  • 增益计算:100mVpp * 20 = 2Vpp,正好落在ADC的舒适区。
  • 运放选型关键:信号频率是2MHz,这就要求运放的增益带宽积(GBW)要足够大。对于增益为20的放大电路,所需GBW > 20 * 2MHz = 40MHz。OPA656的GBW高达200MHz,完全满足要求,并且保证了信号的相位响应和低失真。
  • 阻抗匹配:输入端和输出端都设计了50Ω的匹配电阻,这是射频和高速信号处理中的常见做法,可以防止信号反射,保证信号完整性。

2.2 模数转换(ADC)与数模转换(DAC)

这是连接模拟世界和数字世界的桥梁,选型直接决定了系统性能上限。

  • ADC: LTC2248

    • 为什么选它?这是一款14位精度、最高65MSPS采样率的ADC。对于2MHz的载波信号,根据奈奎斯特采样定理,采样率至少需要大于4MHz。我们实际使用的采样率远高于此(例如几十MHz),这样可以提供丰富的采样点,方便后续的数字信号处理(如相干解调中的延时操作)。14位的精度也为精确测量信号幅度提供了保障。
    • 配套驱动器:ADC前端使用了ADA4937作为差分驱动器,配置为0dB增益(即单位增益缓冲)。它的作用是提供低噪声、低失真的驱动能力,并完成单端转差分,以匹配ADC的差分输入需求,提升抗共模干扰能力。
  • DAC: AD5664

    • 为什么选它?这是一款16位精度、四通道的nano DAC。我们需要输出解调后的基带信号(比如音频),其频率一般不超过几百kHz。16位的高精度可以保证输出波形的细腻度。四通道的特性也为未来系统扩展留下了余地。
    • 输出缓冲与滤波:DAC输出后接了OPA1688运放作为缓冲器。更重要的是,后面接了一个四阶巴特沃斯低通重构滤波器,截止频率设为250kHz。
    • 重构滤波器的作用:DAC输出的本质是一系列阶梯状的样点。重构滤波器的作用就是平滑这些阶梯,滤除采样产生的高频噪声(镜像频率),只保留我们想要的基带信号。巴特沃斯滤波器在通带内具有最平坦的幅度响应,能保证输出波形不失真。在1MHz处能提供-50dB的衰减,滤波效果很好。

注意:所有详细的原理图和PCB设计,都已经开源在立创EDA平台。大家可以直接在工程中查看每一个电阻、电容的值和布局布线细节,这对于学习高速电路设计非常有帮助。

3. FPGA算法实现:数字域里的“信号魔术”

整个系统的“大脑”和“算法引擎”是ZYNQ XC7Z035 FPGA。ZYNQ芯片内部包含两部分:FPGA(PL,可编程逻辑)和ARM处理器(PS,处理系统)。我们采用了典型的“PL加速,PS控制”架构。

3.1 PL端:三路并行解调器

所有实时性要求高的信号处理都在PL端用硬件逻辑实现。这是整个项目最核心的部分。

第一路:包络检波 (用于AM/2ASK)

  • 原理:AM信号的幅度承载了信息,ASK信号则是用幅度的“有”和“无”表示0和1。包络检波就是提取信号幅度变化的过程。
  • 数字实现:在FPGA里,我们不需要二极管和电容那种模拟检波器。对于AM信号,可以对ADC采样的数字序列取绝对值(或平方)后再进行低通滤波,就能得到包络。对于2ASK,在得到包络后,再通过一个比较器(设置一个阈值)就能还原出数字序列。
  • 代码思路(伪代码)
    // 假设 adc_data 是14位有符号ADC数据 reg signed [13:0] adc_data_abs; always @(posedge clk) begin adc_data_abs <= (adc_data[13]) ? -adc_data : adc_data; // 取绝对值(简化版) end // 然后将 adc_data_abs 通过一个低通滤波器(LPF) lpf_filter am_lpf (.clk(clk), .din(adc_data_abs), .dout(am_demod_out));

第二路:正交相干解调 (用于FM/2FSK)

  • 原理:FM/FSK的信息承载在频率(或相位)的变化上。相干解调需要产生一个与载波同频同相的本振信号,与输入信号相乘,再经低通滤波后,得到的输出与原始频率偏移成正比。
  • 数字实现:难点在于获取同频同相的本振。我们采用了一个巧妙的延时相乘法。将输入信号延时四分之一载波周期(对于2MHz,即125ns),得到正交分量,再与原信号相乘。
    • 对于FM信号:原信号 * 延时信号经过低通滤波后,输出是一个电压值,这个电压值与瞬时频偏成正比,正好就是解调出的音频信号。
    • 对于2FSK信号:其瞬时频率在两个值之间跳变。通过上述相干解调后,会得到两个不同的直流电压电平,再经过一个比较器就能还原出数字序列。
  • 为什么选相干解调?题目中FM的调制度最低为1,传统的鉴频器(非相干解调)在调制度低时抗噪声性能很差。而相干解调理论上具有更好的抗噪声性能,更适合精确测量。

第三路:延时相乘检波 (用于2PSK)

  • 原理:PSK的信息承载在相位的跳变上(如0°和180°)。检测相位跳变是关键。
  • 数字实现:我们将输入信号延时半个载波周期(对于2MHz,即250ns),然后与原信号相乘。
    • 当相位不变时,相乘结果为正。
    • 当相位发生180°跳变时,相乘结果为负。 这样,相乘器的输出就是一个在正负电平间跳变的脉冲序列,对应着PSK调制的数据边沿。后续再通过一个T触发器(或边沿检测逻辑)就能稳定地还原出原始数据。

这三路解调器在FPGA中是真正并行工作的,时钟驱动,每个时钟周期都在处理数据,保证了极高的实时性。

3.2 特征提取与PS端判决

三路解调器的输出会同时进入后续的特征提取模块。

  1. 有效值(RMS)检测:计算一路信号在一段时间内的均方根值,反映信号能量。
  2. 峰峰值(Peak-to-Peak)检测:记录一路信号在一段时间内的最大值与最小值之差。
  3. 频率检测(可选):对于某些解调输出,可以估算其主要频率成分。

这些提取出的数字特征值,通过AXI总线被发送到ZYNQ的PS端(即ARM Cortex-A9处理器)。

PS端的软件(C程序)负责最终的智能判决:

  1. 数据积累:ARM端不断读取PL送来的特征数据,积累一定数量(比如对应几十毫秒的信号)后,进行一次判决。
  2. 逻辑判决:判决逻辑基于我们之前分析的特征差异。
    • 如果第一路(包络检波)输出的峰峰值很大,且有效值也较大,而其他两路输出很小(接近直流),那么信号很可能是AM
    • 如果第一路输出是明显的方波特征(高/低电平),则可能是2ASK
    • 如果第二路(相干解调)输出有较大的峰峰值和波动,而第一路输出是常数(载波幅度不变),则可能是FM
    • 如果第二路输出是方波,则可能是2FSK
    • 如果第三路(PSK解调)有有效输出,则判定为2PSK
    • 如果三路输出都几乎没有波动(只有很小的噪声),那么就是未调制的连续波CW
  3. 参数计算:一旦识别出调制方式,就利用对应通道解调信号的峰峰值等特征,根据理论推导的公式(详见开源文档中的理论分析附件)计算出调制度(AM)、频偏(FM)等参数。
  4. 控制与输出:ARM将识别结果通过串口发送给屏幕显示,同时将参数计算结果也显示出来。此外,ARM还会告诉PL端的多路选择器,将正确的那一路解调信号连接到DAC输出通道,最终还原出解调后的音频或数字波形。

4. 工程实践与注意事项

最后,分享一些实际开发中的心得和踩过的坑。

1. 时钟与同步是关键FPGA内部三路解调、特征提取、AXI总线传输,涉及多个时钟域。必须精心设计时钟网络,处理好跨时钟域的数据同步(使用FIFO或寄存器打拍),否则会出现数据错乱、系统不稳定的玄学问题。

2. 资源利用与优化我们的工程最终比较大,编译后占用资源较多。在初期,我们为了快速实现功能,可能编码风格比较“随意”,复用性不够。如果时间充裕,可以对FPGA代码进行优化,例如:

  • 封装通用的滤波器、乘法器模块。
  • 使用DSP Slice硬核来执行乘法操作,提高速度并节省逻辑资源。
  • 优化状态机,减少不必要的状态跳转。

3. 调试技巧

  • 仿真先行:在写FPGA代码前,先用MATLAB或Python模拟整个算法流程,生成理想的测试数据。这样可以在仿真阶段就验证算法的正确性。
  • ILA大法好:Xilinx的ILA(集成逻辑分析仪)是调试FPGA的利器。可以把关键信号(如ADC数据、解调中间结果、特征值)拉出来观察,比盲目猜测高效无数倍。
  • 分段验证:不要试图一下子把整个系统调通。先调通ADC采集,确保数据正确;再单独调通一路解调器,用信号源产生已知信号进行测试;最后再整合判决逻辑。

4. 开源资料的使用我们的全部资料,包括立创EDA工程(原理图&PCB)、Vivado FPGA工程源码、理论分析文档、演示视频等,都已经开源。

  • 立创EDA工程:搜索相关项目名称即可找到,可以查看所有硬件细节。
  • FPGA工程:由于工程文件较大,我们提供了百度网盘链接(提取码:1145)。请注意,这是比赛期间的工程,可能存在优化空间,但核心架构和代码是完整可用的。

希望这个详细的解析能帮助你理解如何用FPGA解决一个复杂的实时信号处理问题。这个项目融合了模拟电路设计、数字信号处理算法、FPGA硬件逻辑设计和ARM嵌入式软件编程,是一个非常好的综合性学习案例。如果在复现或学习过程中遇到问题,欢迎在开源项目下讨论。

http://www.jsqmd.com/news/469223/

相关文章:

  • Phi-3 Forest Lab快速上手:无需conda环境,Docker镜像一键拉起森林UI
  • Kimi-VL-A3B-Thinking效果展示:大学级图像理解与多步骤数学推理过程还原
  • 2026年全网主流软文发稿与媒体投放平台大合集 - 博客湾
  • MCP客户端状态同步性能瓶颈突破(99.999%一致性保障实录)
  • 2026智慧养老系统优质品牌推荐榜:智能化养老设备、养老管理系统、养老院平台建设、养老院平台运营、养老院护理系统选择指南 - 优质品牌商家
  • VSCode + PlatformIO + STM32/ESP32 ARDUINO:从环境搭建到高效开发的避坑指南
  • nlp_gte_sentence-embedding_chinese-large模型效果对比:不同文本长度下的表现
  • 江苏三坐标测量机厂家大盘点,2026年热门之选,行业内评价高的三坐标测量机推荐榜单聚焦技术实力与行业适配性 - 品牌推荐师
  • DAX 实战精要:从计算上下文到表函数的进阶应用
  • 2026年四大类型媒体发稿平台推荐|主流媒体精准匹配品牌传播全场景需求 - 博客湾
  • GNSS+TCXO双模高精度电子时钟设计
  • 革新性华硕硬件控制工具:G-Helper轻量级解决方案的全方位应用指南
  • 从怀疑到真香:一个理工科研究生使用嘎嘎降AI的心路历程 - 我要发一区
  • 提取码阻碍资源获取?资源密钥助手:72%用户的效率工具选择
  • 嘎嘎降AI的客服响应速度怎么样?遇到问题多久能解决 - 我要发一区
  • Page Assist:5大突破让本地AI成为你的网页浏览智能助手
  • 阿里通义Z-Image-Turbo WebUI图像生成模型:快速部署与使用教程
  • DDR4电路设计避坑指南:从选型到PCB布局的5个实战经验
  • Page Assist 本地AI交互功能故障实战解决方案
  • 基于ESP32-S3的四模式数控电子负载设计
  • 实测Qwen3-Embedding-4B:多语言文本嵌入快速上手体验
  • NVAPI_ACCESS_DENIED错误修复指南:权限问题完全解决方案与预防策略
  • Qwen3-ForcedAligner-0.6B详细步骤:API返回JSON字段含义与业务映射说明
  • MGeo模型Gradio界面定制教程:添加历史记录、导出按钮、多语言提示功能
  • 霜儿-汉服-造相Z-Turbo实战:用示例提示词轻松创作清冷古风大片
  • Pi0具身智能v1保姆级教学:下载动作数据npy文件并验证形状
  • 【FPGA】Xilinx Vivado UART IP核与AXI-Lite接口实战解析
  • Hunyuan-Large如何快速调用?Python接口部署步骤详解
  • IndexTTS-2-LLM保姆级教程:无需GPU,一键部署高质量TTS服务
  • LongCat-Image-Editn部署教程:GPU显存监控(nvidia-smi)与OOM问题规避