程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

一维时间序列信号的迭代非线性模态分解方法(Python语言)

hfteth 2025-01-15 13:36:24 技术文章 15 ℃

模态分解是一类经典的信号处理方法,通过将一个完整信号分解为若干分量,筛选出一个或多个有意义的模态并进行信号重构,起到去除多余噪声、突出信号中有意义成分的作用。模态分解方法最早可追溯至黄锷等人提出的经验模态分解EMD,EMD能够依靠输入信号的时间尺度特征在时域逐级筛选趋势项,将信号分解为一组本征模态函数。自此,以EMD为代表的模态分解类方法引发了国内外大量学者的关注及研究。集总经验模态分解EEMD引入高斯白噪声对信号进行辅助分析,有效减轻模态间的混叠;互补集总经验模态分解,使用一对符号相反的白噪声代替EEMD中使用的高斯白噪声,有效提高模态分量的信噪比及算法效率。此外,受EMD启发,局部均值分解LMD、本征时间尺度分解ITD等类EMD方法相继被提出,在一定程度上提高了信号分解效果。

程序采用Python语言,使用Jupyter Notebook环境,执行一维时间序列信号的迭代非线性模态分解,给出两个例子,附带参考文献。

# Compare the combination of discovered modes (g_0 and g_1) vs the original signal
plt.figure(figsize=(10,6))
plt.plot(t, np.sum(gs, axis=0), '--k', label=r'Predicted modes sum $\sum \mathbf{g}_k#39;)
plt.plot(t, signal, label=r'True signal $\mathbf{s}_c#39;)
plt.ylabel(r"Chirp Mode $\mathbf{g}_k$, Signal $\mathbf{s}_c#34;)
plt.xlabel('Time, sec')
plt.legend()


plt.figure(figsize=(10,6))
plt.plot(t, signal-np.sum(gs,axis=0), label='Residual')
plt.ylabel(r'Residual ($\mathbf{s}_c-\mathbf{g}_k$)')
plt.xlabel('Time, sec')
plt.legend()
plt.show()

部分出图如下:

完整代码:

https://mbd.pub/o/bread/mbd-ZZ6akphy

工学博士,担任《Mechanical System and Signal Processing》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

Tags:

最近发表
标签列表