2023电赛H题 信号分离装置 开源

博主分享2023年电赛国赛H题思路,用STM32官方库函数采集C信号数据进行FFT得到频谱图,判断主峰以区分波形。难点是A和A’同频稳定显示,提出控制DDS时钟等解决办法,还探讨自动调的思路,但因技术力不足未实现,最后给出代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2023年电赛国赛H题,虽然说是大失败,但是想法和一些东西都是有的,分享给下一届备赛的同学了。

首先是C信号采集1024个数据,丢给fft,用的是stm32官方库函数,然后得到频谱图,就是幅频特性图,然后因为20kHz到100kHz,分辨率为5kHz,因此可以用遍历的方法,把5和其倍数频率附近3个点的幅值相加,大于某个阈值判定为主峰,两个主峰比较好找。正弦波就一个主峰,三角波基频、三倍频、五倍频都有,但是可能出现30k三角,90k正弦的情况,因此判断三角波可以直接找五倍频,但是这个阈值要合理设置,炼丹一下就找出来了,具体逻辑看fft函数

接着用dds合成波形就可以输出,但是这个题最大的难点在于A和A’同频稳定显示,因为生成波形A’用的是单片机的晶振,A是信号发生器的晶振,因此必定出现“同频率不同源”,本质还是频率微小差异,可能就是小数点后几位的频率差异,在示波器上都可以看出来。

解决办法就是就是控制dds的时钟,dds时钟是由单片机TIM给的,这个pwm波精确给定我们没有做出来,但是看到有的组做出来的,想法就是用主从时钟、定时器级联等方法,精确控制pwm波的数量,想法有了但是主从时钟没有搞明白(裂开),最后没有做出来

那怎么自动调?得知道输出的时钟和C信号快了还是慢了,想法是对C进行施密特触发器整型成矩形波,对于整型得到的信号管脚上升沿外部中断,对C周期,C反正最低5kHz,进行测量,但也没有做出来。

用5kHz周期的时间内测量有C的几个脉冲,比如4个,因为我知道5khz的一个周期就是200us内,单片机定时器可以从0计数到n,比如定时器时钟2M,200us就是0-400,接着用一个可变周期定时器(用输出比较中断,到某个数就讲TIM -> CNT = 0),C输入的管脚上升沿触发一个外部中断,这个外部中断打开那个可变定时器,可变周期定时器到400的时候输出比较中断,看如果只计数到3个说明可变周期要长一点,设置成401继续开始上述过程。显然,400这个数越大越精确,因为stm32 pclk2时钟用的是72M,400*36=14400。

1、如果说得到14399,C信号的时钟14400个周期=单片机时钟14399个周期,单片机快,假设单片机TIM时钟72M,给dds的时钟是2MHz的,就是说定时器A36分频,计36输出一次,那么需要另一个定时器B给这个定时器开关,定时器B计数到14399就把A关50周期再打开,应该可以用滴答定时器(delay里面用的那种)。

2、假如最后得到到14450,那么说明C信号的时钟14400个周期=单片机时钟14450个周期,就是单片机的频率低了,慢了,定时器A35分频,会比2M的dds所需时钟快,2.0571MHz,2.0571M*(14400/14450)=2.0500MHz,就是说相对于C信号的时钟来说单片机35分频就是2.05MHz,那么就是说定时器B计数到2M的时候,关停定时器A0.05M个周期的时间

可以看出,单片机快了明显好调整,那么就可以用dds输出的时候,频率控制器写大一点,有一种单片机快的错觉,去降低单片机输出的时钟频率

就是说思路是有了,技术力不够,实现不出来(叹气ε=(´ο`*)))唉)

代码:
https://github.com/superleo111/electron_design/tree/main

<think>好的,用户想了解或实现信号分离装置的FPGA设计,需要设计方案或IP核。首先,我得明确信号分离的具体需求。信号分离通常涉及数字信号处理,比如滤波、盲源分离等。用户可能面对的是多路混合信号分离,比如音频、通信或生物医学信号。 接下来,我得考虑FPGA的优势,比如并行处理和低延迟。设计方案需要模块化,可能包括预处理、核心算法和输出模块。预处理可能涉及AD转换和数据缓冲,这需要用到FPGA的IP核,比如Xilinx的JESD204B IP核,用于高速ADC接口,这在引用[^1]中提到过。数据缓冲可能需要FIFO或RAM模块。 核心算法部分,用户可能需要盲源分离算法,如ICA。FPGA实现ICA需要矩阵运算和迭代优化,这里可以用DSP slices和并行处理。此外,如果信号有频域差异,FFT IP核会是关键,比如Xilinx的FFT IP核,能高效处理频域变换。这部分需要引用到数字信号处理的常见方法。 输出模块要考虑数据格式转换和传输接口,比如UART或Ethernet MAC IP核,确保与外部设备兼容。同时,时钟管理和状态机控制也是重点,使用FPGA的时钟管理IP核和自定义状态机逻辑,确保各模块同步。 在IP核选择方面,Xilinx和Intel都提供了丰富的IP资源,如FFT、FIR滤波器、矩阵运算等,可以加速开发。用户可能需要参考引用[^2]中的设计思路,采用同步逻辑和模块化设计,比如哈佛结构,提升处理效率。 最后,验证和优化步骤不可或缺,需要仿真和实时测试,确保功能正确并优化资源使用。用户可能需要了解如何平衡速度和资源,以及如何调试FPGA设计。 相关问部分,用户可能对具体算法实现、IP核配置、资源优化和验证方法感兴趣,需要覆盖设计中的关键点和潜在挑战。</think>### FPGA实现信号分离装置设计方案 信号分离装置通常用于从混合信号中提取目标分量(如特定频段、调制方式或信号源)。以下是基于FPGA的设计方案框架: #### 1. **需求分析与算法选择** - **信号类型**:确定输入信号类型(如音频、射频、生物信号)及分离目标(如盲源分离、频域滤波、独立成分分析ICA)。 - **算法选择**: - **频域滤波**:使用FFT/IP核实现频域分离,例如: $$X(f) = \mathcal{F}\{x(t)\} \quad \text{(通过FFT转换到频域)}$$ - **盲源分离**:采用FastICA算法,依赖协方差矩阵计算与特征分解。 #### 2. **硬件架构设计** - **模块划分**: 1. **预处理模块**:信号采样与缓冲(使用FPGA的FIFO或BRAM)。 2. **核心处理模块**: - 若使用ICA算法,需实现矩阵运算单元(如乘加器链)与迭代控制逻辑[^2]。 - 若使用滤波,调用FPGA的FIR/FFT IP核(如Xilinx FFT IP)。 3. **输出模块**:分离信号格式转换(如DAC接口或数字传输)。 - **数据流控制**:通过状态机调度模块间数据交互,确保时序同步。 #### 3. **IP核与资源利用** - **关键IP核**: - **JESD204B IP核**:用于高速ADC数据接收(适用于射频信号分离场景)。 - **FFT/FIR IP核**:实现频域分析与滤波(如Xilinx FFT v9.0)。 - **矩阵运算IP核**:加速协方差矩阵计算(如Xilinx LAPACK库)。 - **资源优化**:通过流水线、并行化降低逻辑延迟,复用BRAM存储中间数据。 #### 4. **验证与调试** - **仿真验证**:使用MATLAB生成测试向量,通过Vivado仿真比对FPGA输出与理论结果。 - **硬件测试**:通过Signal Tap或ChipScope实时捕获信号分离效果。 --- ###
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值