【高斯窗自适应+尺度分离】基于高斯平均滤波分解的信号自适应分解和趋势提取方法(Python)

作品简介

信号分解就是把一个复杂信号拆成几个简单分量,每个分量代表信号里不同时间尺度的波动。比如听一首曲子,可以拆成旋律、节奏、和声。传统方法像傅里叶变换,只能看到信号里有哪些频率,但不知道这些频率啥时候出现。后来有人提出经验模态分解,能把信号按时间尺度从快到慢一层层剥开,但它对噪声和采样挺敏感,容易出幺蛾子。高斯平均滤波分解算是它的改良版,用高斯窗平滑信号来提取每个分量,比EMD更稳当,而且可以通过参数控制分解的精细度。


高斯平均滤波分解就像拿一把可调节大小的梳子,一点一点把通用信号里不同粗细的波动梳出来。它通过高斯窗平滑,从信号里剥出最慢的成分,剩下的再接着剥,直到信号变得平淡无奇。比起传统的EMD,高斯平均滤波分解多了窗长调节和边界处理,分解过程更可控,不容易被噪声带偏,适合处理非平稳、非线性的真实信号。

算法步骤

准备信号:拿到一段通用信号,比如震动数据、脑电波、股票价格,先看看它有多长。

定分解次数:想好要拆出几个分量(IMF),默认拆2个,不够可以多拆。

找极值点:找出信号里所有的峰值和谷值,数一数有多少个极值点。如果极值点太少(少于等于2),说明信号太简单,就不用拆了。

算高斯窗长:根据极值点个数和信号长度,算出一个窗长(mask),用来做平滑。窗长影响分量的尺度,可以通过参数chi调节。

扩展信号边界:为了防止平滑时边界处数据不够,把信号两端按照一定规则(比如对称、常数)延长,保证窗能完整覆盖。

高斯平滑:用高斯窗对扩展后的信号做加权平均,得到一条平均曲线,相当于信号里的慢变成分。

提取一个分量:用原始信号减去这条平均曲线,得到第一个IMF。

检查停止条件:算一下当前分量和上一轮分量的差别,如果差别特别小(小于阈值TH2),或者原始信号能量和剩下信号能量的比值太大(超过TH1),就停手。

重复迭代:把剩下的信号继续重复3~8步,直到拆够预定个数或满足停止条件。

输出结果:把所有IMF堆成一个矩阵,剩下的叫残差。

创作时间: