PySDKit 0.4.10__tar.gz → 0.4.12__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.
Files changed (109) hide show
  1. pysdkit-0.4.12/PKG-INFO +165 -0
  2. pysdkit-0.4.12/PySDKit.egg-info/PKG-INFO +165 -0
  3. {pysdkit-0.4.10 → pysdkit-0.4.12}/PySDKit.egg-info/SOURCES.txt +31 -4
  4. {pysdkit-0.4.10 → pysdkit-0.4.12}/PySDKit.egg-info/requires.txt +2 -0
  5. pysdkit-0.4.12/README.md +128 -0
  6. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/__init__.py +27 -9
  7. pysdkit-0.4.12/pysdkit/data/__init__.py +39 -0
  8. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/data/_add_noise.py +0 -8
  9. pysdkit-0.4.12/pysdkit/data/_generator.py +530 -0
  10. pysdkit-0.4.12/pysdkit/data/_image.py +364 -0
  11. pysdkit-0.4.12/pysdkit/data/texture.txt +256 -0
  12. pysdkit-0.4.12/pysdkit/emd/__init__.py +14 -0
  13. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/emd/_find_extrema.py +28 -21
  14. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/emd/_prepare_points.py +62 -63
  15. pysdkit-0.4.12/pysdkit/emd/_splines.py +123 -0
  16. pysdkit-0.4.12/pysdkit/emd/ceemdan.py +402 -0
  17. pysdkit-0.4.12/pysdkit/emd/eemd.py +280 -0
  18. pysdkit-0.4.12/pysdkit/emd/emd.py +516 -0
  19. pysdkit-0.4.12/pysdkit/emd/memd.py +826 -0
  20. pysdkit-0.4.12/pysdkit/emd/remd.py +28 -0
  21. pysdkit-0.4.12/pysdkit/emd2d/bemd.py +6 -0
  22. pysdkit-0.4.12/pysdkit/emd2d/bmemd.py +23 -0
  23. pysdkit-0.4.12/pysdkit/emd2d/emd2d.py +18 -0
  24. {pysdkit-0.4.10/pysdkit/faemd → pysdkit-0.4.12/pysdkit/esmd}/__init__.py +1 -1
  25. pysdkit-0.4.12/pysdkit/esmd/esmd.py +13 -0
  26. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/ewt/ewt.py +96 -54
  27. pysdkit-0.4.12/pysdkit/ewt/ewt2d.py +11 -0
  28. pysdkit-0.4.12/pysdkit/faemd/__init__.py +12 -0
  29. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/faemd/md_faemd.py +2 -2
  30. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/fmd/fmd.py +7 -35
  31. pysdkit-0.4.12/pysdkit/hht/__init__.py +6 -0
  32. pysdkit-0.4.12/pysdkit/hht/hht.py +14 -0
  33. pysdkit-0.4.12/pysdkit/hvd/__init__.py +7 -0
  34. pysdkit-0.4.12/pysdkit/hvd/hvd.py +206 -0
  35. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/itd/itd.py +13 -7
  36. pysdkit-0.4.12/pysdkit/jmd/__init__.py +6 -0
  37. pysdkit-0.4.12/pysdkit/jmd/jmd.py +33 -0
  38. pysdkit-0.4.12/pysdkit/jmd/mjmd.py +27 -0
  39. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/lmd/lmd.py +110 -57
  40. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/lmd/rlmd.py +4 -2
  41. pysdkit-0.4.12/pysdkit/plot/__init__.py +19 -0
  42. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/plot/_fourier_spectra.py +31 -20
  43. pysdkit-0.4.12/pysdkit/plot/_functions.py +102 -0
  44. pysdkit-0.4.12/pysdkit/plot/_plot_images.py +200 -0
  45. pysdkit-0.4.12/pysdkit/plot/_plot_imfs.py +541 -0
  46. pysdkit-0.4.12/pysdkit/ssa/__init__.py +7 -0
  47. pysdkit-0.4.12/pysdkit/ssa/ssa.py +141 -0
  48. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/tvf_emd/tvf_emd.py +169 -64
  49. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/_Index_of_Orthogonality.py +2 -4
  50. pysdkit-0.4.12/pysdkit/utils/__init__.py +104 -0
  51. pysdkit-0.4.12/pysdkit/utils/_diagnalization.py +228 -0
  52. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/_differ.py +7 -2
  53. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/_fft.py +10 -0
  54. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/_function.py +0 -1
  55. pysdkit-0.4.12/pysdkit/utils/_kernel_matrix.py +270 -0
  56. pysdkit-0.4.12/pysdkit/utils/_lags.py +163 -0
  57. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/_smooth1d.py +34 -9
  58. pysdkit-0.4.12/pysdkit/utils/_types.py +79 -0
  59. pysdkit-0.4.12/pysdkit/utils/correlation.py +342 -0
  60. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/hilbert.py +28 -16
  61. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/instantaneous.py +41 -17
  62. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/mirror.py +12 -2
  63. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/utils/process.py +15 -9
  64. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/acmd.py +71 -46
  65. pysdkit-0.4.12/pysdkit/vmd/ba_acmd.py +28 -0
  66. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/base.py +12 -4
  67. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/mvmd.py +65 -30
  68. pysdkit-0.4.12/pysdkit/vmd/svmd.py +402 -0
  69. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/vmd_c.py +93 -32
  70. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/vmd_f.py +38 -21
  71. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd2d/__init__.py +1 -0
  72. pysdkit-0.4.12/pysdkit/vmd2d/vmd2d.py +263 -0
  73. pysdkit-0.4.12/pysdkit/vncmd/anvcmd.py +13 -0
  74. pysdkit-0.4.12/pysdkit/vncmd/mncmd.py +11 -0
  75. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vncmd/vncmd.py +80 -30
  76. pysdkit-0.4.12/setup.py +44 -0
  77. pysdkit-0.4.10/PKG-INFO +0 -149
  78. pysdkit-0.4.10/PySDKit.egg-info/PKG-INFO +0 -149
  79. pysdkit-0.4.10/README.md +0 -114
  80. pysdkit-0.4.10/pysdkit/data/__init__.py +0 -23
  81. pysdkit-0.4.10/pysdkit/data/_generator.py +0 -240
  82. pysdkit-0.4.10/pysdkit/data/image.py +0 -23
  83. pysdkit-0.4.10/pysdkit/emd/BEMD.py +0 -0
  84. pysdkit-0.4.10/pysdkit/emd/EMD.py +0 -457
  85. pysdkit-0.4.10/pysdkit/emd/__init__.py +0 -2
  86. pysdkit-0.4.10/pysdkit/emd/_splines.py +0 -96
  87. pysdkit-0.4.10/pysdkit/plot/__init__.py +0 -14
  88. pysdkit-0.4.10/pysdkit/plot/_functions.py +0 -102
  89. pysdkit-0.4.10/pysdkit/plot/_plot_imfs.py +0 -121
  90. pysdkit-0.4.10/pysdkit/plot/plot_GrayScale.py +0 -49
  91. pysdkit-0.4.10/pysdkit/utils/__init__.py +0 -42
  92. pysdkit-0.4.10/pysdkit/vmd/svmd.py +0 -324
  93. pysdkit-0.4.10/pysdkit/vmd2d/vmd2d.py +0 -19
  94. pysdkit-0.4.10/setup.py +0 -38
  95. {pysdkit-0.4.10 → pysdkit-0.4.12}/PySDKit.egg-info/dependency_links.txt +0 -0
  96. {pysdkit-0.4.10 → pysdkit-0.4.12}/PySDKit.egg-info/top_level.txt +0 -0
  97. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/emd2d/__init__.py +0 -0
  98. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/ewt/__init__.py +0 -0
  99. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/faemd/faemd.py +0 -0
  100. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/faemd/mv_faemd.py +0 -0
  101. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/fmd/__init__.py +0 -0
  102. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/ifd/__init__.py +0 -0
  103. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/itd/__init__.py +0 -0
  104. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/lmd/__init__.py +0 -0
  105. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/tvf_emd/__init__.py +0 -0
  106. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/__init__.py +0 -0
  107. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vmd/avmd.py +0 -0
  108. {pysdkit-0.4.10 → pysdkit-0.4.12}/pysdkit/vncmd/__init__.py +0 -0
  109. {pysdkit-0.4.10 → pysdkit-0.4.12}/setup.cfg +0 -0
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.2
2
+ Name: PySDKit
3
+ Version: 0.4.12
4
+ Summary: A Python library for signal decomposition algorithms with a unified interface.
5
+ Home-page: https://github.com/wwhenxuan/PySDKit
6
+ Author: whenxuan
7
+ Author-email: wwhenxuan@gmail.com
8
+ Keywords: signal decomposition,signal processing,machine learning
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
12
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.6
16
+ Classifier: Programming Language :: Python :: 3.7
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Requires-Python: >=3.6
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: numpy<=1.26.4,>=1.24.3
23
+ Requires-Dist: scipy<=1.13.1,>=1.11.1
24
+ Requires-Dist: matplotlib<=3.8.4,>=3.7.2
25
+ Requires-Dist: tqdm>=4.66.5
26
+ Requires-Dist: requests>=2.32.3
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: keywords
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
37
+
38
+ # PySDKit: signal decomposition in Python
39
+
40
+ <div align="center">
41
+
42
+ [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
43
+ ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
44
+ [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
45
+ [![Downloads](https://pepy.tech/badge/pysdkit)](https://pepy.tech/project/pysdkit)
46
+ ![Visits Badge](https://badges.pufler.dev/visits/ForestsKing/D3R)
47
+ [![codestyle](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
48
+
49
+ A Python library for signal decomposition algorithms 🥳
50
+
51
+ [Installation](#Installation) |
52
+ [Example Script](#Example-Script) |
53
+ [Target](#Target) |
54
+ [Acknowledgements](#Acknowledgements)
55
+
56
+ <img src="https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/Logo_sd.png" alt="Logo_sd" width="500"/>
57
+
58
+ </div>
59
+
60
+ ## Installation 🚀 <a id="Installation"></a>
61
+
62
+ You can install `PySDKit` through pip:
63
+
64
+ ~~~
65
+ pip install pysdkit
66
+ ~~~
67
+
68
+ We only used [`NumPy`](https://numpy.org/), [`Scipy`](https://scipy.org/) and [`matplotlib`](https://matplotlib.org/) when developing the project.
69
+
70
+ ## Example Script ✨ <a id="Example-Script"></a>
71
+
72
+ This project integrates simple signal processing methods, signal decomposition and visualization, and builds a general interface similar to [`Scikit-learn`](https://scikit-learn.org/stable/). It is mainly divided into three steps:
73
+ 1. Import the signal decomposition method;
74
+ 2. Create an instance for signal decomposition;
75
+ 3. Use the `fit_transform` method to implement signal decomposition;
76
+ 4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
77
+
78
+ ~~~python
79
+ from pysdkit import EMD
80
+ from pysdkit.data import test_emd
81
+ from pysdkit.plot import plot_IMFs
82
+
83
+ t, signal = test_emd()
84
+
85
+ # create an instance for signal decomposition
86
+ emd = EMD()
87
+ # implement signal decomposition
88
+ IMFs = emd.fit_transform(signal, max_imfs=2)
89
+ plot_IMFs(signal, IMFs)
90
+ ~~~
91
+
92
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
93
+
94
+ 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)).
95
+
96
+ ~~~python
97
+ import numpy as np
98
+ from pysdkit import VMD
99
+
100
+ # load new signal
101
+ signal = np.load("./example/example.npy")
102
+
103
+ # use variational mode decomposition
104
+ vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
105
+ IMFs = vmd.fit_transform(signal=signal)
106
+ print(IMFs.shape)
107
+
108
+ vmd.plot_IMFs(save_figure=True)
109
+ ~~~
110
+
111
+ ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
112
+
113
+ Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
114
+
115
+ ~~~python
116
+ from pysdkit.plot import plot_IMFs_amplitude_spectra
117
+
118
+ # frequency domain visualization
119
+ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
120
+ ~~~
121
+
122
+ ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
123
+
124
+ ## Target 🎯 <a id="Target"></a>
125
+
126
+ `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 and VMD, 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.
127
+
128
+ | Algorithm | Paper | Code | State |
129
+ | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
130
+ | [`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) | ✔️ |
131
+ | [`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) | ✔️ |
132
+ | [`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) | ✖️ |
133
+ | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
134
+ | [`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) | ✔️ |
135
+ | [`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) | ✖️ |
136
+ | [`BMEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd2d/bmemd.py) (Bidimensional Multivariate Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8805082) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/72343-bidimensional-multivariate-empirical-mode-decomposition?s_tid=FX_rc1_behav) | ✖️ |
137
+ | [`CEEMDAN`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd/ceemdan.py) (Complete Ensemble EMD with Adaptive Noise) | [[paper]](https://ieeexplore.ieee.org/document/5947265) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
138
+ | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tvf_emd/tvf_emd.py) (Time Varying Filter Based EMD) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168417301135) | [[code]](https://github.com/stfbnc/pytvfemd/tree/master) | ✔️ |
139
+ | [`FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/faemd.py) (Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
140
+ | [`MV_FAEMD`]() (Multivariate Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
141
+ | [`MD_FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/md_faemd.py) (Multidimensional Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
142
+ | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/hvd/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) | ✔️ |
143
+ | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/itd/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) | ✔️ |
144
+ | [`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) | ✔️ |
145
+ | [`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) | ✖️ |
146
+ | [`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) | ✖️ |
147
+ | [`SSA`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ssa/ssa.py) (Singular Spectral Analysis) | [[paper]](https://orca.cardiff.ac.uk/id/eprint/15208/1/Zhiglavsky_SSA_encyclopedia.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/58967-singular-spectrum-analysis-beginners-guide) | ✔️ |
148
+ | [`EWT`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt.py) (Empirical Wavelet Transform) | [[paper]](https://ieeexplore.ieee.org/document/6522142) | [[code]](https://www.mathworks.com/help/wavelet/ug/empirical-wavelet-transform.html) | ✔️ |
149
+ | [`EWT2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt2d.py) (2D Empirical Wavelet Transform) | [[paper]](https://arxiv.org/abs/2405.06188) | [[code]](https://github.com/bhurat/EWT-Python) | ✖️ |
150
+ | [`VMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/vmd_c.py) (Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/6655981) | [[code]](https://github.com/vrcarva/vmdpy) | ✔️ |
151
+ | [`MVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/mvmd.py) (Multivariate Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8890883) | [[code]](https://github.com/yunyueye/MVMD) | ✔️ |
152
+ | [`VMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd2d/vmd2d.py) (Two-Dimensional Variational Mode Decomposition) | [[paper]](https://ww3.math.ucla.edu/camreport/cam14-16.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/45918-two-dimensional-variational-mode-decomposition?s_tid=srchtitle) | ✔️ |
153
+ | [`SVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/svmd.py) (Successive Variational Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168420301535) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/98649-successive-variational-mode-decomposition-svmd-m?s_tid=FX_rc3_behav) | ✖️ |
154
+ | [`VNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/vncmd.py) (Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/7990179) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/64292-variational-nonlinear-chirp-mode-decomposition) | ✔️ |
155
+ | [`MNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/mncmd.py) (Multivariate Nonlinear Chirp Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0165168420302103) | [[code]]() | ✖️ |
156
+ | [`AVNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/avncmd.py) (Adaptive Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/9746147) | [[code]](https://github.com/HauLiang/AVNCMD) | ✖️ |
157
+ | [`ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/acmd.py) (Adaptive Chirp Mode Decomposition) | [[paper]]() | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/121373-data-driven-adaptive-chirp-mode-decomposition?s_tid=srchtitle) | ✔️ |
158
+ | [`BA-ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/ba_acmd.py) (Bandwidth-aware adaptive chirp mode decomposition) | [[paper]](https://journals.sagepub.com/doi/abs/10.1177/14759217231174699) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/132792-bandwidth-aware-adaptive-chirp-mode-decomposition-ba-acmd?s_tid=srchtitle) | ✖️ |
159
+ | [`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) | ✖️ |
160
+ | [`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://ms-intl.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=FX_rc2_behav) | ✖️ |
161
+ | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✖️ |
162
+
163
+ ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
164
+
165
+ We would like to thank the researchers in signal processing for providing us with valuable algorithms and promoting the continuous progress in this field. However, since the main programming language used in `signal processing` is `Matlab`, and `Python` is the main battlefield of `machine learning` and `deep learning`, the usage of signal decomposition in machine learning and deep learning is far less extensive than `wavelet transformation`. In order to further promote the organic combination of signal decomposition and machine learning, we developed `PySDKit`. We would like to express our gratitude to [PyEMD](https://github.com/laszukdawid/PyEMD), [Sktime](https://www.sktime.net/en/latest/index.html), [vmdpy](https://github.com/vrcarva/vmdpy), [MEMD-Python-](https://github.com/mariogrune/MEMD-Python-), [ewtpy](https://github.com/vrcarva/ewtpy), [EWT-Python](https://github.com/bhurat/EWT-Python), [PyLMD](https://github.com/shownlin/PyLMD), [pywt](https://github.com/PyWavelets/pywt), [SP_Lib](https://github.com/hustcxl/SP_Lib)and [dsatools](https://github.com/MVRonkin/dsatools).
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.2
2
+ Name: PySDKit
3
+ Version: 0.4.12
4
+ Summary: A Python library for signal decomposition algorithms with a unified interface.
5
+ Home-page: https://github.com/wwhenxuan/PySDKit
6
+ Author: whenxuan
7
+ Author-email: wwhenxuan@gmail.com
8
+ Keywords: signal decomposition,signal processing,machine learning
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
12
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.6
16
+ Classifier: Programming Language :: Python :: 3.7
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Requires-Python: >=3.6
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: numpy<=1.26.4,>=1.24.3
23
+ Requires-Dist: scipy<=1.13.1,>=1.11.1
24
+ Requires-Dist: matplotlib<=3.8.4,>=3.7.2
25
+ Requires-Dist: tqdm>=4.66.5
26
+ Requires-Dist: requests>=2.32.3
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: keywords
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
37
+
38
+ # PySDKit: signal decomposition in Python
39
+
40
+ <div align="center">
41
+
42
+ [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
43
+ ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
44
+ [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
45
+ [![Downloads](https://pepy.tech/badge/pysdkit)](https://pepy.tech/project/pysdkit)
46
+ ![Visits Badge](https://badges.pufler.dev/visits/ForestsKing/D3R)
47
+ [![codestyle](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
48
+
49
+ A Python library for signal decomposition algorithms 🥳
50
+
51
+ [Installation](#Installation) |
52
+ [Example Script](#Example-Script) |
53
+ [Target](#Target) |
54
+ [Acknowledgements](#Acknowledgements)
55
+
56
+ <img src="https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/Logo_sd.png" alt="Logo_sd" width="500"/>
57
+
58
+ </div>
59
+
60
+ ## Installation 🚀 <a id="Installation"></a>
61
+
62
+ You can install `PySDKit` through pip:
63
+
64
+ ~~~
65
+ pip install pysdkit
66
+ ~~~
67
+
68
+ We only used [`NumPy`](https://numpy.org/), [`Scipy`](https://scipy.org/) and [`matplotlib`](https://matplotlib.org/) when developing the project.
69
+
70
+ ## Example Script ✨ <a id="Example-Script"></a>
71
+
72
+ This project integrates simple signal processing methods, signal decomposition and visualization, and builds a general interface similar to [`Scikit-learn`](https://scikit-learn.org/stable/). It is mainly divided into three steps:
73
+ 1. Import the signal decomposition method;
74
+ 2. Create an instance for signal decomposition;
75
+ 3. Use the `fit_transform` method to implement signal decomposition;
76
+ 4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
77
+
78
+ ~~~python
79
+ from pysdkit import EMD
80
+ from pysdkit.data import test_emd
81
+ from pysdkit.plot import plot_IMFs
82
+
83
+ t, signal = test_emd()
84
+
85
+ # create an instance for signal decomposition
86
+ emd = EMD()
87
+ # implement signal decomposition
88
+ IMFs = emd.fit_transform(signal, max_imfs=2)
89
+ plot_IMFs(signal, IMFs)
90
+ ~~~
91
+
92
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
93
+
94
+ 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)).
95
+
96
+ ~~~python
97
+ import numpy as np
98
+ from pysdkit import VMD
99
+
100
+ # load new signal
101
+ signal = np.load("./example/example.npy")
102
+
103
+ # use variational mode decomposition
104
+ vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
105
+ IMFs = vmd.fit_transform(signal=signal)
106
+ print(IMFs.shape)
107
+
108
+ vmd.plot_IMFs(save_figure=True)
109
+ ~~~
110
+
111
+ ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
112
+
113
+ Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
114
+
115
+ ~~~python
116
+ from pysdkit.plot import plot_IMFs_amplitude_spectra
117
+
118
+ # frequency domain visualization
119
+ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
120
+ ~~~
121
+
122
+ ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
123
+
124
+ ## Target 🎯 <a id="Target"></a>
125
+
126
+ `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 and VMD, 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.
127
+
128
+ | Algorithm | Paper | Code | State |
129
+ | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
130
+ | [`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) | ✔️ |
131
+ | [`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) | ✔️ |
132
+ | [`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) | ✖️ |
133
+ | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
134
+ | [`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) | ✔️ |
135
+ | [`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) | ✖️ |
136
+ | [`BMEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd2d/bmemd.py) (Bidimensional Multivariate Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8805082) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/72343-bidimensional-multivariate-empirical-mode-decomposition?s_tid=FX_rc1_behav) | ✖️ |
137
+ | [`CEEMDAN`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd/ceemdan.py) (Complete Ensemble EMD with Adaptive Noise) | [[paper]](https://ieeexplore.ieee.org/document/5947265) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
138
+ | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tvf_emd/tvf_emd.py) (Time Varying Filter Based EMD) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168417301135) | [[code]](https://github.com/stfbnc/pytvfemd/tree/master) | ✔️ |
139
+ | [`FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/faemd.py) (Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
140
+ | [`MV_FAEMD`]() (Multivariate Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
141
+ | [`MD_FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/md_faemd.py) (Multidimensional Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
142
+ | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/hvd/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) | ✔️ |
143
+ | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/itd/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) | ✔️ |
144
+ | [`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) | ✔️ |
145
+ | [`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) | ✖️ |
146
+ | [`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) | ✖️ |
147
+ | [`SSA`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ssa/ssa.py) (Singular Spectral Analysis) | [[paper]](https://orca.cardiff.ac.uk/id/eprint/15208/1/Zhiglavsky_SSA_encyclopedia.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/58967-singular-spectrum-analysis-beginners-guide) | ✔️ |
148
+ | [`EWT`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt.py) (Empirical Wavelet Transform) | [[paper]](https://ieeexplore.ieee.org/document/6522142) | [[code]](https://www.mathworks.com/help/wavelet/ug/empirical-wavelet-transform.html) | ✔️ |
149
+ | [`EWT2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt2d.py) (2D Empirical Wavelet Transform) | [[paper]](https://arxiv.org/abs/2405.06188) | [[code]](https://github.com/bhurat/EWT-Python) | ✖️ |
150
+ | [`VMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/vmd_c.py) (Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/6655981) | [[code]](https://github.com/vrcarva/vmdpy) | ✔️ |
151
+ | [`MVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/mvmd.py) (Multivariate Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8890883) | [[code]](https://github.com/yunyueye/MVMD) | ✔️ |
152
+ | [`VMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd2d/vmd2d.py) (Two-Dimensional Variational Mode Decomposition) | [[paper]](https://ww3.math.ucla.edu/camreport/cam14-16.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/45918-two-dimensional-variational-mode-decomposition?s_tid=srchtitle) | ✔️ |
153
+ | [`SVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/svmd.py) (Successive Variational Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168420301535) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/98649-successive-variational-mode-decomposition-svmd-m?s_tid=FX_rc3_behav) | ✖️ |
154
+ | [`VNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/vncmd.py) (Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/7990179) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/64292-variational-nonlinear-chirp-mode-decomposition) | ✔️ |
155
+ | [`MNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/mncmd.py) (Multivariate Nonlinear Chirp Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0165168420302103) | [[code]]() | ✖️ |
156
+ | [`AVNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/avncmd.py) (Adaptive Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/9746147) | [[code]](https://github.com/HauLiang/AVNCMD) | ✖️ |
157
+ | [`ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/acmd.py) (Adaptive Chirp Mode Decomposition) | [[paper]]() | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/121373-data-driven-adaptive-chirp-mode-decomposition?s_tid=srchtitle) | ✔️ |
158
+ | [`BA-ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/ba_acmd.py) (Bandwidth-aware adaptive chirp mode decomposition) | [[paper]](https://journals.sagepub.com/doi/abs/10.1177/14759217231174699) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/132792-bandwidth-aware-adaptive-chirp-mode-decomposition-ba-acmd?s_tid=srchtitle) | ✖️ |
159
+ | [`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) | ✖️ |
160
+ | [`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://ms-intl.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=FX_rc2_behav) | ✖️ |
161
+ | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✖️ |
162
+
163
+ ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
164
+
165
+ We would like to thank the researchers in signal processing for providing us with valuable algorithms and promoting the continuous progress in this field. However, since the main programming language used in `signal processing` is `Matlab`, and `Python` is the main battlefield of `machine learning` and `deep learning`, the usage of signal decomposition in machine learning and deep learning is far less extensive than `wavelet transformation`. In order to further promote the organic combination of signal decomposition and machine learning, we developed `PySDKit`. We would like to express our gratitude to [PyEMD](https://github.com/laszukdawid/PyEMD), [Sktime](https://www.sktime.net/en/latest/index.html), [vmdpy](https://github.com/vrcarva/vmdpy), [MEMD-Python-](https://github.com/mariogrune/MEMD-Python-), [ewtpy](https://github.com/vrcarva/ewtpy), [EWT-Python](https://github.com/bhurat/EWT-Python), [PyLMD](https://github.com/shownlin/PyLMD), [pywt](https://github.com/PyWavelets/pywt), [SP_Lib](https://github.com/hustcxl/SP_Lib)and [dsatools](https://github.com/MVRonkin/dsatools).
@@ -9,41 +9,65 @@ pysdkit/__init__.py
9
9
  pysdkit/data/__init__.py
10
10
  pysdkit/data/_add_noise.py
11
11
  pysdkit/data/_generator.py
12
- pysdkit/data/image.py
13
- pysdkit/emd/BEMD.py
14
- pysdkit/emd/EMD.py
12
+ pysdkit/data/_image.py
13
+ pysdkit/data/texture.txt
15
14
  pysdkit/emd/__init__.py
16
15
  pysdkit/emd/_find_extrema.py
17
16
  pysdkit/emd/_prepare_points.py
18
17
  pysdkit/emd/_splines.py
18
+ pysdkit/emd/ceemdan.py
19
+ pysdkit/emd/eemd.py
20
+ pysdkit/emd/emd.py
21
+ pysdkit/emd/memd.py
22
+ pysdkit/emd/remd.py
19
23
  pysdkit/emd2d/__init__.py
24
+ pysdkit/emd2d/bemd.py
25
+ pysdkit/emd2d/bmemd.py
26
+ pysdkit/emd2d/emd2d.py
27
+ pysdkit/esmd/__init__.py
28
+ pysdkit/esmd/esmd.py
20
29
  pysdkit/ewt/__init__.py
21
30
  pysdkit/ewt/ewt.py
31
+ pysdkit/ewt/ewt2d.py
22
32
  pysdkit/faemd/__init__.py
23
33
  pysdkit/faemd/faemd.py
24
34
  pysdkit/faemd/md_faemd.py
25
35
  pysdkit/faemd/mv_faemd.py
26
36
  pysdkit/fmd/__init__.py
27
37
  pysdkit/fmd/fmd.py
38
+ pysdkit/hht/__init__.py
39
+ pysdkit/hht/hht.py
40
+ pysdkit/hvd/__init__.py
41
+ pysdkit/hvd/hvd.py
28
42
  pysdkit/ifd/__init__.py
29
43
  pysdkit/itd/__init__.py
30
44
  pysdkit/itd/itd.py
45
+ pysdkit/jmd/__init__.py
46
+ pysdkit/jmd/jmd.py
47
+ pysdkit/jmd/mjmd.py
31
48
  pysdkit/lmd/__init__.py
32
49
  pysdkit/lmd/lmd.py
33
50
  pysdkit/lmd/rlmd.py
34
51
  pysdkit/plot/__init__.py
35
52
  pysdkit/plot/_fourier_spectra.py
36
53
  pysdkit/plot/_functions.py
54
+ pysdkit/plot/_plot_images.py
37
55
  pysdkit/plot/_plot_imfs.py
38
- pysdkit/plot/plot_GrayScale.py
56
+ pysdkit/ssa/__init__.py
57
+ pysdkit/ssa/ssa.py
39
58
  pysdkit/tvf_emd/__init__.py
40
59
  pysdkit/tvf_emd/tvf_emd.py
41
60
  pysdkit/utils/_Index_of_Orthogonality.py
42
61
  pysdkit/utils/__init__.py
62
+ pysdkit/utils/_diagnalization.py
43
63
  pysdkit/utils/_differ.py
44
64
  pysdkit/utils/_fft.py
45
65
  pysdkit/utils/_function.py
66
+ pysdkit/utils/_kernel_matrix.py
67
+ pysdkit/utils/_lags.py
46
68
  pysdkit/utils/_smooth1d.py
69
+ pysdkit/utils/_types.py
70
+ pysdkit/utils/correlation.py
47
71
  pysdkit/utils/hilbert.py
48
72
  pysdkit/utils/instantaneous.py
49
73
  pysdkit/utils/mirror.py
@@ -51,6 +75,7 @@ pysdkit/utils/process.py
51
75
  pysdkit/vmd/__init__.py
52
76
  pysdkit/vmd/acmd.py
53
77
  pysdkit/vmd/avmd.py
78
+ pysdkit/vmd/ba_acmd.py
54
79
  pysdkit/vmd/base.py
55
80
  pysdkit/vmd/mvmd.py
56
81
  pysdkit/vmd/svmd.py
@@ -59,4 +84,6 @@ pysdkit/vmd/vmd_f.py
59
84
  pysdkit/vmd2d/__init__.py
60
85
  pysdkit/vmd2d/vmd2d.py
61
86
  pysdkit/vncmd/__init__.py
87
+ pysdkit/vncmd/anvcmd.py
88
+ pysdkit/vncmd/mncmd.py
62
89
  pysdkit/vncmd/vncmd.py
@@ -1,3 +1,5 @@
1
1
  numpy<=1.26.4,>=1.24.3
2
2
  scipy<=1.13.1,>=1.11.1
3
3
  matplotlib<=3.8.4,>=3.7.2
4
+ tqdm>=4.66.5
5
+ requests>=2.32.3
@@ -0,0 +1,128 @@
1
+ # PySDKit: signal decomposition in Python
2
+
3
+ <div align="center">
4
+
5
+ [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
6
+ ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
7
+ [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
8
+ [![Downloads](https://pepy.tech/badge/pysdkit)](https://pepy.tech/project/pysdkit)
9
+ ![Visits Badge](https://badges.pufler.dev/visits/ForestsKing/D3R)
10
+ [![codestyle](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
11
+
12
+ A Python library for signal decomposition algorithms 🥳
13
+
14
+ [Installation](#Installation) |
15
+ [Example Script](#Example-Script) |
16
+ [Target](#Target) |
17
+ [Acknowledgements](#Acknowledgements)
18
+
19
+ <img src="https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/Logo_sd.png" alt="Logo_sd" width="500"/>
20
+
21
+ </div>
22
+
23
+ ## Installation 🚀 <a id="Installation"></a>
24
+
25
+ You can install `PySDKit` through pip:
26
+
27
+ ~~~
28
+ pip install pysdkit
29
+ ~~~
30
+
31
+ We only used [`NumPy`](https://numpy.org/), [`Scipy`](https://scipy.org/) and [`matplotlib`](https://matplotlib.org/) when developing the project.
32
+
33
+ ## Example Script ✨ <a id="Example-Script"></a>
34
+
35
+ This project integrates simple signal processing methods, signal decomposition and visualization, and builds a general interface similar to [`Scikit-learn`](https://scikit-learn.org/stable/). It is mainly divided into three steps:
36
+ 1. Import the signal decomposition method;
37
+ 2. Create an instance for signal decomposition;
38
+ 3. Use the `fit_transform` method to implement signal decomposition;
39
+ 4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
40
+
41
+ ~~~python
42
+ from pysdkit import EMD
43
+ from pysdkit.data import test_emd
44
+ from pysdkit.plot import plot_IMFs
45
+
46
+ t, signal = test_emd()
47
+
48
+ # create an instance for signal decomposition
49
+ emd = EMD()
50
+ # implement signal decomposition
51
+ IMFs = emd.fit_transform(signal, max_imfs=2)
52
+ plot_IMFs(signal, IMFs)
53
+ ~~~
54
+
55
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
56
+
57
+ 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)).
58
+
59
+ ~~~python
60
+ import numpy as np
61
+ from pysdkit import VMD
62
+
63
+ # load new signal
64
+ signal = np.load("./example/example.npy")
65
+
66
+ # use variational mode decomposition
67
+ vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
68
+ IMFs = vmd.fit_transform(signal=signal)
69
+ print(IMFs.shape)
70
+
71
+ vmd.plot_IMFs(save_figure=True)
72
+ ~~~
73
+
74
+ ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
75
+
76
+ Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
77
+
78
+ ~~~python
79
+ from pysdkit.plot import plot_IMFs_amplitude_spectra
80
+
81
+ # frequency domain visualization
82
+ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
83
+ ~~~
84
+
85
+ ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
86
+
87
+ ## Target 🎯 <a id="Target"></a>
88
+
89
+ `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 and VMD, 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.
90
+
91
+ | Algorithm | Paper | Code | State |
92
+ | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
93
+ | [`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) | ✔️ |
94
+ | [`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) | ✔️ |
95
+ | [`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) | ✖️ |
96
+ | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
97
+ | [`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) | ✔️ |
98
+ | [`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) | ✖️ |
99
+ | [`BMEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd2d/bmemd.py) (Bidimensional Multivariate Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8805082) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/72343-bidimensional-multivariate-empirical-mode-decomposition?s_tid=FX_rc1_behav) | ✖️ |
100
+ | [`CEEMDAN`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/emd/ceemdan.py) (Complete Ensemble EMD with Adaptive Noise) | [[paper]](https://ieeexplore.ieee.org/document/5947265) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
101
+ | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tvf_emd/tvf_emd.py) (Time Varying Filter Based EMD) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168417301135) | [[code]](https://github.com/stfbnc/pytvfemd/tree/master) | ✔️ |
102
+ | [`FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/faemd.py) (Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
103
+ | [`MV_FAEMD`]() (Multivariate Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
104
+ | [`MD_FAEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/faemd/md_faemd.py) (Multidimensional Fast and Adaptive EMD) | [[paper]](https://ieeexplore.ieee.org/document/8447300) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✖️ |
105
+ | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/hvd/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) | ✔️ |
106
+ | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/itd/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) | ✔️ |
107
+ | [`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) | ✔️ |
108
+ | [`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) | ✖️ |
109
+ | [`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) | ✖️ |
110
+ | [`SSA`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ssa/ssa.py) (Singular Spectral Analysis) | [[paper]](https://orca.cardiff.ac.uk/id/eprint/15208/1/Zhiglavsky_SSA_encyclopedia.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/58967-singular-spectrum-analysis-beginners-guide) | ✔️ |
111
+ | [`EWT`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt.py) (Empirical Wavelet Transform) | [[paper]](https://ieeexplore.ieee.org/document/6522142) | [[code]](https://www.mathworks.com/help/wavelet/ug/empirical-wavelet-transform.html) | ✔️ |
112
+ | [`EWT2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/ewt/ewt2d.py) (2D Empirical Wavelet Transform) | [[paper]](https://arxiv.org/abs/2405.06188) | [[code]](https://github.com/bhurat/EWT-Python) | ✖️ |
113
+ | [`VMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/vmd_c.py) (Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/6655981) | [[code]](https://github.com/vrcarva/vmdpy) | ✔️ |
114
+ | [`MVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/mvmd.py) (Multivariate Variational Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/8890883) | [[code]](https://github.com/yunyueye/MVMD) | ✔️ |
115
+ | [`VMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd2d/vmd2d.py) (Two-Dimensional Variational Mode Decomposition) | [[paper]](https://ww3.math.ucla.edu/camreport/cam14-16.pdf) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/45918-two-dimensional-variational-mode-decomposition?s_tid=srchtitle) | ✔️ |
116
+ | [`SVMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/svmd.py) (Successive Variational Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0165168420301535) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/98649-successive-variational-mode-decomposition-svmd-m?s_tid=FX_rc3_behav) | ✖️ |
117
+ | [`VNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/vncmd.py) (Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/7990179) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/64292-variational-nonlinear-chirp-mode-decomposition) | ✔️ |
118
+ | [`MNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/mncmd.py) (Multivariate Nonlinear Chirp Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0165168420302103) | [[code]]() | ✖️ |
119
+ | [`AVNCMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vncmd/avncmd.py) (Adaptive Variational Nonlinear Chirp Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/9746147) | [[code]](https://github.com/HauLiang/AVNCMD) | ✖️ |
120
+ | [`ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/acmd.py) (Adaptive Chirp Mode Decomposition) | [[paper]]() | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/121373-data-driven-adaptive-chirp-mode-decomposition?s_tid=srchtitle) | ✔️ |
121
+ | [`BA-ACMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/vmd/ba_acmd.py) (Bandwidth-aware adaptive chirp mode decomposition) | [[paper]](https://journals.sagepub.com/doi/abs/10.1177/14759217231174699) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/132792-bandwidth-aware-adaptive-chirp-mode-decomposition-ba-acmd?s_tid=srchtitle) | ✖️ |
122
+ | [`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) | ✖️ |
123
+ | [`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://ms-intl.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=FX_rc2_behav) | ✖️ |
124
+ | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✖️ |
125
+
126
+ ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
127
+
128
+ We would like to thank the researchers in signal processing for providing us with valuable algorithms and promoting the continuous progress in this field. However, since the main programming language used in `signal processing` is `Matlab`, and `Python` is the main battlefield of `machine learning` and `deep learning`, the usage of signal decomposition in machine learning and deep learning is far less extensive than `wavelet transformation`. In order to further promote the organic combination of signal decomposition and machine learning, we developed `PySDKit`. We would like to express our gratitude to [PyEMD](https://github.com/laszukdawid/PyEMD), [Sktime](https://www.sktime.net/en/latest/index.html), [vmdpy](https://github.com/vrcarva/vmdpy), [MEMD-Python-](https://github.com/mariogrune/MEMD-Python-), [ewtpy](https://github.com/vrcarva/ewtpy), [EWT-Python](https://github.com/bhurat/EWT-Python), [PyLMD](https://github.com/shownlin/PyLMD), [pywt](https://github.com/PyWavelets/pywt), [SP_Lib](https://github.com/hustcxl/SP_Lib)and [dsatools](https://github.com/MVRonkin/dsatools).