跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

2023 电赛 H 题:FPGA 与 STM32 实现的信号分离装置

针对 2023 电赛 H 题信号分离任务,采用 FPGA 与 STM32 协同方案。系统通过高速 ADC 采集混合信号 C,利用 FPGA 进行数据缓冲并通过串口传输至 STM32。STM32 端执行 FFT 算法识别两路波形的频率及类型(正弦或三角),随后将参数回传 FPGA。FPGA 内部构建 DDS 模块重构波形,并引入锁相环(PLL)消除时钟漂移导致的相位累积误差。最终经 DAC 输出分离后的 A'和 B'信号,支持按键移相与数码管显示。该方案有效解决了多时钟域下的信号同步问题。

王者发布于 2026/4/10更新于 2026/7/2336 浏览
2023 电赛 H 题:FPGA 与 STM32 实现的信号分离装置

前言

本次分享的是 2023 年全国大学生电子设计竞赛 H 题(信号分离装置)的 FPGA+STM32 协同设计方案。题目要求从混合信号 C 中解调出原始的两路波形 A'和 B'。除了增益为 1 的加法器部分外,核心处理逻辑均由 FPGA 与 STM32 配合完成。

题目背景

系统需从信号发生器输出的两路波形 A 和 B 经加法器生成信号 C,任务是从 C 中还原出 A'和 B'。由于重构波形与原信号时钟不同步,存在相位漂移风险,因此需要引入锁相机制。

文章配图 文章配图 文章配图 文章配图

系统架构

整体数据流向如下: C 信号 → 高速 ADC → FPGA → FIFO → 串口 → STM32 → FFT 识别 → 串口回传 → DDS 重构 → 锁相环 → 高速 DAC → A', B'

通信链路设计

FPGA 与 STM32 之间的数据交互是系统的神经中枢。考虑到采样率(1MHz)与串口波特率(115200)的差异,我们采用了异步 FIFO 进行跨时钟域缓冲。

1. FPGA 端 FIFO 与串口收发

写入速率匹配 ADC 采样频率 1MHz,读取速率适配串口发送 12.5KHz。这里以 AX7035B 开发板为例,状态机控制 FIFO 的读写使能。

assign ad9238_clk_ch0 = clk_1M;
wire wr_en, rd_en, full, empty;
reg [7:0] w_data;
localparam W_IDLE = 1, W_FIFO = 2;
reg[2:0] write_state, next_write_state;

