日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python實現PyEMD經驗模態分解殘差量分析_python

作者:Cyril_KI ? 更新時間: 2022-07-04 編程語言

前言

PyEMD是經驗模態分解 (EMD)及其變體的Python實現,EMD最流行的擴展之一是集成經驗模態分解 (EEMD),它利用了噪聲輔助執行的集成。

顧名思義,這個包中的方法獲取數據(信號)并將其分解為一組組件。所有這些方法理論上都應該將信號分解為同一組分量,但實際上有很多細微差別和不同的方法來處理噪聲。無論采用何種方法,獲得的分量通常稱為本征模態函數(IMF),以強調它們包含固有(自身)屬性,即特定振蕩(模態)。(以上來自官方文檔)

兩種實現形式

最近嘗試實現CEEMDAN,CEEMADN也是EMD的一種變體。按照官方API,有以下兩種形式的寫法:

大部分博客采用的是第一種寫法:

ceemdan = CEEMDAN()
ceemdan.ceemdan(load)
imfs, res = ceemdan.get_imfs_and_residue()
vis = Visualisation()
vis.plot_imfs(imfs, res)

這種寫法得到的圖為:

在這里插入圖片描述

第二種寫法,也是官方的寫法:

ceemdan = CEEMDAN()(load)
imfs, res = ceemdan[:-1], ceemdan[-1]
vis = Visualisation()
vis.plot_imfs(imfs, res)

得到的圖示為:

在這里插入圖片描述

可以發現,兩張圖最大的區別在于Res。一般論文中給出的圖示是第二種。

我們嘗試輸出第一種方法中的Res:

[ 0.00000000e+00 -2.84217094e-14 ?0.00000000e+00 ... -2.84217094e-14
? 0.00000000e+00 ?0.00000000e+00]

可以發現其量級特別小,還原時我們可以不加上這一部分。而方法二中的Res顯然量級是最大的,還原時必須加上。

因此,方法一中的Res是我們一般人所理解的殘余量,在真正進行建模時可以不考慮。

方法一中畫圖時如果我們不包含殘余量,即:

vis.plot_imfs(imfs=imfs, residue=res, include_residue=False)

我們將得到:

在這里插入圖片描述

區別

在github上經過交流后,得到如下結論:

方法一中的Res是真正意義上的殘余量,或許叫殘差更合適一點,也就是分解之后不能再分解的部分。在PyEMD的源碼中被定義為:

S * scale_s - np.sum(self.C_IMF, axis=0)

因此,ceemdan.get_imfs_and_residue()實際上得到的是最終的IMF和重建誤差,而不是殘差。

殘差的正確獲取方式是ceemdan[-1]。

原文鏈接:https://blog.csdn.net/Cyril_KI/article/details/124370191

欄目分類
最近更新