笔者参与实验室里IOT方面的项目,需要对雷达采集数据进行处理,特意学习了一下EMD方面的资料和文献,以下为一些学习笔记和个人理解。
1 方法使用背景
在通过雷达获取信号后,需要对其进行处理并从中提取出我们所需的数据部分。根据信号的频率与时间的情况,我们可以将频率分为两类:平稳信号、非平稳信号(如下图)
左侧每个周期内各参数均一致,能清晰反映测量信息,直接使用传统信号处理方法(如FFT、DFT)即可提取出数据参数;
而对于右侧的信号,我们发现随着时间的变化,其参数一直在变化,这使得我们无法判断哪些参数是有效的,哪些是无效的,我们甚至无法判断周期。整体进行运算显然不合理,但如果人为划分波段进行运算不仅主观性干扰大,而且极度不准确。这种情况是由于我们所测的信号在接收时,混入了其他的背景反射信号(我们称为“噪声”),简而言之,我们要将信号分解为多个信号,再取出我们所需的那个进行处理。其中关键的无人为参数的分解步骤,便是EMD的工作。
2 方法原理
EMD是以信号极点信息,将信号分为了多个本征模态函数(IMF)+一个单调残差r。
*何谓本征模态函数?
本征模态函数(IMF)即为一个函数f(x),若其在定义域内能满足:
1.极值点与零点数目相差不超过1(即两者交替出现)
2.上下包络面均值为0
则称之为本征模态函数(如下图)
因此,我们可以将EMD表示为如下公式:
3 计算方法
在用上面方法求出IMF1后,将u(x)-IMF1作为新的u(x),再去求IMF2。
一直重复,直至最新的u(x)为单调函数,不再可能剥离出新的IMF了 ,此u(x)即为这些分离出的信号的总和与原信号的差距,一般我们称之为残差,如前文公式所述。
4 注意事项
1 端点问题
对于原信号曲线的端点,我们应该如何处理?
一般采用镜像延拓法,对图像进行拓展,并根据拓展结果判断端点应该被视为极大还是极小值点。
2 多次分解处理困难问题
EMD算法有一个特点,就是先分离出的信号是频率高的,之后是频率低的,在极多此分解后,会出现分解困难的问题,此时可以不用上面所述方法分解,可以应用以下公式:
5 matlab 中EMD的实现
若使用上述用法,则为返回波形数据。
在matlab中实现EMD画图功能脚本:
emd这样使用可以直接进行画图而非返回一个矩阵。
示例如下: