zoukankan      html  css  js  c++  java
  • 信号处理 -经验模态分解 【2】

    算法实现起来比较简单,参考 资料1,这里不再赘述;

    特点

    傅里叶变换 的 基波 为 正弦波,如果原始信号波形很复杂,信号分解 计算量会很大,用 无穷多的 正弦波 才能 逼近 这个 波形;

    小波变换 的 基波 为 某些固定波形,不同的 基波 对信号处理影响很大,一旦选定,无法更换,即使小波基在全局最佳,在某些局部却不一定;

    经验模态分解的特点在于 自适应 的基函数(基波),使得它 可以处理 任意 信号;

    应用

    经验模态分解 认为 任何 一个复杂信号 都可以分解成若干个 基本模态分量 imf;

    这些基本模态分量相加 也可以 大致 重构 原始信号;

    去燥 与 重构

    我们把 imf 进行 频谱分析后,频率最高的就是 噪声,把 这个 imf 以外的 imf 相加,就可以达到去燥效果;

    import numpy as np
    import matplotlib.pylab as plt
    from PyEMD.EEMD import EEMD
    from scipy.fft import fft
    
    
    if __name__ == '__main__':
        t = np.linspace(0, 100, num=100)
        S = 3*np.sin(2*np.pi*10*t)      # 10HZ
        S += 5*np.sin(2*np.pi*4*t)      # 4HZ
        S += np.random.randn(100, )     # 白噪声
    
        eemd = EEMD()
        imfs = eemd.eemd(S, T=t, max_imf=-1)
        print(imfs.shape)
    
        rows = 2 * imfs.shape[0] + 1
    
        ### 信号重构
        plt.subplot(311); plt.title('original')
        plt.plot(S)
        plt.subplot(312); plt.title('sum all imfs')
        sum_imf0 = np.sum(imfs, axis=0)
        plt.plot(sum_imf0)
        plt.subplot(313); plt.title('sum no noise imfs')
        sum_imf1 = np.sum(imfs[1:, :], axis=0)
        plt.plot(sum_imf1)
        plt.show()

    可以看到 第 2 个图 和 原始信号 基本一致;

    第 3 个图 明显 光滑了,去燥的结果;

    特征提取

    这些 imf 具有不同的特征尺度,比 原始信号更有规律性;

    我们可以对 这些 imf 进行特征提取,如 幅值、频谱分析、样本熵计算 等;

    接上面的代码,进行频谱分析;

        plt.subplot(rows, 1, 1)
        plt.plot(S)
    
        for i in range(imfs.shape[0]):
            plt.subplot(rows, 1, i*2+2)
            plt.plot(imfs[i])                   # imf 分量
            y_fft = np.abs(fft(imfs[i]))        # 傅里叶变换进行频谱分析
            plt.subplot(rows, 1, i * 2 + 3)
            plt.plot(y_fft, 'r')
    
        plt.show()

    输出:第一个图是原始信号,后面 的 依次为  imf 分量 和 这个 imf 对应的 频谱(红色)

    第一个 imf 分量 就是 白噪声,高频;

    第二个 imf 分量 为 10HZ 的正弦波,频谱图 在 10HZ 处 凸起;

    第三个 imf 分量 为 4HZ 的正弦波; 

    残差的应用

    参考资料:

    https://zhuanlan.zhihu.com/p/40005057  这篇文章能让你明白经验模态分解(EMD)——基础理论篇

    https://zhuanlan.zhihu.com/p/44833026  这篇文章能让你明白经验模态分解(EMD)——IMF的物理含义
  • 相关阅读:
    使用VS2005制作安装包时遇到的问题
    XPO学习(5)一个实现数据编辑的ASP.NET应用程序
    XPO学习(2)关系(一对多)
    XPO学习(1)第一个基于XPO的 数据感知应用程序
    XPO学习(3)数据查询
    XPO学习(4)一个WINFROM的数据编辑应用程序
    【收藏】Oracle教程
    IIS 7中的AppCmd.exe执行的基础命令
    类和结构的区别
    windows服务器管理交流群
  • 原文地址:https://www.cnblogs.com/yanshw/p/13294594.html
Copyright © 2011-2022 走看看