PySDKit 0.4.43__tar.gz → 0.4.45__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PKG-INFO +38 -28
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/PKG-INFO +38 -28
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/SOURCES.txt +11 -4
- {pysdkit-0.4.43 → pysdkit-0.4.45}/README.md +37 -27
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pyproject.toml +3 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/__init__.py +9 -5
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/__init__.py +2 -0
- pysdkit-0.4.45/pysdkit/_fmd/__init__.py +8 -0
- pysdkit-0.4.45/pysdkit/_fmd/fmd.py +377 -0
- pysdkit-0.4.45/pysdkit/_imd/__init__.py +25 -0
- pysdkit-0.4.45/pysdkit/_imd/data/gearbox_fault_snippet.npy +0 -0
- pysdkit-0.4.45/pysdkit/_imd/data/input_sig.npy +0 -0
- pysdkit-0.4.45/pysdkit/_imd/imd.py +435 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/components.py +3 -1
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/osd.py +9 -3
- pysdkit-0.4.45/pysdkit/_tid/hvd.py +188 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/vmd_c.py +116 -50
- pysdkit-0.4.45/pysdkit/_vmd/vmd_f.py +192 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/__init__.py +8 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_generator.py +48 -0
- pysdkit-0.4.45/pysdkit/data/fmd_demo.npy +0 -0
- pysdkit-0.4.45/pysdkit/data/vmd_example.npy +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/__init__.py +1 -1
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_imfs.py +274 -15
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_apmd.py +1 -1
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_esmd.py +1 -1
- pysdkit-0.4.45/pysdkit/tests/test_fmd.py +246 -0
- pysdkit-0.4.45/pysdkit/tests/test_hvd.py +161 -0
- pysdkit-0.4.45/pysdkit/tests/test_imd.py +208 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vmd.py +26 -0
- pysdkit-0.4.43/pysdkit/_apmd/__init__.py +0 -6
- pysdkit-0.4.43/pysdkit/_esmd/__init__.py +0 -36
- pysdkit-0.4.43/pysdkit/_fmd/__init__.py +0 -6
- pysdkit-0.4.43/pysdkit/_fmd/fmd.py +0 -301
- pysdkit-0.4.43/pysdkit/_tid/hvd.py +0 -212
- pysdkit-0.4.43/pysdkit/_vmd/vmd_f.py +0 -156
- {pysdkit-0.4.43 → pysdkit-0.4.45}/LICENSE +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/dependency_links.txt +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/requires.txt +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/top_level.txt +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_find_extrema.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_prepare_points.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_splines.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/ceemdan.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/eemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/efd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/emd.py +0 -0
- {pysdkit-0.4.43/pysdkit/_esmd → pysdkit-0.4.45/pysdkit/_emd}/esmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/frequency.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/hht.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/memd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/remd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/semd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/tvf_emd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/bemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/bmemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/emd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/ewt.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/ewt2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/extrema.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd3d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/filter.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_fmd/nfmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/agncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/gdmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/ivgnmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/vgnmd.py +0 -0
- {pysdkit-0.4.43/pysdkit/_apmd → pysdkit-0.4.45/pysdkit/_imd}/apmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/jmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/mjmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/sjmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/lmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/rlmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/swd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/alif.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/data/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/data/prefixed_double_filter.npy +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/itd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/iterative_filtering.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/ssa.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/acmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/avmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/ba_acmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/base.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/mvmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/ovmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/stvmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/svmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/vme.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/cvmd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/vmd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/avncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/incmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/vncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_add_noise.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_cube.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_image.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_models.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_test_univariate.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_time_series.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/texture.txt +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_approxiamte_entropy.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_permutation_entropy.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_sample_entropy.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_base.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_kmeans.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_knn.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_pca.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_fourier_spectra.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_functions.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_images.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_signal.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_cube.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_image.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_signal.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_univariate_signal.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/test_knn.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/test_pca.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/run_all.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_agncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_alif.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_avncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_bmemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ceemdan.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_cvmd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_eemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_emd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ewt.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ewt2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd3d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_gdmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_itd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ivgnmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_jmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_lmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_moving_decomp.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_mstl.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_osd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ovmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_rlmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_semd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_sjmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ssa.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_stl.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_stvmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_svmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_swd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vgnmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vmd2d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vncmd.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_dtw.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_moving_decomp.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_mstl.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_stl.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/__init__.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_correlation.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_diagnalization.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_differ.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_fft.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_function.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_hilbert.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_instantaneous.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_kernel_matrix.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_mirror.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_process.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_smooth1d.py +0 -0
- {pysdkit-0.4.43 → pysdkit-0.4.45}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PySDKit
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.45
|
|
4
4
|
Summary: A Python library for signal decomposition algorithms with a unified interface.
|
|
5
5
|
Author: Whenxuan Wang, RuiZhe Wang, Rongkun Zhu, Kai Wu, Lei Wang, josefinez, Deeksha Manjunath, Yuan Feng, WenTong Zhao, JacktheFowler
|
|
6
6
|
Maintainer-email: Whenxuan Wang <wwhenxuan@gmail.com>, RuiZhe Wang <3133986068@qq.com>
|
|
@@ -51,10 +51,10 @@ Requires-Dist: tqdm>=4.66.5
|
|
|
51
51
|
Requires-Dist: requests>=2.32.3
|
|
52
52
|
Dynamic: license-file
|
|
53
53
|
|
|
54
|
-
# PySDKit: signal decomposition in Python
|
|
55
|
-
|
|
56
54
|
<div align="center">
|
|
57
55
|
|
|
56
|
+
# PySDKit: signal decomposition in Python
|
|
57
|
+
|
|
58
58
|
[](https://pypi.org/project/PySDKit/)
|
|
59
59
|

|
|
60
60
|
[](https://www.python.org/)
|
|
@@ -91,60 +91,69 @@ This project integrates simple signal processing methods, signal decomposition a
|
|
|
91
91
|
4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
|
|
92
92
|
|
|
93
93
|
~~~python
|
|
94
|
+
import numpy as np
|
|
94
95
|
from pysdkit import EMD
|
|
95
|
-
from pysdkit.data import test_emd
|
|
96
96
|
from pysdkit.plot import plot_IMFs
|
|
97
97
|
|
|
98
|
-
t
|
|
98
|
+
t = np.linspace(0, 1, 1000)
|
|
99
|
+
signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
|
|
99
100
|
|
|
100
|
-
# create an instance for signal decomposition
|
|
101
101
|
emd = EMD()
|
|
102
|
-
|
|
103
|
-
IMFs =
|
|
104
|
-
plot_IMFs(signal, IMFs)
|
|
102
|
+
IMFs = emd.fit_transform(signal, max_imfs=3)
|
|
103
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
|
|
105
104
|
~~~
|
|
106
105
|
|
|
107
|
-

|
|
108
107
|
|
|
109
108
|
The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
|
|
110
109
|
|
|
111
110
|
~~~python
|
|
112
|
-
import numpy as np
|
|
113
111
|
from pysdkit import VMD
|
|
112
|
+
from pysdkit.data import test_vmd
|
|
113
|
+
from pysdkit.plot import plot_IMFs
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
signal = np.load("./example/example.npy")
|
|
117
|
-
|
|
118
|
-
# use variational mode decomposition
|
|
119
|
-
vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
|
|
120
|
-
IMFs = vmd.fit_transform(signal=signal)
|
|
121
|
-
print(IMFs.shape)
|
|
115
|
+
t, signal, fs = test_vmd()
|
|
122
116
|
|
|
123
|
-
vmd
|
|
117
|
+
vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
|
|
118
|
+
IMFs = vmd.fit_transform(signal)
|
|
119
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
|
|
124
120
|
~~~
|
|
125
121
|
|
|
126
122
|

|
|
127
123
|
|
|
128
|
-
|
|
124
|
+
For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
|
|
129
125
|
|
|
130
126
|
~~~python
|
|
131
|
-
|
|
127
|
+
import numpy as np
|
|
128
|
+
from pysdkit import MVMD
|
|
129
|
+
from pysdkit.plot import plot_IMFs
|
|
132
130
|
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
t = np.arange(0, 1, 0.001)
|
|
132
|
+
# ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
|
|
133
|
+
signal = np.vstack([
|
|
134
|
+
np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
|
|
135
|
+
np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
|
|
136
|
+
np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
|
|
137
|
+
])
|
|
138
|
+
|
|
139
|
+
mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
|
|
140
|
+
IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
|
|
141
|
+
plot_IMFs(signal, IMFs) # per-channel panels
|
|
135
142
|
~~~
|
|
136
143
|
|
|
137
|
-

|
|
138
145
|
|
|
139
146
|
## Target 🎯 <a id="Target"></a>
|
|
140
147
|
|
|
141
148
|
`PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
|
|
142
149
|
|
|
150
|
+
|
|
151
|
+
|
|
143
152
|
| Algorithm | Paper | Source | State |
|
|
144
153
|
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
|
|
145
154
|
| [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
|
|
146
155
|
| [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
|
|
147
|
-
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) |
|
|
156
|
+
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
|
|
148
157
|
| [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
|
|
149
158
|
| [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
|
|
150
159
|
| [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
|
|
@@ -159,7 +168,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
159
168
|
| [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
|
|
160
169
|
| [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
|
|
161
170
|
| [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
|
|
162
|
-
| [`
|
|
171
|
+
| [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
|
|
172
|
+
| [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
|
|
163
173
|
| [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
|
|
164
174
|
| [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
|
|
165
175
|
| [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
|
|
@@ -188,10 +198,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
188
198
|
| [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
|
|
189
199
|
| [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
|
|
190
200
|
| [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
|
|
191
|
-
|
|
|
201
|
+
| [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
|
|
192
202
|
| [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
|
|
193
203
|
| [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
|
|
194
|
-
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) |
|
|
204
|
+
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
|
|
195
205
|
| [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
|
|
196
206
|
| [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
|
|
197
207
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PySDKit
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.45
|
|
4
4
|
Summary: A Python library for signal decomposition algorithms with a unified interface.
|
|
5
5
|
Author: Whenxuan Wang, RuiZhe Wang, Rongkun Zhu, Kai Wu, Lei Wang, josefinez, Deeksha Manjunath, Yuan Feng, WenTong Zhao, JacktheFowler
|
|
6
6
|
Maintainer-email: Whenxuan Wang <wwhenxuan@gmail.com>, RuiZhe Wang <3133986068@qq.com>
|
|
@@ -51,10 +51,10 @@ Requires-Dist: tqdm>=4.66.5
|
|
|
51
51
|
Requires-Dist: requests>=2.32.3
|
|
52
52
|
Dynamic: license-file
|
|
53
53
|
|
|
54
|
-
# PySDKit: signal decomposition in Python
|
|
55
|
-
|
|
56
54
|
<div align="center">
|
|
57
55
|
|
|
56
|
+
# PySDKit: signal decomposition in Python
|
|
57
|
+
|
|
58
58
|
[](https://pypi.org/project/PySDKit/)
|
|
59
59
|

|
|
60
60
|
[](https://www.python.org/)
|
|
@@ -91,60 +91,69 @@ This project integrates simple signal processing methods, signal decomposition a
|
|
|
91
91
|
4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
|
|
92
92
|
|
|
93
93
|
~~~python
|
|
94
|
+
import numpy as np
|
|
94
95
|
from pysdkit import EMD
|
|
95
|
-
from pysdkit.data import test_emd
|
|
96
96
|
from pysdkit.plot import plot_IMFs
|
|
97
97
|
|
|
98
|
-
t
|
|
98
|
+
t = np.linspace(0, 1, 1000)
|
|
99
|
+
signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
|
|
99
100
|
|
|
100
|
-
# create an instance for signal decomposition
|
|
101
101
|
emd = EMD()
|
|
102
|
-
|
|
103
|
-
IMFs =
|
|
104
|
-
plot_IMFs(signal, IMFs)
|
|
102
|
+
IMFs = emd.fit_transform(signal, max_imfs=3)
|
|
103
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
|
|
105
104
|
~~~
|
|
106
105
|
|
|
107
|
-

|
|
108
107
|
|
|
109
108
|
The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
|
|
110
109
|
|
|
111
110
|
~~~python
|
|
112
|
-
import numpy as np
|
|
113
111
|
from pysdkit import VMD
|
|
112
|
+
from pysdkit.data import test_vmd
|
|
113
|
+
from pysdkit.plot import plot_IMFs
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
signal = np.load("./example/example.npy")
|
|
117
|
-
|
|
118
|
-
# use variational mode decomposition
|
|
119
|
-
vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
|
|
120
|
-
IMFs = vmd.fit_transform(signal=signal)
|
|
121
|
-
print(IMFs.shape)
|
|
115
|
+
t, signal, fs = test_vmd()
|
|
122
116
|
|
|
123
|
-
vmd
|
|
117
|
+
vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
|
|
118
|
+
IMFs = vmd.fit_transform(signal)
|
|
119
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
|
|
124
120
|
~~~
|
|
125
121
|
|
|
126
122
|

|
|
127
123
|
|
|
128
|
-
|
|
124
|
+
For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
|
|
129
125
|
|
|
130
126
|
~~~python
|
|
131
|
-
|
|
127
|
+
import numpy as np
|
|
128
|
+
from pysdkit import MVMD
|
|
129
|
+
from pysdkit.plot import plot_IMFs
|
|
132
130
|
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
t = np.arange(0, 1, 0.001)
|
|
132
|
+
# ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
|
|
133
|
+
signal = np.vstack([
|
|
134
|
+
np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
|
|
135
|
+
np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
|
|
136
|
+
np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
|
|
137
|
+
])
|
|
138
|
+
|
|
139
|
+
mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
|
|
140
|
+
IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
|
|
141
|
+
plot_IMFs(signal, IMFs) # per-channel panels
|
|
135
142
|
~~~
|
|
136
143
|
|
|
137
|
-

|
|
138
145
|
|
|
139
146
|
## Target 🎯 <a id="Target"></a>
|
|
140
147
|
|
|
141
148
|
`PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
|
|
142
149
|
|
|
150
|
+
|
|
151
|
+
|
|
143
152
|
| Algorithm | Paper | Source | State |
|
|
144
153
|
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
|
|
145
154
|
| [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
|
|
146
155
|
| [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
|
|
147
|
-
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) |
|
|
156
|
+
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
|
|
148
157
|
| [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
|
|
149
158
|
| [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
|
|
150
159
|
| [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
|
|
@@ -159,7 +168,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
159
168
|
| [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
|
|
160
169
|
| [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
|
|
161
170
|
| [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
|
|
162
|
-
| [`
|
|
171
|
+
| [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
|
|
172
|
+
| [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
|
|
163
173
|
| [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
|
|
164
174
|
| [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
|
|
165
175
|
| [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
|
|
@@ -188,10 +198,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
188
198
|
| [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
|
|
189
199
|
| [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
|
|
190
200
|
| [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
|
|
191
|
-
|
|
|
201
|
+
| [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
|
|
192
202
|
| [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
|
|
193
203
|
| [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
|
|
194
|
-
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) |
|
|
204
|
+
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
|
|
195
205
|
| [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
|
|
196
206
|
| [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
|
|
197
207
|
|
|
@@ -7,8 +7,6 @@ PySDKit.egg-info/dependency_links.txt
|
|
|
7
7
|
PySDKit.egg-info/requires.txt
|
|
8
8
|
PySDKit.egg-info/top_level.txt
|
|
9
9
|
pysdkit/__init__.py
|
|
10
|
-
pysdkit/_apmd/__init__.py
|
|
11
|
-
pysdkit/_apmd/apmd.py
|
|
12
10
|
pysdkit/_emd/__init__.py
|
|
13
11
|
pysdkit/_emd/_find_extrema.py
|
|
14
12
|
pysdkit/_emd/_prepare_points.py
|
|
@@ -17,6 +15,7 @@ pysdkit/_emd/ceemdan.py
|
|
|
17
15
|
pysdkit/_emd/eemd.py
|
|
18
16
|
pysdkit/_emd/efd.py
|
|
19
17
|
pysdkit/_emd/emd.py
|
|
18
|
+
pysdkit/_emd/esmd.py
|
|
20
19
|
pysdkit/_emd/memd.py
|
|
21
20
|
pysdkit/_emd/remd.py
|
|
22
21
|
pysdkit/_emd/semd.py
|
|
@@ -28,8 +27,6 @@ pysdkit/_emd2d/__init__.py
|
|
|
28
27
|
pysdkit/_emd2d/bemd.py
|
|
29
28
|
pysdkit/_emd2d/bmemd.py
|
|
30
29
|
pysdkit/_emd2d/emd2d.py
|
|
31
|
-
pysdkit/_esmd/__init__.py
|
|
32
|
-
pysdkit/_esmd/esmd.py
|
|
33
30
|
pysdkit/_ewt/__init__.py
|
|
34
31
|
pysdkit/_ewt/ewt.py
|
|
35
32
|
pysdkit/_ewt/ewt2d.py
|
|
@@ -47,6 +44,11 @@ pysdkit/_gdmd/agncmd.py
|
|
|
47
44
|
pysdkit/_gdmd/gdmd.py
|
|
48
45
|
pysdkit/_gdmd/ivgnmd.py
|
|
49
46
|
pysdkit/_gdmd/vgnmd.py
|
|
47
|
+
pysdkit/_imd/__init__.py
|
|
48
|
+
pysdkit/_imd/apmd.py
|
|
49
|
+
pysdkit/_imd/imd.py
|
|
50
|
+
pysdkit/_imd/data/gearbox_fault_snippet.npy
|
|
51
|
+
pysdkit/_imd/data/input_sig.npy
|
|
50
52
|
pysdkit/_jmd/__init__.py
|
|
51
53
|
pysdkit/_jmd/jmd.py
|
|
52
54
|
pysdkit/_jmd/mjmd.py
|
|
@@ -93,7 +95,9 @@ pysdkit/data/_image.py
|
|
|
93
95
|
pysdkit/data/_models.py
|
|
94
96
|
pysdkit/data/_test_univariate.py
|
|
95
97
|
pysdkit/data/_time_series.py
|
|
98
|
+
pysdkit/data/fmd_demo.npy
|
|
96
99
|
pysdkit/data/texture.txt
|
|
100
|
+
pysdkit/data/vmd_example.npy
|
|
97
101
|
pysdkit/entropy/__init__.py
|
|
98
102
|
pysdkit/entropy/_approxiamte_entropy.py
|
|
99
103
|
pysdkit/entropy/_permutation_entropy.py
|
|
@@ -126,7 +130,10 @@ pysdkit/tests/test_ewt2d.py
|
|
|
126
130
|
pysdkit/tests/test_faemd.py
|
|
127
131
|
pysdkit/tests/test_faemd2d.py
|
|
128
132
|
pysdkit/tests/test_faemd3d.py
|
|
133
|
+
pysdkit/tests/test_fmd.py
|
|
129
134
|
pysdkit/tests/test_gdmd.py
|
|
135
|
+
pysdkit/tests/test_hvd.py
|
|
136
|
+
pysdkit/tests/test_imd.py
|
|
130
137
|
pysdkit/tests/test_itd.py
|
|
131
138
|
pysdkit/tests/test_ivgnmd.py
|
|
132
139
|
pysdkit/tests/test_jmd.py
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# PySDKit: signal decomposition in Python
|
|
2
|
-
|
|
3
1
|
<div align="center">
|
|
4
2
|
|
|
3
|
+
# PySDKit: signal decomposition in Python
|
|
4
|
+
|
|
5
5
|
[](https://pypi.org/project/PySDKit/)
|
|
6
6
|

|
|
7
7
|
[](https://www.python.org/)
|
|
@@ -38,60 +38,69 @@ This project integrates simple signal processing methods, signal decomposition a
|
|
|
38
38
|
4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
|
|
39
39
|
|
|
40
40
|
~~~python
|
|
41
|
+
import numpy as np
|
|
41
42
|
from pysdkit import EMD
|
|
42
|
-
from pysdkit.data import test_emd
|
|
43
43
|
from pysdkit.plot import plot_IMFs
|
|
44
44
|
|
|
45
|
-
t
|
|
45
|
+
t = np.linspace(0, 1, 1000)
|
|
46
|
+
signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
|
|
46
47
|
|
|
47
|
-
# create an instance for signal decomposition
|
|
48
48
|
emd = EMD()
|
|
49
|
-
|
|
50
|
-
IMFs =
|
|
51
|
-
plot_IMFs(signal, IMFs)
|
|
49
|
+
IMFs = emd.fit_transform(signal, max_imfs=3)
|
|
50
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
|
|
52
51
|
~~~
|
|
53
52
|
|
|
54
|
-

|
|
55
54
|
|
|
56
55
|
The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
|
|
57
56
|
|
|
58
57
|
~~~python
|
|
59
|
-
import numpy as np
|
|
60
58
|
from pysdkit import VMD
|
|
59
|
+
from pysdkit.data import test_vmd
|
|
60
|
+
from pysdkit.plot import plot_IMFs
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
signal = np.load("./example/example.npy")
|
|
64
|
-
|
|
65
|
-
# use variational mode decomposition
|
|
66
|
-
vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
|
|
67
|
-
IMFs = vmd.fit_transform(signal=signal)
|
|
68
|
-
print(IMFs.shape)
|
|
62
|
+
t, signal, fs = test_vmd()
|
|
69
63
|
|
|
70
|
-
vmd
|
|
64
|
+
vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
|
|
65
|
+
IMFs = vmd.fit_transform(signal)
|
|
66
|
+
plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
|
|
71
67
|
~~~
|
|
72
68
|
|
|
73
69
|

|
|
74
70
|
|
|
75
|
-
|
|
71
|
+
For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
|
|
76
72
|
|
|
77
73
|
~~~python
|
|
78
|
-
|
|
74
|
+
import numpy as np
|
|
75
|
+
from pysdkit import MVMD
|
|
76
|
+
from pysdkit.plot import plot_IMFs
|
|
79
77
|
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
t = np.arange(0, 1, 0.001)
|
|
79
|
+
# ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
|
|
80
|
+
signal = np.vstack([
|
|
81
|
+
np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
|
|
82
|
+
np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
|
|
83
|
+
np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
|
|
84
|
+
])
|
|
85
|
+
|
|
86
|
+
mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
|
|
87
|
+
IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
|
|
88
|
+
plot_IMFs(signal, IMFs) # per-channel panels
|
|
82
89
|
~~~
|
|
83
90
|
|
|
84
|
-

|
|
85
92
|
|
|
86
93
|
## Target 🎯 <a id="Target"></a>
|
|
87
94
|
|
|
88
95
|
`PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
|
|
89
96
|
|
|
97
|
+
|
|
98
|
+
|
|
90
99
|
| Algorithm | Paper | Source | State |
|
|
91
100
|
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
|
|
92
101
|
| [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
|
|
93
102
|
| [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
|
|
94
|
-
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) |
|
|
103
|
+
| [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
|
|
95
104
|
| [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
|
|
96
105
|
| [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
|
|
97
106
|
| [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
|
|
@@ -106,7 +115,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
106
115
|
| [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
|
|
107
116
|
| [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
|
|
108
117
|
| [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
|
|
109
|
-
| [`
|
|
118
|
+
| [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
|
|
119
|
+
| [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
|
|
110
120
|
| [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
|
|
111
121
|
| [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
|
|
112
122
|
| [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
|
|
@@ -135,10 +145,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
|
|
|
135
145
|
| [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
|
|
136
146
|
| [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
|
|
137
147
|
| [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
|
|
138
|
-
|
|
|
148
|
+
| [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
|
|
139
149
|
| [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
|
|
140
150
|
| [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
|
|
141
|
-
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) |
|
|
151
|
+
| [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
|
|
142
152
|
| [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
|
|
143
153
|
| [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
|
|
144
154
|
|
|
@@ -68,5 +68,8 @@ include = ["pysdkit*"]
|
|
|
68
68
|
|
|
69
69
|
[tool.setuptools.package-data]
|
|
70
70
|
"*" = ["*.txt", "*.npy"]
|
|
71
|
+
"pysdkit.data" = ["*.txt", "*.npy"]
|
|
71
72
|
"pysdkit._tid" = ["data/*.npy"]
|
|
72
73
|
"pysdkit._tid.data" = ["*.npy"]
|
|
74
|
+
"pysdkit._imd" = ["data/*.npy"]
|
|
75
|
+
"pysdkit._imd.data" = ["*.npy"]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
A Python library for signal decomposition algorithms.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
__version__ = "0.4.
|
|
5
|
+
__version__ = "0.4.45"
|
|
6
6
|
|
|
7
7
|
# Empirical Mode Decomposition
|
|
8
8
|
from ._emd import EMD
|
|
@@ -44,7 +44,7 @@ from ._tid import HVD
|
|
|
44
44
|
from ._tid import ITD
|
|
45
45
|
|
|
46
46
|
# Extreme-Point Symmetric Mode Decomposition
|
|
47
|
-
from .
|
|
47
|
+
from ._emd import ESMD, esmd
|
|
48
48
|
|
|
49
49
|
# Local Mean Decomposition
|
|
50
50
|
from ._lmd import LMD
|
|
@@ -112,8 +112,8 @@ from ._vncmd import AVNCMD
|
|
|
112
112
|
# Adaptive Local Iterative Filtering (time iterative decomposition)
|
|
113
113
|
from ._tid import ALIF
|
|
114
114
|
|
|
115
|
-
# Adaptive Polymorphic Mode Decomposition
|
|
116
|
-
from .
|
|
115
|
+
# Adaptive Polymorphic Mode Decomposition / Impulsive Mode Decomposition
|
|
116
|
+
from ._imd import APMD, IMD, imd
|
|
117
117
|
|
|
118
118
|
# Empirical Wavelet Transform
|
|
119
119
|
from ._ewt import ewt, EWT
|
|
@@ -207,6 +207,7 @@ Iterative Nonlinear Chirp Mode Decomposition | INCMD
|
|
|
207
207
|
Adaptive Variational Nonlinear Chirp Mode Dec. | AVNCMD
|
|
208
208
|
Adaptive Local Iterative Filtering | ALIF
|
|
209
209
|
Adaptive Polymorphic Mode Decomposition | APMD
|
|
210
|
+
Impulsive Mode Decomposition | IMD
|
|
210
211
|
Empirical Wavelet Transform | EWT
|
|
211
212
|
Empirical Wavelet Transform for 2D Image | EWT2D
|
|
212
213
|
Jump Plus AM-FM Mode Decomposition | JMD
|
|
@@ -246,7 +247,8 @@ __all__ = [
|
|
|
246
247
|
"SWD",
|
|
247
248
|
"swd",
|
|
248
249
|
"OSD",
|
|
249
|
-
"GDMD",
|
|
250
|
+
"GDMD",
|
|
251
|
+
"gdmd",
|
|
250
252
|
"VGNMD",
|
|
251
253
|
"vgnmd",
|
|
252
254
|
"IVGNMD",
|
|
@@ -272,6 +274,8 @@ __all__ = [
|
|
|
272
274
|
"AVNCMD",
|
|
273
275
|
"ALIF",
|
|
274
276
|
"APMD",
|
|
277
|
+
"IMD",
|
|
278
|
+
"imd",
|
|
275
279
|
"ewt",
|
|
276
280
|
"EWT",
|
|
277
281
|
"ewt2d",
|