基于FFT浅谈信号分离

过去的n天里每天与FFT和复合信号朝夕相处,已经有点谈信号分离则色变的感觉了。关于本人被发展指标最后的那个不同频率、不同波形、不同幅值的两个信号叠加的分离过于上头,逐渐忘记自己在最开始的一两天做出的基础指标和前两个发展指标从而导致最终验收的效果极差这件糗事,我觉得幸好是训练题,同时这也告诉我们,执着于发展指标固然很好,但是最好保留完成前面基础指标的代码一份,也可以多准备一个开发板,到时候还能够重测QAQ~


上述皆为闲笔,读者可当做一个笑话或者警示随意阅读或者跳过,下面笔者将针对那个让我死磕了n天的发展指标(三):两个不同频率、不同幅值的信号通过一个减法器后判断出两个波的波形,浅浅谈谈我这几天的收获。

首先,我们在实现这个功能之前需要确保自己首先对FFT的处理比较熟练而且知道何为带通采样、欠采样以及如何处理欠采样获得的数据从而得到两个复合的波的频率。由于本次文章主要针对于如何判断波形,故这此前的处理笔者只做简单的描述,可能后面会补上详细的解释(笔者目前实力不足T_T)。

首先我们需要通过对ADC采样的数字信息进行FFT运算,从而获得两个波的频率,已知FFT的计算方法是固定且有效的,那么频率的计算唯一的错误来源便是ADC采集的数据。知道了误差的来源,那么我们便有几种解决的方法。方法一:你是富哥,直接砸钱拉高设备的性能,虽然简单粗暴,但是确实笔者见到的大部分人使用的方法,什么外置ADC啦,STM32内存不够做FFT就换更高级的片子等等;方法二:也是我目前觉得比较“亲民”的方法,那就是条件判断+实时修改采样频率,已知采样频率取决于你配置的TIM的预分频和自动重装值,HAL库提供了修改的代码,你先给一个大的采样频率做一次FFT,然后根据粗采算的频率修改上述的两个值,让自己的采样频率降下来,这样的结果就会比较精准。当然这里可以用到上面提到的欠采样,只需要你会处理欠采样的结果,你就可以获得非常精准的频率大小(这是在没有干扰的情况下,笔者试过可以将误差缩小到千分之一)。虽然实际情况状况百出,但是人生哪有一帆风顺,剩下可能的问题交由各位读者解决吧。

之后,我们得到了两个波的频率,假设是准的,这时候就要判断两个波各自的波形,我相信大家能看到我这个Blog已经必然是做了很多的search,这里我只简单讲一下然后区分方波、三角波、正弦波。通过一系列的数学证明,我们发现周期的信号都可以展开成一些高频率的信号之和,然后大家发现正弦信号的大部分能量都保留在自己本身的频率上,而方波则是随着频率的上升而衰减,比如说三倍频处的幅值只有三分之一,以此类推;而三角波则是呈平方的比例衰减,三倍频只有九分之一的幅值;那么我们已经知道了两个波的频率是多少就可以直接计算出对应的高次谐波频率,比如三次谐波、五次谐波等,然后得到频率还不是最终目的,我们要通过FFT算法如何计算两个波的频率的公式,反推回这些高次谐波在FFT算法得到的幅值数组里面的下标,然后得到对应的幅值。最后就是根据这些幅值的关系推断是什么波;

当然,这些幅值是通过ADC采样的值推出的,所以会有误差,这就需要通过算法和实时的测试进行数据矫正。实际上,这只是一部分,因为当两个信号的频率之间满足倍数关系时,某个波就会和另一个波的高次谐波混叠,你得到的幅值是高次波叠加的结果,而这些情况很复杂,这篇博客已经很长了,打算留到之后再讲,尽情期待。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值