always@(posedge clk_1M or negedge rst) begin
    if(rst == 1'b0) write_state <= W_IDLE;
    else write_state <= next_write_state;
end

always@(*) begin
    case(write_state)
        W_IDLE: if(empty == 1'b1) next_write_state <= W_FIFO;
                else next_write_state <= W_IDLE;
        W_FIFO: if(full == 1'b1) next_write_state <= W_IDLE;
                else next_write_state <= W_FIFO;
        default: next_write_state <= W_IDLE;
    endcase
end

assign wr_en = (next_write_state == W_FIFO) ? 1'b1 : 1'b0;

串口发送模块采用标准 UART 协议,注意 tx_valid 信号的时序对齐,避免丢包。

uart_tx#(.CLK_FRE(50), .BAUD_RATE(115200)) uart_tx(
    .clk(clk), .rst_n(rst), .tx_data(tx_data), 
    .tx_data_valid(tx_valid), .tx_pin(tx_pin)
);

接收端则通过帧头(FF)和帧尾(FE)界定数据包,解析出波形类型及频率信息。

2. STM32 端数据处理

STM32 负责核心的频谱分析。使用 DMA 或中断接收数据后,调用 DSP 库进行 FFT 运算。

波形识别逻辑

已知频率范围在 20KHz-100KHz,步进 5KHz。正弦波频谱集中,三角波含三次谐波导致基波幅值削弱。通过比较基波能量大小即可区分波形。

// 频域能量聚集
for (int i=35; i<1000; i++) {
    freq = (int)(((float)i*1000000/2048/5000)+0.5);
    if(freq==freq_last) {
        v_max = FFT_output[i]*FFT_output[i]+v_max;
    } else {
        v_max = sqrt(v_max); 
        freq_change[cnt] = v_max;
        fre[cnt] = freq;
        freq_last=freq; cnt++;
    }
}

// 寻找最大两个能量点
for(int i=0;i<100;i++) {
    if(freq_change[i]>max[0]) { /* 更新最大值 */ }
    else if(freq_change[i]>max[1] && freq_change[i]<max[0]) { /* 更新次大值 */ }
}

// 阈值判断波形类型
if(max[0]>5.7) wave[0] = 0; // 正弦波
else wave[0] = 1;            // 三角波

完整的主循环逻辑包含初始化、FFT 计算、结果回传及 OLED 显示刷新。

波形重构与锁相

得到参数后,FPGA 端利用 DDS 技术重构波形。但直接生成的波形因时钟源差异会产生相位漂移,必须引入锁相环(PLL)。

1. DDS 模块

ROM 表中存储正弦波和三角波的采样点。根据传入的频率字累加相位,查表输出数据。

module dds(input clk, input rst, input [31:0] freq1, output [13:0] dataout1);
    reg [31:0] phase_acc;
    always @(posedge clk) phase_acc <= phase_acc + freq1;
    assign dataout1 = rom_data[phase_acc[21:12]];
endmodule

2. 锁相环实现

鉴相器将输入信号与输出信号相乘并低通滤波,环路滤波器采用 PI 结构调节 Kp 和 Ki,最终反馈相位至 DDS 地址寄存器,消除累积误差。

mult_mix mult_mix_A (.A(ADC_signed), .B(DAC_A), .P(mix_A));
LPF LPF_A (.s_axis_data_tdata(A_filter), .m_axis_data_tdata(A_filter_out));
Loop_filter Loop_filter_A(.i_pd(A_filter_out), .o_frequency_df(A_phase));

3. 用户交互

支持按键消抖、移相设置及数码管显示。通过前三个按键调整相位差,第四个按键确认零点,数码管实时反馈当前相位值。

总结

本方案通过 FPGA 的高速并行处理能力与 STM32 的灵活算法执行能力互补,实现了混合信号的分离与重构。关键点在于跨时钟域的数据传输稳定性以及 PLL 对相位漂移的有效抑制。实际调试中需注意 ADC 采样同步及串口波特率的精度校准。

目录

  1. 前言
  2. 题目背景
  3. 系统架构
  4. 通信链路设计
  5. 1. FPGA 端 FIFO 与串口收发
  6. 2. STM32 端数据处理
  7. 波形识别逻辑
  8. 波形重构与锁相
  9. 1. DDS 模块
  10. 2. 锁相环实现
  11. 3. 用户交互
  12. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026 年春晚机器人行业营销竞争与商业化落地观察
  • 前端首屏加载时间度量:深入理解 FCP、LCP 等核心指标
  • 如何成为一名黑客:态度、技术与文化指南
  • Material Files:Android 上最优雅的开源文件管理器
  • 网络安全常见设备及其功能作用详解
  • Neeshck-Z-lmage_LYX_v2 本地 AI 绘画工具搭建教程
  • Python 代码性能优化与加速工具指南
  • Java SpringBoot+Vue3+MyBatis 英语知识应用网站系统架构设计
  • AI 产品经理全流程工作指南:从需求定义到模型验收
  • K8s 集群外通过路由直连 Pod 实战
  • Git 下载及安装教程
  • PageIndex 无分块文档索引技术详解
  • 从 Midjourney 到 Runway:AI 视频生成工具进化史
  • Stable Diffusion v1.5 风格化案例:油画/水彩/线稿生成
  • WSL 安装 Linux 发行版失败:网络与权限分析
  • Git 分支管理规范与流程指南
  • Visual Studio 2026中Github Copilot的大模型
  • HUSKYLENS 2 AI 相机视觉传感器识别条形码输出数据
  • KDTS 工具实现 MySQL 至 KingbaseES 数据迁移实战
  • HarmonyOS Location Kit 端侧与云侧地理围栏开发指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online