PySDKit 0.4.43__tar.gz → 0.4.45__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. {pysdkit-0.4.43 → pysdkit-0.4.45}/PKG-INFO +38 -28
  2. {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/PKG-INFO +38 -28
  3. {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/SOURCES.txt +11 -4
  4. {pysdkit-0.4.43 → pysdkit-0.4.45}/README.md +37 -27
  5. {pysdkit-0.4.43 → pysdkit-0.4.45}/pyproject.toml +3 -0
  6. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/__init__.py +9 -5
  7. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/__init__.py +2 -0
  8. pysdkit-0.4.45/pysdkit/_fmd/__init__.py +8 -0
  9. pysdkit-0.4.45/pysdkit/_fmd/fmd.py +377 -0
  10. pysdkit-0.4.45/pysdkit/_imd/__init__.py +25 -0
  11. pysdkit-0.4.45/pysdkit/_imd/data/gearbox_fault_snippet.npy +0 -0
  12. pysdkit-0.4.45/pysdkit/_imd/data/input_sig.npy +0 -0
  13. pysdkit-0.4.45/pysdkit/_imd/imd.py +435 -0
  14. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/components.py +3 -1
  15. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/osd.py +9 -3
  16. pysdkit-0.4.45/pysdkit/_tid/hvd.py +188 -0
  17. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/vmd_c.py +116 -50
  18. pysdkit-0.4.45/pysdkit/_vmd/vmd_f.py +192 -0
  19. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/__init__.py +8 -0
  20. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_generator.py +48 -0
  21. pysdkit-0.4.45/pysdkit/data/fmd_demo.npy +0 -0
  22. pysdkit-0.4.45/pysdkit/data/vmd_example.npy +0 -0
  23. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/__init__.py +1 -1
  24. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_imfs.py +274 -15
  25. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_apmd.py +1 -1
  26. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_esmd.py +1 -1
  27. pysdkit-0.4.45/pysdkit/tests/test_fmd.py +246 -0
  28. pysdkit-0.4.45/pysdkit/tests/test_hvd.py +161 -0
  29. pysdkit-0.4.45/pysdkit/tests/test_imd.py +208 -0
  30. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vmd.py +26 -0
  31. pysdkit-0.4.43/pysdkit/_apmd/__init__.py +0 -6
  32. pysdkit-0.4.43/pysdkit/_esmd/__init__.py +0 -36
  33. pysdkit-0.4.43/pysdkit/_fmd/__init__.py +0 -6
  34. pysdkit-0.4.43/pysdkit/_fmd/fmd.py +0 -301
  35. pysdkit-0.4.43/pysdkit/_tid/hvd.py +0 -212
  36. pysdkit-0.4.43/pysdkit/_vmd/vmd_f.py +0 -156
  37. {pysdkit-0.4.43 → pysdkit-0.4.45}/LICENSE +0 -0
  38. {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/dependency_links.txt +0 -0
  39. {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/requires.txt +0 -0
  40. {pysdkit-0.4.43 → pysdkit-0.4.45}/PySDKit.egg-info/top_level.txt +0 -0
  41. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_find_extrema.py +0 -0
  42. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_prepare_points.py +0 -0
  43. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/_splines.py +0 -0
  44. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/ceemdan.py +0 -0
  45. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/eemd.py +0 -0
  46. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/efd.py +0 -0
  47. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/emd.py +0 -0
  48. {pysdkit-0.4.43/pysdkit/_esmd → pysdkit-0.4.45/pysdkit/_emd}/esmd.py +0 -0
  49. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/__init__.py +0 -0
  50. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/frequency.py +0 -0
  51. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/hht/hht.py +0 -0
  52. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/memd.py +0 -0
  53. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/remd.py +0 -0
  54. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/semd.py +0 -0
  55. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd/tvf_emd.py +0 -0
  56. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/__init__.py +0 -0
  57. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/bemd.py +0 -0
  58. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/bmemd.py +0 -0
  59. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_emd2d/emd2d.py +0 -0
  60. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/__init__.py +0 -0
  61. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/ewt.py +0 -0
  62. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_ewt/ewt2d.py +0 -0
  63. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/__init__.py +0 -0
  64. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/extrema.py +0 -0
  65. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd.py +0 -0
  66. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd2d.py +0 -0
  67. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/faemd3d.py +0 -0
  68. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_faemd/filter.py +0 -0
  69. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_fmd/nfmd.py +0 -0
  70. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/__init__.py +0 -0
  71. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/agncmd.py +0 -0
  72. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/gdmd.py +0 -0
  73. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/ivgnmd.py +0 -0
  74. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_gdmd/vgnmd.py +0 -0
  75. {pysdkit-0.4.43/pysdkit/_apmd → pysdkit-0.4.45/pysdkit/_imd}/apmd.py +0 -0
  76. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/__init__.py +0 -0
  77. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/jmd.py +0 -0
  78. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/mjmd.py +0 -0
  79. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_jmd/sjmd.py +0 -0
  80. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/__init__.py +0 -0
  81. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/lmd.py +0 -0
  82. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_lmd/rlmd.py +0 -0
  83. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/__init__.py +0 -0
  84. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_osd/swd.py +0 -0
  85. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/__init__.py +0 -0
  86. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/alif.py +0 -0
  87. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/data/__init__.py +0 -0
  88. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/data/prefixed_double_filter.npy +0 -0
  89. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/itd.py +0 -0
  90. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/iterative_filtering.py +0 -0
  91. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_tid/ssa.py +0 -0
  92. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/__init__.py +0 -0
  93. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/acmd.py +0 -0
  94. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/avmd.py +0 -0
  95. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/ba_acmd.py +0 -0
  96. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/base.py +0 -0
  97. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/mvmd.py +0 -0
  98. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/ovmd.py +0 -0
  99. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/stvmd.py +0 -0
  100. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/svmd.py +0 -0
  101. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd/vme.py +0 -0
  102. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/__init__.py +0 -0
  103. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/cvmd2d.py +0 -0
  104. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vmd2d/vmd2d.py +0 -0
  105. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/__init__.py +0 -0
  106. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/avncmd.py +0 -0
  107. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/incmd.py +0 -0
  108. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/_vncmd/vncmd.py +0 -0
  109. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_add_noise.py +0 -0
  110. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_cube.py +0 -0
  111. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_image.py +0 -0
  112. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_models.py +0 -0
  113. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_test_univariate.py +0 -0
  114. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/_time_series.py +0 -0
  115. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/data/texture.txt +0 -0
  116. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/__init__.py +0 -0
  117. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_approxiamte_entropy.py +0 -0
  118. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_permutation_entropy.py +0 -0
  119. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/entropy/_sample_entropy.py +0 -0
  120. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/__init__.py +0 -0
  121. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_base.py +0 -0
  122. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_kmeans.py +0 -0
  123. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_knn.py +0 -0
  124. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/models/_pca.py +0 -0
  125. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_fourier_spectra.py +0 -0
  126. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_functions.py +0 -0
  127. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_images.py +0 -0
  128. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/plot/_plot_signal.py +0 -0
  129. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/__init__.py +0 -0
  130. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/__init__.py +0 -0
  131. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_cube.py +0 -0
  132. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_image.py +0 -0
  133. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_signal.py +0 -0
  134. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/data/test_generator_univariate_signal.py +0 -0
  135. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/__init__.py +0 -0
  136. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/test_knn.py +0 -0
  137. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/models/test_pca.py +0 -0
  138. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/run_all.py +0 -0
  139. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_agncmd.py +0 -0
  140. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_alif.py +0 -0
  141. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_avncmd.py +0 -0
  142. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_bmemd.py +0 -0
  143. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ceemdan.py +0 -0
  144. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_cvmd2d.py +0 -0
  145. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_eemd.py +0 -0
  146. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_emd.py +0 -0
  147. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ewt.py +0 -0
  148. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ewt2d.py +0 -0
  149. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd.py +0 -0
  150. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd2d.py +0 -0
  151. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_faemd3d.py +0 -0
  152. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_gdmd.py +0 -0
  153. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_itd.py +0 -0
  154. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ivgnmd.py +0 -0
  155. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_jmd.py +0 -0
  156. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_lmd.py +0 -0
  157. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_moving_decomp.py +0 -0
  158. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_mstl.py +0 -0
  159. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_osd.py +0 -0
  160. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ovmd.py +0 -0
  161. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_rlmd.py +0 -0
  162. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_semd.py +0 -0
  163. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_sjmd.py +0 -0
  164. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_ssa.py +0 -0
  165. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_stl.py +0 -0
  166. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_stvmd.py +0 -0
  167. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_svmd.py +0 -0
  168. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_swd.py +0 -0
  169. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vgnmd.py +0 -0
  170. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vmd2d.py +0 -0
  171. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tests/test_vncmd.py +0 -0
  172. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/__init__.py +0 -0
  173. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_dtw.py +0 -0
  174. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_moving_decomp.py +0 -0
  175. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_mstl.py +0 -0
  176. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/tsa/_stl.py +0 -0
  177. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/__init__.py +0 -0
  178. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_correlation.py +0 -0
  179. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_diagnalization.py +0 -0
  180. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_differ.py +0 -0
  181. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_fft.py +0 -0
  182. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_function.py +0 -0
  183. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_hilbert.py +0 -0
  184. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_instantaneous.py +0 -0
  185. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_kernel_matrix.py +0 -0
  186. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_mirror.py +0 -0
  187. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_process.py +0 -0
  188. {pysdkit-0.4.43 → pysdkit-0.4.45}/pysdkit/utils/_smooth1d.py +0 -0
  189. {pysdkit-0.4.43 → pysdkit-0.4.45}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySDKit
3
- Version: 0.4.43
3
+ Version: 0.4.45
4
4
  Summary: A Python library for signal decomposition algorithms with a unified interface.
5
5
  Author: Whenxuan Wang, RuiZhe Wang, Rongkun Zhu, Kai Wu, Lei Wang, josefinez, Deeksha Manjunath, Yuan Feng, WenTong Zhao, JacktheFowler
6
6
  Maintainer-email: Whenxuan Wang <wwhenxuan@gmail.com>, RuiZhe Wang <3133986068@qq.com>
@@ -51,10 +51,10 @@ Requires-Dist: tqdm>=4.66.5
51
51
  Requires-Dist: requests>=2.32.3
52
52
  Dynamic: license-file
53
53
 
54
- # PySDKit: signal decomposition in Python
55
-
56
54
  <div align="center">
57
55
 
56
+ # PySDKit: signal decomposition in Python
57
+
58
58
  [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
59
59
  ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
60
60
  [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
@@ -91,60 +91,69 @@ This project integrates simple signal processing methods, signal decomposition a
91
91
  4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
92
92
 
93
93
  ~~~python
94
+ import numpy as np
94
95
  from pysdkit import EMD
95
- from pysdkit.data import test_emd
96
96
  from pysdkit.plot import plot_IMFs
97
97
 
98
- t, signal = test_emd()
98
+ t = np.linspace(0, 1, 1000)
99
+ signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
99
100
 
100
- # create an instance for signal decomposition
101
101
  emd = EMD()
102
- # implement signal decomposition
103
- IMFs = emd.fit_transform(signal, max_imfs=2)
104
- plot_IMFs(signal, IMFs)
102
+ IMFs = emd.fit_transform(signal, max_imfs=3)
103
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
105
104
  ~~~
106
105
 
107
- ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
106
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/decomposition_demo.jpg)
108
107
 
109
108
  The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
110
109
 
111
110
  ~~~python
112
- import numpy as np
113
111
  from pysdkit import VMD
112
+ from pysdkit.data import test_vmd
113
+ from pysdkit.plot import plot_IMFs
114
114
 
115
- # load new signal
116
- signal = np.load("./example/example.npy")
117
-
118
- # use variational mode decomposition
119
- vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
120
- IMFs = vmd.fit_transform(signal=signal)
121
- print(IMFs.shape)
115
+ t, signal, fs = test_vmd()
122
116
 
123
- vmd.plot_IMFs(save_figure=True)
117
+ vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
118
+ IMFs = vmd.fit_transform(signal)
119
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
124
120
  ~~~
125
121
 
126
122
  ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
127
123
 
128
- Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
124
+ For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
129
125
 
130
126
  ~~~python
131
- from pysdkit.plot import plot_IMFs_amplitude_spectra
127
+ import numpy as np
128
+ from pysdkit import MVMD
129
+ from pysdkit.plot import plot_IMFs
132
130
 
133
- # frequency domain visualization
134
- plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
131
+ t = np.arange(0, 1, 0.001)
132
+ # ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
133
+ signal = np.vstack([
134
+ np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
135
+ np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
136
+ np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
137
+ ])
138
+
139
+ mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
140
+ IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
141
+ plot_IMFs(signal, IMFs) # per-channel panels
135
142
  ~~~
136
143
 
137
- ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
144
+ ![mvmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/mvmd_example.jpg)
138
145
 
139
146
  ## Target 🎯 <a id="Target"></a>
140
147
 
141
148
  `PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
142
149
 
150
+
151
+
143
152
  | Algorithm | Paper | Source | State |
144
153
  | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
145
154
  | [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
146
155
  | [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
147
- | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✖️ |
156
+ | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
148
157
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
149
158
  | [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
150
159
  | [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
@@ -159,7 +168,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
159
168
  | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
160
169
  | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
161
170
  | [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
162
- | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) | ✔️ |
171
+ | [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
172
+ | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
163
173
  | [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
164
174
  | [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
165
175
  | [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
@@ -188,10 +198,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
188
198
  | [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
189
199
  | [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
190
200
  | [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
191
- | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
201
+ | [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
192
202
  | [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
193
203
  | [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
194
- | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
204
+ | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
195
205
  | [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
196
206
  | [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
197
207
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySDKit
3
- Version: 0.4.43
3
+ Version: 0.4.45
4
4
  Summary: A Python library for signal decomposition algorithms with a unified interface.
5
5
  Author: Whenxuan Wang, RuiZhe Wang, Rongkun Zhu, Kai Wu, Lei Wang, josefinez, Deeksha Manjunath, Yuan Feng, WenTong Zhao, JacktheFowler
6
6
  Maintainer-email: Whenxuan Wang <wwhenxuan@gmail.com>, RuiZhe Wang <3133986068@qq.com>
@@ -51,10 +51,10 @@ Requires-Dist: tqdm>=4.66.5
51
51
  Requires-Dist: requests>=2.32.3
52
52
  Dynamic: license-file
53
53
 
54
- # PySDKit: signal decomposition in Python
55
-
56
54
  <div align="center">
57
55
 
56
+ # PySDKit: signal decomposition in Python
57
+
58
58
  [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
59
59
  ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
60
60
  [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
@@ -91,60 +91,69 @@ This project integrates simple signal processing methods, signal decomposition a
91
91
  4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
92
92
 
93
93
  ~~~python
94
+ import numpy as np
94
95
  from pysdkit import EMD
95
- from pysdkit.data import test_emd
96
96
  from pysdkit.plot import plot_IMFs
97
97
 
98
- t, signal = test_emd()
98
+ t = np.linspace(0, 1, 1000)
99
+ signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
99
100
 
100
- # create an instance for signal decomposition
101
101
  emd = EMD()
102
- # implement signal decomposition
103
- IMFs = emd.fit_transform(signal, max_imfs=2)
104
- plot_IMFs(signal, IMFs)
102
+ IMFs = emd.fit_transform(signal, max_imfs=3)
103
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
105
104
  ~~~
106
105
 
107
- ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
106
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/decomposition_demo.jpg)
108
107
 
109
108
  The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
110
109
 
111
110
  ~~~python
112
- import numpy as np
113
111
  from pysdkit import VMD
112
+ from pysdkit.data import test_vmd
113
+ from pysdkit.plot import plot_IMFs
114
114
 
115
- # load new signal
116
- signal = np.load("./example/example.npy")
117
-
118
- # use variational mode decomposition
119
- vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
120
- IMFs = vmd.fit_transform(signal=signal)
121
- print(IMFs.shape)
115
+ t, signal, fs = test_vmd()
122
116
 
123
- vmd.plot_IMFs(save_figure=True)
117
+ vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
118
+ IMFs = vmd.fit_transform(signal)
119
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
124
120
  ~~~
125
121
 
126
122
  ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
127
123
 
128
- Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
124
+ For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
129
125
 
130
126
  ~~~python
131
- from pysdkit.plot import plot_IMFs_amplitude_spectra
127
+ import numpy as np
128
+ from pysdkit import MVMD
129
+ from pysdkit.plot import plot_IMFs
132
130
 
133
- # frequency domain visualization
134
- plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
131
+ t = np.arange(0, 1, 0.001)
132
+ # ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
133
+ signal = np.vstack([
134
+ np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
135
+ np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
136
+ np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
137
+ ])
138
+
139
+ mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
140
+ IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
141
+ plot_IMFs(signal, IMFs) # per-channel panels
135
142
  ~~~
136
143
 
137
- ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
144
+ ![mvmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/mvmd_example.jpg)
138
145
 
139
146
  ## Target 🎯 <a id="Target"></a>
140
147
 
141
148
  `PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
142
149
 
150
+
151
+
143
152
  | Algorithm | Paper | Source | State |
144
153
  | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
145
154
  | [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
146
155
  | [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
147
- | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✖️ |
156
+ | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
148
157
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
149
158
  | [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
150
159
  | [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
@@ -159,7 +168,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
159
168
  | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
160
169
  | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
161
170
  | [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
162
- | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) | ✔️ |
171
+ | [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
172
+ | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
163
173
  | [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
164
174
  | [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
165
175
  | [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
@@ -188,10 +198,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
188
198
  | [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
189
199
  | [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
190
200
  | [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
191
- | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
201
+ | [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
192
202
  | [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
193
203
  | [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
194
- | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
204
+ | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
195
205
  | [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
196
206
  | [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
197
207
 
@@ -7,8 +7,6 @@ PySDKit.egg-info/dependency_links.txt
7
7
  PySDKit.egg-info/requires.txt
8
8
  PySDKit.egg-info/top_level.txt
9
9
  pysdkit/__init__.py
10
- pysdkit/_apmd/__init__.py
11
- pysdkit/_apmd/apmd.py
12
10
  pysdkit/_emd/__init__.py
13
11
  pysdkit/_emd/_find_extrema.py
14
12
  pysdkit/_emd/_prepare_points.py
@@ -17,6 +15,7 @@ pysdkit/_emd/ceemdan.py
17
15
  pysdkit/_emd/eemd.py
18
16
  pysdkit/_emd/efd.py
19
17
  pysdkit/_emd/emd.py
18
+ pysdkit/_emd/esmd.py
20
19
  pysdkit/_emd/memd.py
21
20
  pysdkit/_emd/remd.py
22
21
  pysdkit/_emd/semd.py
@@ -28,8 +27,6 @@ pysdkit/_emd2d/__init__.py
28
27
  pysdkit/_emd2d/bemd.py
29
28
  pysdkit/_emd2d/bmemd.py
30
29
  pysdkit/_emd2d/emd2d.py
31
- pysdkit/_esmd/__init__.py
32
- pysdkit/_esmd/esmd.py
33
30
  pysdkit/_ewt/__init__.py
34
31
  pysdkit/_ewt/ewt.py
35
32
  pysdkit/_ewt/ewt2d.py
@@ -47,6 +44,11 @@ pysdkit/_gdmd/agncmd.py
47
44
  pysdkit/_gdmd/gdmd.py
48
45
  pysdkit/_gdmd/ivgnmd.py
49
46
  pysdkit/_gdmd/vgnmd.py
47
+ pysdkit/_imd/__init__.py
48
+ pysdkit/_imd/apmd.py
49
+ pysdkit/_imd/imd.py
50
+ pysdkit/_imd/data/gearbox_fault_snippet.npy
51
+ pysdkit/_imd/data/input_sig.npy
50
52
  pysdkit/_jmd/__init__.py
51
53
  pysdkit/_jmd/jmd.py
52
54
  pysdkit/_jmd/mjmd.py
@@ -93,7 +95,9 @@ pysdkit/data/_image.py
93
95
  pysdkit/data/_models.py
94
96
  pysdkit/data/_test_univariate.py
95
97
  pysdkit/data/_time_series.py
98
+ pysdkit/data/fmd_demo.npy
96
99
  pysdkit/data/texture.txt
100
+ pysdkit/data/vmd_example.npy
97
101
  pysdkit/entropy/__init__.py
98
102
  pysdkit/entropy/_approxiamte_entropy.py
99
103
  pysdkit/entropy/_permutation_entropy.py
@@ -126,7 +130,10 @@ pysdkit/tests/test_ewt2d.py
126
130
  pysdkit/tests/test_faemd.py
127
131
  pysdkit/tests/test_faemd2d.py
128
132
  pysdkit/tests/test_faemd3d.py
133
+ pysdkit/tests/test_fmd.py
129
134
  pysdkit/tests/test_gdmd.py
135
+ pysdkit/tests/test_hvd.py
136
+ pysdkit/tests/test_imd.py
130
137
  pysdkit/tests/test_itd.py
131
138
  pysdkit/tests/test_ivgnmd.py
132
139
  pysdkit/tests/test_jmd.py
@@ -1,7 +1,7 @@
1
- # PySDKit: signal decomposition in Python
2
-
3
1
  <div align="center">
4
2
 
3
+ # PySDKit: signal decomposition in Python
4
+
5
5
  [![PyPI version](https://badge.fury.io/py/PySDKit.svg)](https://pypi.org/project/PySDKit/)
6
6
  ![License](https://img.shields.io/github/license/wwhenxuan/PySDKit)
7
7
  [![Python](https://img.shields.io/badge/python-3.8+-blue?logo=python)](https://www.python.org/)
@@ -38,60 +38,69 @@ This project integrates simple signal processing methods, signal decomposition a
38
38
  4. Visualize and analyze the original signal and the intrinsic mode functions IMFs obtained by decomposition.
39
39
 
40
40
  ~~~python
41
+ import numpy as np
41
42
  from pysdkit import EMD
42
- from pysdkit.data import test_emd
43
43
  from pysdkit.plot import plot_IMFs
44
44
 
45
- t, signal = test_emd()
45
+ t = np.linspace(0, 1, 1000)
46
+ signal = np.sin(2 * np.pi * 5 * t) + 0.7 * np.sin(2 * np.pi * 25 * t) + 0.45 * np.sin(2 * np.pi * 80 * t)
46
47
 
47
- # create an instance for signal decomposition
48
48
  emd = EMD()
49
- # implement signal decomposition
50
- IMFs = emd.fit_transform(signal, max_imfs=2)
51
- plot_IMFs(signal, IMFs)
49
+ IMFs = emd.fit_transform(signal, max_imfs=3)
50
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=1000, freq_max=150)
52
51
  ~~~
53
52
 
54
- ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/example.jpg)
53
+ ![example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/decomposition_demo.jpg)
55
54
 
56
55
  The EMD in the above example is the most classic [`empirical mode decomposition`](https://www.mathworks.com/help/signal/ref/emd.html) algorithm in signal decomposition. For more complex signals, you can try other algorithms such as variational mode decomposition ([`VMD`](https://ieeexplore.ieee.org/abstract/document/6655981)).
57
56
 
58
57
  ~~~python
59
- import numpy as np
60
58
  from pysdkit import VMD
59
+ from pysdkit.data import test_vmd
60
+ from pysdkit.plot import plot_IMFs
61
61
 
62
- # load new signal
63
- signal = np.load("./example/example.npy")
64
-
65
- # use variational mode decomposition
66
- vmd = VMD(alpha=500, K=3, tau=0.0, tol=1e-9)
67
- IMFs = vmd.fit_transform(signal=signal)
68
- print(IMFs.shape)
62
+ t, signal, fs = test_vmd()
69
63
 
70
- vmd.plot_IMFs(save_figure=True)
64
+ vmd = VMD(alpha=2000, K=4, tau=0.0, tol=1e-7)
65
+ IMFs = vmd.fit_transform(signal)
66
+ plot_IMFs(signal, IMFs, view="2d_freq", fs=fs, freq_max=fs / 2)
71
67
  ~~~
72
68
 
73
69
  ![vmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/vmd_example.jpg)
74
70
 
75
- Better observe the characteristics of the decomposed intrinsic mode function in the frequency domain.
71
+ For multichannel recordings, algorithms such as multivariate VMD ([`MVMD`](https://doi.org/10.1109/TSP.2019.2951223)) keep shared oscillations **mode-aligned** across channels:
76
72
 
77
73
  ~~~python
78
- from pysdkit.plot import plot_IMFs_amplitude_spectra
74
+ import numpy as np
75
+ from pysdkit import MVMD
76
+ from pysdkit.plot import plot_IMFs
79
77
 
80
- # frequency domain visualization
81
- plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
78
+ t = np.arange(0, 1, 0.001)
79
+ # ch1: 2+36 Hz, ch2: 24+36 Hz, ch3: 80+36 Hz (36 Hz shared)
80
+ signal = np.vstack([
81
+ np.cos(2*np.pi*2*t) + np.cos(2*np.pi*36*t),
82
+ np.cos(2*np.pi*24*t) + np.cos(2*np.pi*36*t),
83
+ np.cos(2*np.pi*80*t) + np.cos(2*np.pi*36*t),
84
+ ])
85
+
86
+ mvmd = MVMD(alpha=2000, K=4, tau=0.0, init="uniform")
87
+ IMFs = mvmd.fit_transform(signal) # shape: (K, T, C)
88
+ plot_IMFs(signal, IMFs) # per-channel panels
82
89
  ~~~
83
90
 
84
- ![frequency_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/frequency_example.jpg)
91
+ ![mvmd_example](https://raw.githubusercontent.com/wwhenxuan/PySDKit/main/images/mvmd_example.jpg)
85
92
 
86
93
  ## Target 🎯 <a id="Target"></a>
87
94
 
88
95
  `PySDKit` is still under development. We are currently working on reproducing the signal decomposition algorithms in the table below, including not only common decomposition algorithms for `univariate signals` such as EMD, VMD, OVMD, AVNCMD, ALIF and APMD, but also decomposition algorithms for `multivariate signals` such as MEMD and MVMD. We will also further reproduce the decomposition algorithms for `two-dimensional images` to make PySDKit not only suitable for signal processing, but also for image analysis and understanding. See [`Mission`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/README.md) for the reasons why we developed PySDKit.
89
96
 
97
+
98
+
90
99
  | Algorithm | Paper | Source | State |
91
100
  | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :---: |
92
101
  | [`EMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/emd.py) (Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/abs/10.1098/rspa.1998.0193) | [[code]](https://www.mathworks.com/help/signal/ref/emd.html) | ✔️ |
93
102
  | [`MEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/memd.py) (Multivariate Empirical Mode Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/full/10.1098/rspa.2009.0502) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/71270-fast-and-adaptive-multivariate-and-multidimensional-emd) | ✔️ |
94
- | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✖️ |
103
+ | [`BEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd2d/bemd.py) (Bidimensional Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0262885603000945) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/BEMD.py) | ✔️ |
95
104
  | [`CEMD`]() (Complex Empirical Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/abstract/document/4063369) | [[code]]() | ✖️ |
96
105
  | [`EEMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/eemd.py) (Ensemble Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/topics/physics-and-astronomy/ensemble-empirical-mode-decomposition) | [[code]](https://github.com/laszukdawid/PyEMD/blob/master/PyEMD/EEMD.py) | ✔️ |
97
106
  | [`REMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/remd.py) (Robust Empirical Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0019057821003785) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/70032-robust-empirical-mode-decomposition-remd) | ✔️ |
@@ -106,7 +115,8 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
106
115
  | [`HVD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/hvd.py) (Hilbert Vibration Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X06001556) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/178804-hilbert-vibration-decomposition?s_tid=FX_rc1_behav) | ✔️ |
107
116
  | [`ITD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/itd.py) (Intrinsic Time-Scale Decomposition) | [[paper]](https://royalsocietypublishing.org/doi/10.1098/rspa.2006.1761) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/69380-intrinsic-time-scale-decomposition-itd) | ✔️ |
108
117
  | [`ALIF`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_tid/alif.py) (Adaptive Local Iterative Filtering) | [[paper]](https://arxiv.org/abs/1411.6051) | [[code]](https://github.com/Cicone/ALIF) | ✔️ |
109
- | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_apmd/apmd.py) | ✔️ |
118
+ | [`IMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/imd.py) (Impulsive Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0888327024001250) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/182635-impulsive-mode-decomposition?s_tid=FX_rc3_behav) | ✔️ |
119
+ | [`APMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) (Adaptive Polymorphic Mode Decomposition) | [[paper]](https://doi.org/10.1016/j.dsp.2024.104913) | [[code]](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_imd/apmd.py) | ✔️ |
110
120
  | [`LMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/lmd.py) (Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S1051200418308133?via%3Dihub) | [[code]](https://github.com/shownlin/PyLMD/blob/master/PyLMD/LMD.py) | ✔️ |
111
121
  | [`RLMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_lmd/rlmd.py) (Robust Local Mean Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/abs/pii/S0888327017301619) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/66935-robust-local-mean-decomposition-rlmd) | ✔️ |
112
122
  | [`FMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_fmd/fmd.py) (Feature Mode Decomposition) | [[paper]](https://ieeexplore.ieee.org/document/9732251) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/108099-feature-mode-decomposition-fmd) | ✔️ |
@@ -135,10 +145,10 @@ plot_IMFs_amplitude_spectra(IMFs, smooth="exp") # use exp smooth
135
145
  | [`JMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/jmd.py) (Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169388-jump-plus-am-fm-mode-decomposition-jmd?s_tid=prof_contriblnk) | ️✔️ |
136
146
  | [`MJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/mjmd.py) (Multivariate Jump Plus AM-FM Mode Decomposition) | [[paper]](https://arxiv.org/abs/2407.07800) | [[code]](https://www.mathworks.com/matlabcentral/fileexchange/169393-multivariate-jump-plus-am-fm-mode-decomposition-mjmd?s_tid=prof_contriblnk) | ✔️ |
137
147
  | [`SJMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_jmd/sjmd.py) / `SMJMD` (Successive Jump and Mode Decomposition) | [[paper]](https://arxiv.org/abs/2504.08453) | [[code]]() | ✔️ |
138
- | [`ESMD`]() (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
148
+ | [`ESMD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_emd/esmd.py) (Extreme-Point Symmetric Mode Decomposition) | [[paper]](https://arxiv.org/abs/1303.6540) | [[code]](https://github.com/WuShichao/esmd) | ✔️ |
139
149
  | [`STNBMD`]() (Short-Time Narrow-Band Mode Decomposition) | [[paper]](https://www.sciencedirect.com/science/article/pii/S0022460X16002443?via%3Dihub) | [[code]](https://ww2.mathworks.cn/matlabcentral/fileexchange/56226-short-time-narrow-band-mode-decomposition-stnbmd-toolbox) | ✖️ |
140
150
  | [`SWD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/swd.py) (Swarm Decomposition) | [[paper]](https://doi.org/10.1016/j.sigpro.2016.09.004) | [[code]](https://github.com/gkaposto/Swarm-Decomposition) | ✔️ |
141
- | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
151
+ | [`OSD`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/_osd/osd.py) (Optimization-based Signal Decomposition) | [[paper]](https://web.stanford.edu/~boyd/papers/sig_decomp_mprox.html) | [[code]](https://github.com/cvxgrp/signal-decomposition) | ✔️ |
142
152
  | [`STL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_stl.py) (Seasonal-Trend decomposition using LOESS) | [[paper]](https://www.nniiem.ru/file/news/2016/stl-statistical-model.pdf) | [[code]](https://www.statsmodels.org/stable/examples/notebooks/generated/stl_decomposition.html) | ✔️ |
143
153
  | [`MSTL`](https://github.com/wwhenxuan/PySDKit/blob/main/pysdkit/tsa/_mstl.py) (Multivariate Seasonal-Trend decomposition using LOESS) | [[paper]](https://arxiv.org/abs/2107.13462) | [[code]](https://github.com/KishManani/MSTL) | ✔️ |
144
154
 
@@ -68,5 +68,8 @@ include = ["pysdkit*"]
68
68
 
69
69
  [tool.setuptools.package-data]
70
70
  "*" = ["*.txt", "*.npy"]
71
+ "pysdkit.data" = ["*.txt", "*.npy"]
71
72
  "pysdkit._tid" = ["data/*.npy"]
72
73
  "pysdkit._tid.data" = ["*.npy"]
74
+ "pysdkit._imd" = ["data/*.npy"]
75
+ "pysdkit._imd.data" = ["*.npy"]
@@ -2,7 +2,7 @@
2
2
  A Python library for signal decomposition algorithms.
3
3
  """
4
4
 
5
- __version__ = "0.4.43"
5
+ __version__ = "0.4.45"
6
6
 
7
7
  # Empirical Mode Decomposition
8
8
  from ._emd import EMD
@@ -44,7 +44,7 @@ from ._tid import HVD
44
44
  from ._tid import ITD
45
45
 
46
46
  # Extreme-Point Symmetric Mode Decomposition
47
- from ._esmd import ESMD, esmd
47
+ from ._emd import ESMD, esmd
48
48
 
49
49
  # Local Mean Decomposition
50
50
  from ._lmd import LMD
@@ -112,8 +112,8 @@ from ._vncmd import AVNCMD
112
112
  # Adaptive Local Iterative Filtering (time iterative decomposition)
113
113
  from ._tid import ALIF
114
114
 
115
- # Adaptive Polymorphic Mode Decomposition
116
- from ._apmd import APMD
115
+ # Adaptive Polymorphic Mode Decomposition / Impulsive Mode Decomposition
116
+ from ._imd import APMD, IMD, imd
117
117
 
118
118
  # Empirical Wavelet Transform
119
119
  from ._ewt import ewt, EWT
@@ -207,6 +207,7 @@ Iterative Nonlinear Chirp Mode Decomposition | INCMD
207
207
  Adaptive Variational Nonlinear Chirp Mode Dec. | AVNCMD
208
208
  Adaptive Local Iterative Filtering | ALIF
209
209
  Adaptive Polymorphic Mode Decomposition | APMD
210
+ Impulsive Mode Decomposition | IMD
210
211
  Empirical Wavelet Transform | EWT
211
212
  Empirical Wavelet Transform for 2D Image | EWT2D
212
213
  Jump Plus AM-FM Mode Decomposition | JMD
@@ -246,7 +247,8 @@ __all__ = [
246
247
  "SWD",
247
248
  "swd",
248
249
  "OSD",
249
- "GDMD", "gdmd",
250
+ "GDMD",
251
+ "gdmd",
250
252
  "VGNMD",
251
253
  "vgnmd",
252
254
  "IVGNMD",
@@ -272,6 +274,8 @@ __all__ = [
272
274
  "AVNCMD",
273
275
  "ALIF",
274
276
  "APMD",
277
+ "IMD",
278
+ "imd",
275
279
  "ewt",
276
280
  "EWT",
277
281
  "ewt2d",
@@ -26,3 +26,5 @@ from .efd import EFD
26
26
  from .hht import HHT
27
27
 
28
28
  from .semd import SEMD, concatenate_signals, deconcatenate_imfs, transition_bridge
29
+
30
+ from .esmd import ESMD, esmd
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Feature Mode Decomposition (FMD / NFMD).
4
+ """
5
+
6
+ from .fmd import CK, FMD, TT, max_IJ
7
+
8
+ __all__ = ["FMD", "TT", "CK", "max_IJ"]