Python 实现集成经验模态分解(EEMD)

首先导入需要的包

from PyEMD import EEMD

第一次导入可能会报错,没有这个PyEMD 这个包,然后一般我们就会去安装输入命令:pip install pyemd。
注意这是一个坑。
应该使用的命令是:pip install EMD-signal
至于为什么我也不甚清楚,写这篇博客的目的就是记下自己踩过的坑,不断填坑,以后少踩坑。
下面正式开始进行eemd分解

def signal_eemd(S):
    # 这里是根据我的数据计算的时间
    Ts = 1 / 20000

    t = np.linspace(0, 1024 * Ts, num=1024)
    
    eemd = EEMD()
    eemd.trials = 500
    eemd.noise_seed(12345)

    
    eIMFs = eemd.eemd(S, t, -1)
    nIMFs = eIMFs.shape[0]
    eeIMFs = eIMFs[0:7, :]    
    # 因为我是批量处理很多信号,每个信号分解得到的分解信号数量不同,没办法统一操作,
    # 所以这里只取了前7个信号分量
    print(eIMFs.shape, eeIMFs.shape)
    # Plot results
    plt.figure(figsize=(12, 9))
    plt.subplot(nIMFs + 1, 1, 1)
    plt.plot(t, S, 'r')

    for n in range(nIMFs):

        plt.subplot(nIMFs + 1, 1, n + 2)
        plt.plot(t, eIMFs[n], 'g')
        plt.ylabel("eIMF %i" % (n + 1))
        plt.locator_params(axis='y', nbins=5)

    plt.xlabel("Time [s]")
    plt.tight_layout()
    plt.savefig('eemd_example', dpi=120)
    plt.show()
    plt.plot(t, eIMFs[0]+eIMFs[1]+eIMFs[1], 'g')
    plt.show()
    return eeIMFs.T
if __name__ == "__main__":
    X_eeemd = (signal_eemd(S=X))
    # 这个函数必须放在if __name__ == "__main__"下面执行才可以,我不知道为什么,
    # 但是试了很多种其他的方法都失败了,只能老老实实的放在if __name__ == "__main__"下面执行

总结一下,一共两个坑,一个是安装PyEMD包时,一个时执行eemd分解函数时,希望可以帮到新手,新手真难,一步一个坑。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