Modal-Decomposition 0.1.0__tar.gz → 0.1.2__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.
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/PKG-INFO +1 -1
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/pyproject.toml +1 -1
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/CEEFD.py +5 -2
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/EMD.py +14 -4
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/__init__.py +47 -5
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/PKG-INFO +1 -1
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/tests/test.py +2 -5
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/LICENSE +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/README.md +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/setup.cfg +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/CEEMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/CEEMDAN.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/COLOR/__init__.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/COLOR/color_define.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/COLOR/colorful_print.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/EEMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/EFD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/EWT.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Error/CycleError.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/FMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/ICEEMDAN.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/LMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/MEMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/RPSEMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/SSA.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/SVMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/EnvironmentMemory.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/LazyImport.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/Monotonicity.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/NumpyNdarray_MemoryCalculator.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/OneDimArray.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/__init__.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/VMD.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/help_function.py +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/SOURCES.txt +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/dependency_links.txt +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/requires.txt +0 -0
- {modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@ Description: (if None write None)
|
|
|
14
14
|
Modify: (must)
|
|
15
15
|
2026.3.25 - Create
|
|
16
16
|
2026.3.30 - Desperate the CEEMDAN and the CEEFD, and rename the Cyclic_CEEFD as CEEFD, del the origin CEEFD.
|
|
17
|
+
2026.4.7 - Fix the problem when the freq_bins include 0 will make the idx out of list. And change _extract_imf to staticmethod.
|
|
17
18
|
"""
|
|
18
19
|
|
|
19
20
|
import numpy as np
|
|
@@ -44,13 +45,15 @@ class ceefd:
|
|
|
44
45
|
envelope = np.maximum(envelope, mag_spectrum)
|
|
45
46
|
return envelope
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
@staticmethod
|
|
49
|
+
def _extract_imf(signal, freq_bins):
|
|
48
50
|
N = len(signal)
|
|
49
51
|
fft_signal = np.fft.fft(signal)
|
|
50
52
|
|
|
51
53
|
mask = np.zeros(N, dtype=bool)
|
|
52
54
|
mask[freq_bins] = True
|
|
53
|
-
mask[N - np.array(freq_bins)] = True
|
|
55
|
+
# mask[N - np.array(freq_bins)] = True -> \ # 2026.4.7
|
|
56
|
+
mask[(N - np.array(freq_bins)) % N] = True
|
|
54
57
|
|
|
55
58
|
imf_fft = fft_signal * mask
|
|
56
59
|
imf = np.fft.ifft(imf_fft).real
|
|
@@ -22,7 +22,7 @@ from .COLOR.colorful_print import printc
|
|
|
22
22
|
from typing import Tuple, Union
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
def emd(S: Union[list, np.ndarray], T: Union[list, np.ndarray]=None, spline_kind: str = "cubic", nbsym: int = 2, max_imf=-1,
|
|
25
|
+
def emd(S: Union[list, np.ndarray], T: Union[list, np.ndarray]=None, spline_kind: str = "cubic", nbsym: int = 2, max_imf=-1, verbose: bool=False)\
|
|
26
26
|
-> Tuple[np.ndarray, np.ndarray]:
|
|
27
27
|
"""
|
|
28
28
|
EMD: Empirical Mode Decomposition
|
|
@@ -32,7 +32,7 @@ def emd(S: Union[list, np.ndarray], T: Union[list, np.ndarray]=None, spline_kind
|
|
|
32
32
|
:param spline_kind: the kind of spline. default cubic.
|
|
33
33
|
:param nbsym:
|
|
34
34
|
:param max_imf: the max num of IMFs
|
|
35
|
-
:param
|
|
35
|
+
:param verbose: True will print info, else no.
|
|
36
36
|
:return: IMFs (2-dim), Res (1-dim)
|
|
37
37
|
"""
|
|
38
38
|
if not isinstance(S, np.ndarray):
|
|
@@ -52,7 +52,8 @@ def emd(S: Union[list, np.ndarray], T: Union[list, np.ndarray]=None, spline_kind
|
|
|
52
52
|
|
|
53
53
|
if T is None: # if T is None, default generate uniform T-axis.
|
|
54
54
|
T = np.arange(N) # default fs = 1
|
|
55
|
-
|
|
55
|
+
if verbose:
|
|
56
|
+
print(f"Warn: T is None,default T = [0, 1, 2, ..., {N - 1}]")
|
|
56
57
|
|
|
57
58
|
else:
|
|
58
59
|
if not isinstance(T, np.ndarray):
|
|
@@ -62,4 +63,13 @@ def emd(S: Union[list, np.ndarray], T: Union[list, np.ndarray]=None, spline_kind
|
|
|
62
63
|
|
|
63
64
|
IMFs = EMD_cls.emd(S, T, max_imf=max_imf)
|
|
64
65
|
|
|
65
|
-
|
|
66
|
+
Res = IMFs[-1, :]
|
|
67
|
+
IMFs = IMFs[:-1, :]
|
|
68
|
+
|
|
69
|
+
if IMFs.ndim == 1:
|
|
70
|
+
IMFs = IMFs.reshape(1, -1)
|
|
71
|
+
|
|
72
|
+
elif IMFs.ndim == 0:
|
|
73
|
+
IMFs = np.zeros((1, Res.shape[1]))
|
|
74
|
+
|
|
75
|
+
return IMFs, Res
|
|
@@ -40,12 +40,21 @@ Modify:
|
|
|
40
40
|
2026.3.29 - Optimize the SSA.decompose function, time changed from 40min averagely to 2s averagely.
|
|
41
41
|
2026.3.30 - Rebuilding All.
|
|
42
42
|
2026.3.30 - Optimize the function of judging monotonicity.
|
|
43
|
+
2026.4.3 - Finish the Optimization of the modal decomposition method. Except the MEMD method.
|
|
44
|
+
2026.4.4 - Add the parameter to describe lib.
|
|
45
|
+
2026.4.6 - Change the position of the entrance of importing 'threading'. Try to reduce the cost of the import.
|
|
43
46
|
"""
|
|
44
47
|
|
|
45
|
-
import threading
|
|
46
|
-
from importlib import import_module
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
__version__ = "0.1.1"
|
|
50
|
+
__author__ = "a-raining-day(Mao)"
|
|
51
|
+
__email__ = "None, Only QQ email."
|
|
52
|
+
__license__ = "Apache 2.0"
|
|
53
|
+
__url__ = "https://github.com/a-raining-day/Modal-Decomposition"
|
|
54
|
+
__description__ = "A comprehensive modal decomposition library"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
from importlib import import_module
|
|
49
58
|
|
|
50
59
|
from .CEEFD import ceefd
|
|
51
60
|
from .CEEMD import ceemd
|
|
@@ -67,9 +76,22 @@ from .VMD import vmd
|
|
|
67
76
|
import warnings
|
|
68
77
|
warnings.warn("The MEMD is rebuilding...")
|
|
69
78
|
|
|
70
|
-
|
|
79
|
+
|
|
80
|
+
__all__ = \
|
|
81
|
+
[
|
|
82
|
+
"Function", "Class",
|
|
83
|
+
"__version__",
|
|
84
|
+
"__author__",
|
|
85
|
+
"__email__",
|
|
86
|
+
"__license__",
|
|
87
|
+
"__url__",
|
|
88
|
+
"__description__"
|
|
89
|
+
]
|
|
90
|
+
|
|
71
91
|
|
|
72
92
|
class Class:
|
|
93
|
+
import threading
|
|
94
|
+
|
|
73
95
|
__cache = {}
|
|
74
96
|
|
|
75
97
|
CEEFD = ceefd
|
|
@@ -120,6 +142,7 @@ class Function:
|
|
|
120
142
|
# function | default function for modal decomposition
|
|
121
143
|
# the IMFs (2-dim) means: (K, len(Signal)) (K is the num of IMFs)
|
|
122
144
|
# CEEFD = ceefd_real_cls.ceefd
|
|
145
|
+
|
|
123
146
|
CEEFD = Class.CEEFD(fs=1.0, min_peak_distance=10, envelop_iter=3)
|
|
124
147
|
CEEMD = ceemd
|
|
125
148
|
CEEMDAN = ceemdan
|
|
@@ -136,6 +159,25 @@ class Function:
|
|
|
136
159
|
SVMD = svmd
|
|
137
160
|
VMD = vmd
|
|
138
161
|
|
|
162
|
+
# __cache = \
|
|
163
|
+
# {
|
|
164
|
+
# "CEEFD": CEEFD,
|
|
165
|
+
# "CEEMD": CEEMD,
|
|
166
|
+
# "CEEMDAN": CEEMDAN,
|
|
167
|
+
# "EEMD": EEMD,
|
|
168
|
+
# "EFD": EFD,
|
|
169
|
+
# "EMD": EMD,
|
|
170
|
+
# "EWT": EWT,
|
|
171
|
+
# "FMD": FMD,
|
|
172
|
+
# "ICEEMDAN": ICEEMDAN,
|
|
173
|
+
# "LMD": LMD,
|
|
174
|
+
# "MEMD": MEMD,
|
|
175
|
+
# "RPSEMD": RPSEMD,
|
|
176
|
+
# "SSA": SSA,
|
|
177
|
+
# "SVMD": SVMD,
|
|
178
|
+
# "VMD": VMD
|
|
179
|
+
# }
|
|
180
|
+
|
|
139
181
|
|
|
140
182
|
if __name__ == '__main__':
|
|
141
|
-
|
|
183
|
+
Function.AAA
|
|
@@ -69,9 +69,6 @@ def test_SSA(S):
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
if __name__ == '__main__':
|
|
72
|
-
|
|
73
|
-
from scipy.signal import firwin, hilbert, correlate, get_window
|
|
74
|
-
from scipy.linalg import inv
|
|
75
|
-
import matplotlib.pyplot as plt
|
|
76
|
-
|
|
72
|
+
from src.Modal_Decomposition import Function
|
|
77
73
|
|
|
74
|
+
Function.AAA
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/COLOR/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Error/CycleError.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/LazyImport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/OneDimArray.py
RENAMED
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/Utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition/help_function.py
RENAMED
|
File without changes
|
{modal_decomposition-0.1.0 → modal_decomposition-0.1.2}/src/Modal_Decomposition.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|