PySDKit 0.4.16__tar.gz → 0.4.17__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 (125) hide show
  1. {pysdkit-0.4.16 → pysdkit-0.4.17}/PKG-INFO +20 -8
  2. {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/PKG-INFO +20 -8
  3. {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/SOURCES.txt +4 -0
  4. pysdkit-0.4.17/PySDKit.egg-info/requires.txt +5 -0
  5. {pysdkit-0.4.16 → pysdkit-0.4.17}/README.md +5 -3
  6. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/__init__.py +21 -1
  7. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/__init__.py +2 -0
  8. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/ceemdan.py +3 -3
  9. pysdkit-0.4.17/pysdkit/_emd/efd.py +204 -0
  10. pysdkit-0.4.17/pysdkit/_fmd/nfmd.py +25 -0
  11. pysdkit-0.4.17/pysdkit/_osd/__init__.py +21 -0
  12. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/incmd.py +6 -3
  13. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/vncmd.py +6 -3
  14. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/hht/hht.py +2 -0
  15. pysdkit-0.4.17/pysdkit/tests/test_ceemdan.py +294 -0
  16. {pysdkit-0.4.16 → pysdkit-0.4.17}/setup.py +4 -4
  17. pysdkit-0.4.16/PySDKit.egg-info/requires.txt +0 -5
  18. {pysdkit-0.4.16 → pysdkit-0.4.17}/LICENSE +0 -0
  19. {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/dependency_links.txt +0 -0
  20. {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/top_level.txt +0 -0
  21. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_find_extrema.py +0 -0
  22. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_prepare_points.py +0 -0
  23. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_splines.py +0 -0
  24. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/eemd.py +0 -0
  25. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/emd.py +0 -0
  26. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/memd.py +0 -0
  27. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/remd.py +0 -0
  28. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/tvf_emd.py +0 -0
  29. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/__init__.py +0 -0
  30. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/bemd.py +0 -0
  31. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/bmemd.py +0 -0
  32. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/emd2d.py +0 -0
  33. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_esmd/__init__.py +0 -0
  34. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_esmd/esmd.py +0 -0
  35. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/__init__.py +0 -0
  36. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/ewt.py +0 -0
  37. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/ewt2d.py +0 -0
  38. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/__init__.py +0 -0
  39. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/extrema.py +0 -0
  40. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd.py +0 -0
  41. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd2d.py +0 -0
  42. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd3d.py +0 -0
  43. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/filter.py +0 -0
  44. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_fmd/__init__.py +0 -0
  45. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_fmd/fmd.py +0 -0
  46. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_hvd/__init__.py +0 -0
  47. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_hvd/hvd.py +0 -0
  48. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ifd/__init__.py +0 -0
  49. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_itd/__init__.py +0 -0
  50. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_itd/itd.py +0 -0
  51. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/__init__.py +0 -0
  52. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/jmd.py +0 -0
  53. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/mjmd.py +0 -0
  54. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/__init__.py +0 -0
  55. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/lmd.py +0 -0
  56. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/rlmd.py +0 -0
  57. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ssa/__init__.py +0 -0
  58. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ssa/ssa.py +0 -0
  59. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/__init__.py +0 -0
  60. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/acmd.py +0 -0
  61. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/avmd.py +0 -0
  62. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/ba_acmd.py +0 -0
  63. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/base.py +0 -0
  64. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/mvmd.py +0 -0
  65. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/svmd.py +0 -0
  66. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vmd_c.py +0 -0
  67. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vmd_f.py +0 -0
  68. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vme.py +0 -0
  69. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/__init__.py +0 -0
  70. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/cvmd2d.py +0 -0
  71. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/vmd2d.py +0 -0
  72. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/__init__.py +0 -0
  73. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/anvcmd.py +0 -0
  74. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/mncmd.py +0 -0
  75. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/__init__.py +0 -0
  76. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_add_noise.py +0 -0
  77. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_cube.py +0 -0
  78. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_generator.py +0 -0
  79. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_image.py +0 -0
  80. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_time_series.py +0 -0
  81. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/texture.txt +0 -0
  82. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/__init__.py +0 -0
  83. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_approxiamte_entropy.py +0 -0
  84. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_permutation_entropy.py +0 -0
  85. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_sample_entropy.py +0 -0
  86. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/hht/__init__.py +0 -0
  87. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/__init__.py +0 -0
  88. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_fourier_spectra.py +0 -0
  89. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_functions.py +0 -0
  90. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_images.py +0 -0
  91. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_imfs.py +0 -0
  92. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_signal.py +0 -0
  93. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/__init__.py +0 -0
  94. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_all.py +0 -0
  95. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_emd.py +0 -0
  96. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_ewt.py +0 -0
  97. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd.py +0 -0
  98. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd2d.py +0 -0
  99. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd3d.py +0 -0
  100. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_cube.py +0 -0
  101. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_image.py +0 -0
  102. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_signal.py +0 -0
  103. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_moving_decomp.py +0 -0
  104. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_vmd.py +0 -0
  105. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_vmd2d.py +0 -0
  106. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/__init__.py +0 -0
  107. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_dtw.py +0 -0
  108. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_knn.py +0 -0
  109. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_moving_decomp.py +0 -0
  110. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_mstl.py +0 -0
  111. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_stl.py +0 -0
  112. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/__init__.py +0 -0
  113. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_cite.py +0 -0
  114. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_correlation.py +0 -0
  115. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_diagnalization.py +0 -0
  116. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_differ.py +0 -0
  117. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_fft.py +0 -0
  118. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_function.py +0 -0
  119. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_hilbert.py +0 -0
  120. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_instantaneous.py +0 -0
  121. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_kernel_matrix.py +0 -0
  122. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_mirror.py +0 -0
  123. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_process.py +0 -0
  124. {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_smooth1d.py +0 -0
  125. {pysdkit-0.4.16 → pysdkit-0.4.17}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: PySDKit
3
- Version: 0.4.16
3
+ Version: 0.4.17
4
4
  Summary: A Python library for signal decomposition algorithms with a unified interface.
5
5
  Home-page: https://github.com/wwhenxuan/PySDKit
6
6
  Author: whenxuan
@@ -20,11 +20,21 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Requires-Python: >=3.6
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: numpy<=1.26.4,>=1.24.3
24
- Requires-Dist: scipy<=1.13.1,>=1.11.1
25
- Requires-Dist: matplotlib<=3.8.4,>=3.7.2
23
+ Requires-Dist: numpy>=1.24.3
24
+ Requires-Dist: scipy>=1.11.1
25
+ Requires-Dist: matplotlib>=3.7.2
26
26
  Requires-Dist: tqdm>=4.66.5
27
27
  Requires-Dist: requests>=2.32.3
28
+ Dynamic: author
29
+ Dynamic: author-email
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: description-content-type
33
+ Dynamic: home-page
34
+ Dynamic: keywords
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
28
38
 
29
39
  # PySDKit: signal decomposition in Python
30
40
 
@@ -123,10 +133,11 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
123
133
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
124
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) | ✔️ |
125
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) | ✔️ |
126
- | [`EMD2D`]() (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
136
+ | [`EMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/emd2d.py) (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
127
137
  | [`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) | ✖️ |
128
138
  | [`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) | ✔️ |
129
139
  | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_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) | ✔️ |
140
+ | [`EFD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/efd.py) (Empirical Fourier Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327021005355) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/97747-empirical-fourier-decomposition-efd) | ✔️ |
130
141
  | [`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) | ✔️ |
131
142
  | [`FAEMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd2d.py) (Two-Dimensional 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) | ✖️ |
132
143
  | [`FAEMD3D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd3d.py) (Three-Dimensional 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) | ✖️ |
@@ -135,7 +146,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
135
146
  | [`ALIF`]() (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56210-alif) | ✖️ |
136
147
  | [`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) | ✔️ |
137
148
  | [`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) | ✖️ |
138
- | [`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) | ✖️ |
149
+ | [`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) | ✖️ |
150
+ | [`NFMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/nfmd.py) (Non-stationary Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://github.com/sheadan/NFMD-ExtractionInstantaneous/blob/master/nfmd/NFMD.py) | ✖️ |
139
151
  | [`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) | ✔️ |
140
152
  | [`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) | ✔️ |
141
153
  | [`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) | ✖️ |
@@ -160,4 +172,4 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
160
172
 
161
173
  ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
162
174
 
163
- 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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).
175
+ 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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), [signal-decomposition](https://github.com/wwhenxuan/signal-decomposition).
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: PySDKit
3
- Version: 0.4.16
3
+ Version: 0.4.17
4
4
  Summary: A Python library for signal decomposition algorithms with a unified interface.
5
5
  Home-page: https://github.com/wwhenxuan/PySDKit
6
6
  Author: whenxuan
@@ -20,11 +20,21 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Requires-Python: >=3.6
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: numpy<=1.26.4,>=1.24.3
24
- Requires-Dist: scipy<=1.13.1,>=1.11.1
25
- Requires-Dist: matplotlib<=3.8.4,>=3.7.2
23
+ Requires-Dist: numpy>=1.24.3
24
+ Requires-Dist: scipy>=1.11.1
25
+ Requires-Dist: matplotlib>=3.7.2
26
26
  Requires-Dist: tqdm>=4.66.5
27
27
  Requires-Dist: requests>=2.32.3
28
+ Dynamic: author
29
+ Dynamic: author-email
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: description-content-type
33
+ Dynamic: home-page
34
+ Dynamic: keywords
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
28
38
 
29
39
  # PySDKit: signal decomposition in Python
30
40
 
@@ -123,10 +133,11 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
123
133
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
124
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) | ✔️ |
125
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) | ✔️ |
126
- | [`EMD2D`]() (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
136
+ | [`EMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/emd2d.py) (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
127
137
  | [`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) | ✖️ |
128
138
  | [`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) | ✔️ |
129
139
  | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_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) | ✔️ |
140
+ | [`EFD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/efd.py) (Empirical Fourier Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327021005355) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/97747-empirical-fourier-decomposition-efd) | ✔️ |
130
141
  | [`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) | ✔️ |
131
142
  | [`FAEMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd2d.py) (Two-Dimensional 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) | ✖️ |
132
143
  | [`FAEMD3D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd3d.py) (Three-Dimensional 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) | ✖️ |
@@ -135,7 +146,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
135
146
  | [`ALIF`]() (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56210-alif) | ✖️ |
136
147
  | [`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) | ✔️ |
137
148
  | [`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) | ✖️ |
138
- | [`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) | ✖️ |
149
+ | [`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) | ✖️ |
150
+ | [`NFMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/nfmd.py) (Non-stationary Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://github.com/sheadan/NFMD-ExtractionInstantaneous/blob/master/nfmd/NFMD.py) | ✖️ |
139
151
  | [`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) | ✔️ |
140
152
  | [`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) | ✔️ |
141
153
  | [`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) | ✖️ |
@@ -160,4 +172,4 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
160
172
 
161
173
  ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
162
174
 
163
- 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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).
175
+ 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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), [signal-decomposition](https://github.com/wwhenxuan/signal-decomposition).
@@ -13,6 +13,7 @@ pysdkit/_emd/_prepare_points.py
13
13
  pysdkit/_emd/_splines.py
14
14
  pysdkit/_emd/ceemdan.py
15
15
  pysdkit/_emd/eemd.py
16
+ pysdkit/_emd/efd.py
16
17
  pysdkit/_emd/emd.py
17
18
  pysdkit/_emd/memd.py
18
19
  pysdkit/_emd/remd.py
@@ -34,6 +35,7 @@ pysdkit/_faemd/faemd3d.py
34
35
  pysdkit/_faemd/filter.py
35
36
  pysdkit/_fmd/__init__.py
36
37
  pysdkit/_fmd/fmd.py
38
+ pysdkit/_fmd/nfmd.py
37
39
  pysdkit/_hvd/__init__.py
38
40
  pysdkit/_hvd/hvd.py
39
41
  pysdkit/_ifd/__init__.py
@@ -45,6 +47,7 @@ pysdkit/_jmd/mjmd.py
45
47
  pysdkit/_lmd/__init__.py
46
48
  pysdkit/_lmd/lmd.py
47
49
  pysdkit/_lmd/rlmd.py
50
+ pysdkit/_osd/__init__.py
48
51
  pysdkit/_ssa/__init__.py
49
52
  pysdkit/_ssa/ssa.py
50
53
  pysdkit/_vmd/__init__.py
@@ -86,6 +89,7 @@ pysdkit/plot/_plot_imfs.py
86
89
  pysdkit/plot/_plot_signal.py
87
90
  pysdkit/tests/__init__.py
88
91
  pysdkit/tests/test_all.py
92
+ pysdkit/tests/test_ceemdan.py
89
93
  pysdkit/tests/test_emd.py
90
94
  pysdkit/tests/test_ewt.py
91
95
  pysdkit/tests/test_faemd.py
@@ -0,0 +1,5 @@
1
+ numpy>=1.24.3
2
+ scipy>=1.11.1
3
+ matplotlib>=3.7.2
4
+ tqdm>=4.66.5
5
+ requests>=2.32.3
@@ -95,10 +95,11 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
95
95
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
96
96
  | [`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
97
  | [`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) | ✔️ |
98
- | [`EMD2D`]() (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
98
+ | [`EMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/emd2d.py) (Empirical Mode Decomposition 2D for images) | [[paper]](http://aquador.vovve.net/IEMD/) | [[code]](http://aquador.vovve.net/IEMD/) | ✔️ |
99
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
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
101
  | [`TVF_EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_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
+ | [`EFD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/efd.py) (Empirical Fourier Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327021005355) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/97747-empirical-fourier-decomposition-efd) | ✔️ |
102
103
  | [`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
104
  | [`FAEMD2D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd2d.py) (Two-Dimensional 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
105
  | [`FAEMD3D`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_faemd/faemd3d.py) (Three-Dimensional 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) | ✖️ |
@@ -107,7 +108,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
107
108
  | [`ALIF`]() (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56210-alif) | ✖️ |
108
109
  | [`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) | ✔️ |
109
110
  | [`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) | ✖️ |
110
- | [`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) | ✖️ |
111
+ | [`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) | ✖️ |
112
+ | [`NFMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/nfmd.py) (Non-stationary Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://github.com/sheadan/NFMD-ExtractionInstantaneous/blob/master/nfmd/NFMD.py) | ✖️ |
111
113
  | [`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) | ✔️ |
112
114
  | [`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) | ✔️ |
113
115
  | [`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) | ✖️ |
@@ -132,4 +134,4 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
132
134
 
133
135
  ## Acknowledgements 🎖️ <a id="Acknowledgements"></a>
134
136
 
135
- 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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).
137
+ 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), [Scikit-learn](https://scikit-learn.org/stable/), [Scikit-Image](https://scikit-image.org/docs/stable/), [statsmodels](https://www.statsmodels.org/stable/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), [signal-decomposition](https://github.com/wwhenxuan/signal-decomposition).
@@ -2,7 +2,7 @@
2
2
  A Python library for signal decomposition algorithms.
3
3
  """
4
4
 
5
- __version__ = "0.4.15"
5
+ __version__ = "0.4.16"
6
6
 
7
7
  __all__ = [
8
8
  "EMD",
@@ -11,6 +11,7 @@ __all__ = [
11
11
  "REMD",
12
12
  "MEMD",
13
13
  "TVF_EMD",
14
+ "EFD",
14
15
  "FAEMD",
15
16
  "EMD2D",
16
17
  "HVD",
@@ -57,6 +58,9 @@ from ._emd import MEMD
57
58
  # Time Varying Filter based Empirical Mode Decomposition
58
59
  from ._emd import TVF_EMD
59
60
 
61
+ # Empirical Fourier Decomposition
62
+ from ._emd import EFD
63
+
60
64
  # Fast and Adaptive Empirical Mode Decomposition
61
65
  from ._faemd import FAEMD
62
66
 
@@ -110,3 +114,19 @@ from ._jmd import JMD
110
114
 
111
115
  # Moving Average decomposition
112
116
  from .tsa import Moving_Decomp
117
+
118
+
119
+ def greet():
120
+ print(
121
+ """
122
+ ____ ____ ____ _ __ _ _
123
+ | _ \ _ _ / ___| | _ \ | |/ /(_)| |_
124
+ | |_) || | | |\___ \ | | | || ' / | || __|
125
+ | __/ | |_| | ___) || |_| || . \ | || |_
126
+ |_| \__, ||____/ |____/ |_|\_\|_| \__|
127
+ |___/
128
+
129
+ A Python library for signal decomposition algorithms.
130
+ https://github.com/wwhenxuan/PySDKit
131
+ """
132
+ )
@@ -21,3 +21,5 @@ from .remd import REMD
21
21
  from .memd import MEMD
22
22
 
23
23
  from .tvf_emd import TVF_EMD
24
+
25
+ from .efd import EFD
@@ -119,7 +119,7 @@ class CEEMDAN(object):
119
119
  self,
120
120
  signal: np.ndarray,
121
121
  time: Optional[np.ndarray] = None,
122
- max_imfs: Optional[int] = None,
122
+ max_imfs: Optional[int] = -1,
123
123
  progress: bool = False,
124
124
  ) -> np.ndarray:
125
125
  """allow instances to be called like functions"""
@@ -177,7 +177,7 @@ class CEEMDAN(object):
177
177
  self,
178
178
  signal: np.ndarray,
179
179
  time: Optional[np.ndarray] = None,
180
- max_imfs: Optional[int] = None,
180
+ max_imfs: Optional[int] = -1,
181
181
  progress: Optional[bool] = True,
182
182
  ) -> np.ndarray:
183
183
  """Perform the specified EEMD algorithm to obtain the corresponding signal decomposition results."""
@@ -328,7 +328,7 @@ class CEEMDAN(object):
328
328
  self,
329
329
  signal: np.ndarray,
330
330
  time: Optional[np.ndarray] = None,
331
- max_imfs: Optional[int] = None,
331
+ max_imfs: Optional[int] = -1,
332
332
  progress: bool = False,
333
333
  ) -> np.ndarray:
334
334
  """
@@ -0,0 +1,204 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on 2025/04/16 22:51:55
4
+ @author: Whenxuan Wang
5
+ @email: wwhenxuan@gmail.com
6
+ """
7
+ import numpy as np
8
+
9
+ from typing import Optional, Tuple
10
+
11
+ from pysdkit.utils import fft, ifft, fmirror
12
+
13
+
14
+ class EFD(object):
15
+ """
16
+ Empirical Fourier Decomposition
17
+
18
+ The proposed EFD combines the uses of an improved Fourier spectrum segmentation technique and an ideal filter bank.
19
+ The segmentation technique can solve the inconsistency problem by predefining the number of modes in a signal to be
20
+ decomposed and filter functions in the ideal filter bank have no transition phases, which can solve the mode mixing problem.
21
+ Numerical investigations are conducted to study the accuracy of the EFD. It is shown that the EFD can yield accurate
22
+ and consistent decomposition results for signals with multiple non-stationary modes and those with closely-spaced modes,
23
+ compared with decomposition results by the EWT, FDM, variational mode decomposition and empirical mode decomposition.
24
+
25
+ Wei Zhou, Zhongren Feng, Y.F. Xu, Xiongjiang Wang, Hao Lv,
26
+ Empirical Fourier decomposition: An accurate signal decomposition method for nonlinear and non-stationary time series analysis,
27
+ Mechanical Systems and Signal Processing,
28
+ Volume 163, 2022, 108155, ISSN 0888-3270, https://doi.org/10.1016/j.ymssp.2021.108155.
29
+ """
30
+
31
+ def __init__(self, max_imfs: Optional[int] = 3) -> None:
32
+ self.max_imfs = max_imfs
33
+
34
+ def __call__(
35
+ self, signal: np.ndarray, return_all: Optional[bool] = False
36
+ ) -> np.ndarray | Tuple[np.ndarray, float]:
37
+ """allow instances to be called like functions"""
38
+ return self.fit_transform(signal=signal, return_all=return_all)
39
+
40
+ def __str__(self) -> str:
41
+ """Get the full name and abbreviation of the algorithm"""
42
+ return "Empirical Fourier Decomposition (EFD)"
43
+
44
+ def fit_transform(
45
+ self, signal: np.ndarray, return_all: Optional[bool] = False
46
+ ) -> np.ndarray | Tuple[np.ndarray, float]:
47
+ """
48
+ Signal decomposition using EFD algorithm
49
+
50
+ :param signal: the time domain signal (1D numpy array) to be decomposed
51
+ :param return_all: whether to return all results (including vector containing the central frequency) or just the IMFs
52
+ :return: the decomposed results of IMFs
53
+ """
54
+ # Make sure the input signal length is an even number, otherwise the mirror expansion cannot be performed.
55
+ if len(signal) % 2 == 1:
56
+ signal = signal[:-1]
57
+
58
+ # We compute the Fourier transform of input signal
59
+ ff = fft(signal)
60
+
61
+ # We extract the boundaries of Fourier segments
62
+ bounds, cerf = segm_tec(
63
+ f=np.abs(ff[0 : int(np.round(len(ff) / 2))]), N=self.max_imfs
64
+ )
65
+
66
+ # We trun the boundaries to [0,pi]
67
+ bounds = bounds * np.pi / np.round(len(ff) / 2)
68
+
69
+ # Filtering
70
+ # We extend the signal by miroring to deal with the boundaries
71
+ x = fmirror(ts=signal, sym=len(signal) // 2)
72
+
73
+ # Half the record length is used to recover the original signal
74
+ T = len(x) // 2
75
+
76
+ # Perform fast Fourier transform on the image-extended signal
77
+ ff = fft(x)
78
+
79
+ # We obtain the boundaries in the extend f
80
+ bound2 = np.ceil(bounds * np.round(len(ff) / 2) / np.pi).astype(int)
81
+
82
+ # We get the core of filtering
83
+ number = len(bound2) - 1
84
+
85
+ # Record the basic results after decomposition
86
+ efd = np.zeros(shape=(number, len(ff)))
87
+
88
+ # Record the final results
89
+ imfs = np.zeros(shape=(number, len(signal)))
90
+
91
+ # The results are stored in the frequency domain
92
+ ft = np.zeros([number, len(ff)])
93
+
94
+ # We define an ideal functions and extract components
95
+ for k in range(0, number):
96
+ if bound2[k] == 0:
97
+ ft[k, 0 : bound2[k + 1]] = ff[0 : bound2[k + 1]]
98
+ ft[k, len(ff) + 2 - bound2[k + 1] : len(ff)] = ff[
99
+ len(ff) + 2 - bound2[k + 1] : len(ff)
100
+ ]
101
+ else:
102
+ ft[k, bound2[k] : bound2[k + 1]] = ff[bound2[k] : bound2[k + 1]]
103
+ ft[k, len(ff) + 2 - bound2[k + 1] : len(ff) + 2 - bound2[k]] = ff[
104
+ len(ff) + 2 - bound2[k + 1] : len(ff) + 2 - bound2[k]
105
+ ]
106
+
107
+ # Recover the original signal from the frequency domain
108
+ efd[k, :] = np.real(ifft(ft[k, :]))
109
+ imfs[k, :] = efd[k][T // 2 : 3 * T // 2]
110
+
111
+ if return_all is True:
112
+ return imfs, cerf
113
+ return imfs
114
+
115
+
116
+ def segm_tec(f: np.ndarray, N: Optional[int] = 3) -> Tuple[np.ndarray, float]:
117
+ """
118
+ This function is used to implement the improved segmentation technique.
119
+ function [boundaries,cerf] = Boundaries_Dect(ff,N)
120
+
121
+ :param f: the Fourier spectrum of input signal
122
+ :param N: maximum number of segments
123
+ :return: -cerf: vector containing the central frequency of each band,[0,pi]
124
+ -bound: vector containing the set of boundaries corresponding
125
+ to the Fourier line segmentation (normalized between 0 and Pi)
126
+ """
127
+ bounds, cerf = None, None
128
+
129
+ # detect the local maxima and minina
130
+ locmax = np.zeros(f.shape)
131
+ locmin = np.max(f) * np.ones(f.shape)
132
+
133
+ # Traverse the entire sequence to find local maxima and local minima
134
+ for i in range(1, len(f) - 1):
135
+ if f[i - 1] < f[i] and f[i] > f[i + 1]:
136
+ # Local maximum
137
+ locmax[i] = f[i]
138
+ if f[i - 1] > f[i] and f[i] < f[i + 1]:
139
+ # Local Minima
140
+ locmin[i] = f[i]
141
+
142
+ # Processing the final edge
143
+ locmax[0] = f[0]
144
+ locmax[-1] = f[-1]
145
+
146
+ # keep the N-th highest maxima and their index
147
+ if N != 0:
148
+ lmax = np.sort(locmax)[::-1] # Sort by column in descending order
149
+ Imax = np.argsort(locmax)[::-1] # Get the sorted index
150
+
151
+ if len(lmax) > N:
152
+ Imax = np.sort(Imax[0:N])
153
+ else:
154
+ Imax = np.sort(Imax)
155
+ N = len(lmax)
156
+
157
+ # detect the lowest minima between two consecutive maxima
158
+ M = N + 1 # numbers of the boundaries
159
+ omega = np.concatenate([np.array([0]), Imax, np.array([len(f)])]) # location
160
+ bounds = np.zeros(M)
161
+
162
+ for i in range(0, M):
163
+ if (i == 0 or i == M - 1) and omega[i] == omega[i + 1]:
164
+ bounds[i] = omega[i]
165
+ else:
166
+ # print(omega[i], omega[i + 1])
167
+ lmin = np.min(f[omega[i] : omega[i + 1]])
168
+ ind = np.argmin(f[omega[i] : omega[i + 1]])
169
+ bounds[i] = omega[i] + ind
170
+ cerf = Imax * np.pi / np.round(len(f))
171
+
172
+ return bounds, cerf
173
+
174
+
175
+ if __name__ == "__main__":
176
+ from pysdkit.plot import plot_IMFs
177
+ from matplotlib import pyplot as plt
178
+
179
+ T = 1
180
+ fs = 1000
181
+ t = np.arange(0, T + 1 / fs, 1 / fs)
182
+ f11 = 6 * t
183
+ f12 = 2 * np.cos(8 * np.pi * t)
184
+ f13 = np.cos(40 * np.pi * t)
185
+
186
+ s = f11 + f12 + f13
187
+
188
+ print("len(s)", s.shape)
189
+
190
+ efd = EFD(max_imfs=3)
191
+ imfs = efd.fit_transform(s)
192
+ plot_IMFs(s, imfs)
193
+ plt.show()
194
+
195
+ from pysdkit.data import test_emd
196
+
197
+ print("\n")
198
+
199
+ t, s = test_emd()
200
+ print("len(s)", s.shape)
201
+
202
+ imfs = efd.fit_transform(s)
203
+ plot_IMFs(s, imfs)
204
+ plt.show()
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on 2025/04/15 22:55:28
4
+ @author: Whenxuan Wang
5
+ @email: wwhenxuan@gmail.com
6
+ """
7
+ import numpy as np
8
+
9
+
10
+ class NFMD(object):
11
+ """
12
+ Non-stationary Fourier Mode Decomposition
13
+
14
+ As implemented in 'Extraction of instantaneous frequencies and amplitudes in nonstationary time-series data.'
15
+
16
+ """
17
+
18
+ def __init__(self, freq, amp):
19
+ pass
20
+
21
+ def __call__(self):
22
+ pass
23
+
24
+ def __str__(self):
25
+ pass
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on 2025/04/21 21:50:32
4
+ @author: Whenxuan Wang
5
+ @email: wwhenxuan@gmail.com
6
+
7
+ This part of the code comes from https://github.com/cvxgrp/signal-decomposition
8
+ OSD: Optimization(-based) Signal Decomposition
9
+
10
+ Modeling language for finding signal decompositions
11
+ This software provides a modeling language for describing and solving signal decomposition problems.
12
+ This framework is described in detail in an acompanying monograph, and examples are available in the notebooks directory.
13
+ New users are encouraged to try out our no-code, no-math introduction to signal decomposition, available here:
14
+ http://signal-decomp-tutorial.org/
15
+
16
+ We formulate the problem of decomposing a signal into components as an optimization problem, where components are
17
+ described by their loss functions. Once the component class loss functions are chosen, we minimize the total loss subject
18
+ to replicating the given signal with the components. Our software provides a robust algorithm for carying out this
19
+ decomposition, which is guaranteed to find the globally optimal descomposition when the loss functions are all convex,
20
+ and is a good heuristic when they are not.
21
+ """
@@ -6,7 +6,10 @@ Created on 2025/02/12 12:31:39
6
6
  """
7
7
  import numpy as np
8
8
  from scipy import linalg
9
- from scipy.integrate import cumtrapz
9
+ try:
10
+ from scipy.integrate import cumulative_trapezoid
11
+ except ImportError:
12
+ from scipy.integrate import cumtrapz as cumulative_trapezoid
10
13
  from scipy.sparse import spdiags, diags, identity, csc_matrix
11
14
  from scipy.signal import welch
12
15
  from scipy.sparse.linalg import inv as sparseinv
@@ -165,14 +168,14 @@ class INCMD(object):
165
168
  @staticmethod
166
169
  def _compute_new_phi_1(new_f: np.ndarray, time: np.ndarray) -> np.ndarray:
167
170
  """Compute new phi_1"""
168
- integrated_f = cumtrapz(new_f, time, initial=0)
171
+ integrated_f = cumulative_trapezoid(new_f, time, initial=0)
169
172
  phi_diag = np.cos(2 * np.pi * integrated_f)
170
173
  return diags(phi_diag)
171
174
 
172
175
  @staticmethod
173
176
  def _compute_new_phi_2(new_f: np.ndarray, time: np.ndarray) -> np.ndarray:
174
177
  """Compute new phi_2"""
175
- integrated_f = cumtrapz(new_f, time, initial=0)
178
+ integrated_f = cumulative_trapezoid(new_f, time, initial=0)
176
179
  phi_diag = np.sin(2 * np.pi * integrated_f)
177
180
  return diags(phi_diag)
178
181
 
@@ -9,7 +9,10 @@ MATLAB code source https://www.mathworks.com/matlabcentral/fileexchange/64292-va
9
9
  import numpy as np
10
10
  from numpy.linalg import solve, norm
11
11
  from scipy.sparse import diags, eye
12
- from scipy.integrate import cumtrapz
12
+ try:
13
+ from scipy.integrate import cumulative_trapezoid
14
+ except ImportError:
15
+ from scipy.integrate import cumtrapz as cumulative_trapezoid
13
16
  from typing import Tuple, Optional
14
17
  from pysdkit._vmd.base import Base
15
18
 
@@ -196,10 +199,10 @@ class VNCMD(Base):
196
199
  # Initialize the variables defined above through loops
197
200
  for i in range(K):
198
201
  sinm[i, :] = np.sin(
199
- 2 * np.pi * cumtrapz(eIF[i, :], t, initial=0), dtype=self.DTYPE
202
+ 2 * np.pi * cumulative_trapezoid(eIF[i, :], t, initial=0), dtype=self.DTYPE
200
203
  )
201
204
  cosm[i, :] = np.cos(
202
- 2 * np.pi * cumtrapz(eIF[i, :], t, initial=0), dtype=self.DTYPE
205
+ 2 * np.pi * cumulative_trapezoid(eIF[i, :], t, initial=0), dtype=self.DTYPE
203
206
  )
204
207
 
205
208
  Bm = diags(
@@ -6,6 +6,8 @@ Created on 2025/02/06 10:29:05
6
6
  """
7
7
  import numpy as np
8
8
 
9
+ from pysdkit.utils import hilbert_real, hilbert_imaginary, hilbert_transform
10
+
9
11
 
10
12
  def HHT():
11
13
  """对输入的信号进行希尔伯特-黄变换"""