信号EMD模态分解python简单实现

from PyEMD import EMD
import numpy as np
import matplotlib.pyplot as plt

"""
使用EMD模态分解方法,将一维数组分解为多列
"""
#对数据进行EMD分解
def do_emd(y):
    """
    将输入序列y进行EMD分解
    :param y: 一维数组,array/list,将要分解的数据
    :return:
        多维数组,分解后的结果
    """
    emd = EMD()
    IMFs = emd(y)
    N = IMFs.shape[0]+1
    return IMFs,N

#对原数据及分解后的数据进行绘制
def do_plot(N,IMFs,x,y):
    plt.subplot(N, 1, 1)
    plt.plot(x, y, 'r')
    for n, imf in enumerate(IMFs):
        plt.subplot(N, 1, n + 2)
        plt.plot(x, imf, 'g')
        plt.title("IMF " + str(n + 1))
        plt.xlabel("Time [s]")
    plt.tight_layout()
    plt.show()

if __name__=="__main__":
    #1.生成随机数序列y,及序号序列x
    y = np.random.random(100)
    x = [i for i in range(100)]

    #2.分解
    IMFs,N =do_emd(y)

    #3.绘制原序列及分解结果
    do_plot(N, IMFs, x, y)

参考文献:https://www.csdn.net/tags/MtjaggzsNjE4ODQtYmxvZwO0O0OO0O0O.html

你可能感兴趣的:(python,开发语言,机器学习)