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.
- {pysdkit-0.4.16 → pysdkit-0.4.17}/PKG-INFO +20 -8
- {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/PKG-INFO +20 -8
- {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/SOURCES.txt +4 -0
- pysdkit-0.4.17/PySDKit.egg-info/requires.txt +5 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/README.md +5 -3
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/__init__.py +21 -1
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/__init__.py +2 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/ceemdan.py +3 -3
- pysdkit-0.4.17/pysdkit/_emd/efd.py +204 -0
- pysdkit-0.4.17/pysdkit/_fmd/nfmd.py +25 -0
- pysdkit-0.4.17/pysdkit/_osd/__init__.py +21 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/incmd.py +6 -3
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/vncmd.py +6 -3
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/hht/hht.py +2 -0
- pysdkit-0.4.17/pysdkit/tests/test_ceemdan.py +294 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/setup.py +4 -4
- pysdkit-0.4.16/PySDKit.egg-info/requires.txt +0 -5
- {pysdkit-0.4.16 → pysdkit-0.4.17}/LICENSE +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/dependency_links.txt +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/PySDKit.egg-info/top_level.txt +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_find_extrema.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_prepare_points.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/_splines.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/eemd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/emd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/memd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/remd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd/tvf_emd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/bemd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/bmemd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_emd2d/emd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_esmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_esmd/esmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/ewt.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ewt/ewt2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/extrema.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/faemd3d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_faemd/filter.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_fmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_fmd/fmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_hvd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_hvd/hvd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ifd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_itd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_itd/itd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/jmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_jmd/mjmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/lmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_lmd/rlmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ssa/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_ssa/ssa.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/acmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/avmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/ba_acmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/base.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/mvmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/svmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vmd_c.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vmd_f.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd/vme.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/cvmd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vmd2d/vmd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/anvcmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/_vncmd/mncmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_add_noise.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_cube.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_generator.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_image.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/_time_series.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/data/texture.txt +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_approxiamte_entropy.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_permutation_entropy.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/entropy/_sample_entropy.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/hht/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_fourier_spectra.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_functions.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_images.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_imfs.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/plot/_plot_signal.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_all.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_emd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_ewt.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_faemd3d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_cube.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_image.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_generator_signal.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_moving_decomp.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_vmd.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tests/test_vmd2d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_dtw.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_knn.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_moving_decomp.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_mstl.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/tsa/_stl.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/__init__.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_cite.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_correlation.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_diagnalization.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_differ.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_fft.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_function.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_hilbert.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_instantaneous.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_kernel_matrix.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_mirror.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_process.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/pysdkit/utils/_smooth1d.py +0 -0
- {pysdkit-0.4.16 → pysdkit-0.4.17}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PySDKit
|
|
3
|
-
Version: 0.4.
|
|
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
|
|
24
|
-
Requires-Dist: scipy
|
|
25
|
-
Requires-Dist: matplotlib
|
|
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
|
-
|
|
|
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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: PySDKit
|
|
3
|
-
Version: 0.4.
|
|
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
|
|
24
|
-
Requires-Dist: scipy
|
|
25
|
-
Requires-Dist: matplotlib
|
|
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
|
-
|
|
|
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
|
|
@@ -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
|
-
|
|
|
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.
|
|
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
|
+
)
|
|
@@ -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] =
|
|
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] =
|
|
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] =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 *
|
|
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 *
|
|
205
|
+
2 * np.pi * cumulative_trapezoid(eIF[i, :], t, initial=0), dtype=self.DTYPE
|
|
203
206
|
)
|
|
204
207
|
|
|
205
208
|
Bm = diags(
|