summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-emd-signal.spec761
-rw-r--r--sources1
3 files changed, 763 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..3d0fbee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/EMD-signal-1.4.0.tar.gz
diff --git a/python-emd-signal.spec b/python-emd-signal.spec
new file mode 100644
index 0000000..c6f1768
--- /dev/null
+++ b/python-emd-signal.spec
@@ -0,0 +1,761 @@
+%global _empty_manifest_terminate_build 0
+Name: python-EMD-signal
+Version: 1.4.0
+Release: 1
+Summary: Implementation of the Empirical Mode Decomposition (EMD) and its variations
+License: Apache-2.0
+URL: https://github.com/laszukdawid/PyEMD
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/26/1d/69f23b15c0ba6702dd417a694c485b5533258fdefca0bd3e8953cf3b7a0b/EMD-signal-1.4.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-numpy
+Requires: python3-scipy
+Requires: python3-pathos
+Requires: python3-tqdm
+Requires: python3-pycodestyle
+Requires: python3-black
+Requires: python3-isort
+Requires: python3-click
+Requires: python3-sphinx
+Requires: python3-sphinx-rtd-theme
+Requires: python3-numpydoc
+Requires: python3-numba
+Requires: python3-pytest
+Requires: python3-codecov
+
+%description
+[![codecov](https://codecov.io/gh/laszukdawid/PyEMD/branch/master/graph/badge.svg)](https://codecov.io/gh/laszukdawid/PyEMD)
+[![Build Status](https://app.travis-ci.com/laszukdawid/PyEMD.svg?branch=master)](https://app.travis-ci.com/laszukdawid/PyEMD)
+[![DocStatus](https://readthedocs.org/projects/pyemd/badge/?version=latest)](https://pyemd.readthedocs.io/)
+[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f56b6fc3f855476dbaebd3c02ae88f3e)](https://www.codacy.com/gh/laszukdawid/PyEMD/dashboard?utm_source=github.com&utm_medium=referral&utm_content=laszukdawid/PyEMD&utm_campaign=Badge_Grade)
+[![DOI](https://zenodo.org/badge/65324353.svg)](https://zenodo.org/badge/latestdoi/65324353)
+
+# PyEMD
+
+## Links
+
+- Online documentation: <https://pyemd.readthedocs.org>
+- Issue tracker: <https://github.com/laszukdawid/pyemd/issues>
+- Source code repository: <https://github.com/laszukdawid/pyemd>
+
+## Introduction
+
+This is yet another Python implementation of Empirical Mode
+Decomposition (EMD). The package contains multiple EMD variations and
+intends to deliver more in time.
+
+### EMD variations
+
+- Ensemble EMD (EEMD),
+- "Complete Ensemble EMD" (CEEMDAN)
+- different settings and configurations of vanilla EMD.
+- Image decomposition (EMD2D & BEMD) (experimental, no support)
+- Just-in-time compiled EMD (JitEMD)
+
+*PyEMD* allows you to use different splines for envelopes, stopping criteria
+and extrema interpolations.
+
+### Available splines
+
+- Natural cubic (**default**)
+- Pointwise cubic
+- Akima
+- Linear
+
+### Available stopping criteria
+
+- Cauchy convergence (**default**)
+- Fixed number of iterations
+- Number of consecutive proto-imfs
+
+### Extrema detection
+
+- Discrete extrema (**default**)
+- Parabolic interpolation
+
+## Installation
+
+### PyPi (recommended)
+
+The quickest way to install package is through `pip`.
+
+> \$ pip install EMD-signal
+
+### From source
+
+In case, if you only want to *use* EMD and its variations, the best way to install PyEMD is through `pip`.
+However, if you want to modify the code, anyhow you might want to download the code and build package yourself.
+The source is publicaly available and hosted on [GitHub](https://github.com/laszukdawid/PyEMD).
+To download the code you can either go to the source code page and click `Code -> Download ZIP`, or use **git** command line
+
+> \$ git clone <https://github.com/laszukdawid/PyEMD>
+
+Installing package from source is done using command line:
+
+> \$ python setup.py install
+
+**Note**, however, that this will install it in your current environment. If you are working on many projects, or sharing reources with others, we suggest using [virtual environments](https://docs.python.org/3/library/venv.html).
+
+## Example
+
+More detailed examples are included in the
+[documentation](https://pyemd.readthedocs.io/en/latest/examples.html) or
+in the
+[PyEMD/examples](https://github.com/laszukdawid/PyEMD/tree/master/example).
+
+### EMD
+
+In most cases default settings are enough. Simply import `EMD` and pass
+your signal to instance or to `emd()` method.
+
+```python
+from PyEMD import EMD
+import numpy as np
+
+s = np.random.random(100)
+emd = EMD()
+IMFs = emd(s)
+```
+
+The Figure below was produced with input:
+$S(t) = cos(22 \pi t^2) + 6t^2$
+
+![simpleExample](https://github.com/laszukdawid/PyEMD/raw/master/example/simple_example.png?raw=true)
+
+### EEMD
+
+Simplest case of using Ensemble EMD (EEMD) is by importing `EEMD` and
+passing your signal to the instance or `eemd()` method.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import EEMD
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ eemd = EEMD()
+ eIMFs = eemd(s)
+```
+
+### CEEMDAN
+
+As with previous methods, also there is a simple way to use `CEEMDAN`.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import CEEMDAN
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ ceemdan = CEEMDAN()
+ cIMFs = ceemdan(s)
+```
+
+### Visualisation
+
+The package contains a simple visualisation helper that can help, e.g., with time series and instantaneous frequencies.
+
+```python
+import numpy as np
+from PyEMD import EMD, Visualisation
+
+t = np.arange(0, 3, 0.01)
+S = np.sin(13*t + 0.2*t**1.4) - np.cos(3*t)
+
+# Extract imfs and residue
+# In case of EMD
+emd = EMD()
+emd.emd(S)
+imfs, res = emd.get_imfs_and_residue()
+
+# In general:
+#components = EEMD()(S)
+#imfs, res = components[:-1], components[-1]
+
+vis = Visualisation()
+vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)
+vis.plot_instant_freq(t, imfs=imfs)
+vis.show()
+```
+
+## Experimental
+
+### JitEMD
+
+Just-in-time (JIT) compiled EMD is a version of EMD which exceed on very large signals
+or reusing the same instance multiple times. It's strongly sugested to be used in
+Jupyter notebooks when experimenting by modifyig input rather than the method itself.
+
+The problem with JIT is that the compilation happens on the first execution and it can be
+quite costly. With small signals, or performing decomposition just once, the extra time
+for compilation will be significantly larger than the decomposition, making it less performant.
+
+Please see documentation for more information or [examples](./example/) for how to use the code.
+This is experimental as it's value is still questionable, and the author (me) isn't proficient
+in JIT optimization so mistakes could've been made.
+
+Any feedback is welcomed. Happy to improve if there's intrest. Please open tickets with questions
+and suggestions.
+
+To enable JIT in your PyEMD, please install with `jit` option, i.e.
+
+> \$ pip install EMD-signal[jit]
+
+### EMD2D/BEMD
+
+*Unfortunately, this is Experimental and we can't guarantee that the output is meaningful.*
+The simplest use is to pass image as monochromatic numpy 2D array. Sample as
+with the other modules one can use the default setting of an instance or, more explicitly,
+use the `emd2d()` method.
+
+```python
+from PyEMD.EMD2d import EMD2D #, BEMD
+import numpy as np
+
+x, y = np.arange(128), np.arange(128).reshape((-1,1))
+img = np.sin(0.1*x)*np.cos(0.2*y)
+emd2d = EMD2D() # BEMD() also works
+IMFs_2D = emd2d(img)
+```
+
+## F.A.Q
+
+### Why is EEMD/CEEMDAN so slow?
+Unfortunately, that's their nature. They execute EMD multiple times every time with slightly modified version. Added noise can cause a creation of many extrema which will decrease performance of the natural cubic spline. For some tweaks on how to deal with that please see [Speedup tricks](https://pyemd.readthedocs.io/en/latest/speedup.html) in the documentation.
+
+## Contact
+
+Feel free to contact me with any questions, requests or simply to say *hi*.
+It's always nice to know that I've helped someone or made their work easier.
+Contributing to the project is also acceptable and warmly welcomed.
+
+### Citation
+
+If you found this package useful and would like to cite it in your work
+please use the following structure:
+
+```latex
+@misc{pyemd,
+ author = {Laszuk, Dawid},
+ title = {Python implementation of Empirical Mode Decomposition algorithm},
+ year = {2017},
+ publisher = {GitHub},
+ journal = {GitHub Repository},
+ howpublished = {\url{https://github.com/laszukdawid/PyEMD}},
+ doi = {10.5281/zenodo.5459184}
+}
+```
+
+
+%package -n python3-EMD-signal
+Summary: Implementation of the Empirical Mode Decomposition (EMD) and its variations
+Provides: python-EMD-signal
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-EMD-signal
+[![codecov](https://codecov.io/gh/laszukdawid/PyEMD/branch/master/graph/badge.svg)](https://codecov.io/gh/laszukdawid/PyEMD)
+[![Build Status](https://app.travis-ci.com/laszukdawid/PyEMD.svg?branch=master)](https://app.travis-ci.com/laszukdawid/PyEMD)
+[![DocStatus](https://readthedocs.org/projects/pyemd/badge/?version=latest)](https://pyemd.readthedocs.io/)
+[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f56b6fc3f855476dbaebd3c02ae88f3e)](https://www.codacy.com/gh/laszukdawid/PyEMD/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=laszukdawid/PyEMD&amp;utm_campaign=Badge_Grade)
+[![DOI](https://zenodo.org/badge/65324353.svg)](https://zenodo.org/badge/latestdoi/65324353)
+
+# PyEMD
+
+## Links
+
+- Online documentation: <https://pyemd.readthedocs.org>
+- Issue tracker: <https://github.com/laszukdawid/pyemd/issues>
+- Source code repository: <https://github.com/laszukdawid/pyemd>
+
+## Introduction
+
+This is yet another Python implementation of Empirical Mode
+Decomposition (EMD). The package contains multiple EMD variations and
+intends to deliver more in time.
+
+### EMD variations
+
+- Ensemble EMD (EEMD),
+- "Complete Ensemble EMD" (CEEMDAN)
+- different settings and configurations of vanilla EMD.
+- Image decomposition (EMD2D & BEMD) (experimental, no support)
+- Just-in-time compiled EMD (JitEMD)
+
+*PyEMD* allows you to use different splines for envelopes, stopping criteria
+and extrema interpolations.
+
+### Available splines
+
+- Natural cubic (**default**)
+- Pointwise cubic
+- Akima
+- Linear
+
+### Available stopping criteria
+
+- Cauchy convergence (**default**)
+- Fixed number of iterations
+- Number of consecutive proto-imfs
+
+### Extrema detection
+
+- Discrete extrema (**default**)
+- Parabolic interpolation
+
+## Installation
+
+### PyPi (recommended)
+
+The quickest way to install package is through `pip`.
+
+> \$ pip install EMD-signal
+
+### From source
+
+In case, if you only want to *use* EMD and its variations, the best way to install PyEMD is through `pip`.
+However, if you want to modify the code, anyhow you might want to download the code and build package yourself.
+The source is publicaly available and hosted on [GitHub](https://github.com/laszukdawid/PyEMD).
+To download the code you can either go to the source code page and click `Code -> Download ZIP`, or use **git** command line
+
+> \$ git clone <https://github.com/laszukdawid/PyEMD>
+
+Installing package from source is done using command line:
+
+> \$ python setup.py install
+
+**Note**, however, that this will install it in your current environment. If you are working on many projects, or sharing reources with others, we suggest using [virtual environments](https://docs.python.org/3/library/venv.html).
+
+## Example
+
+More detailed examples are included in the
+[documentation](https://pyemd.readthedocs.io/en/latest/examples.html) or
+in the
+[PyEMD/examples](https://github.com/laszukdawid/PyEMD/tree/master/example).
+
+### EMD
+
+In most cases default settings are enough. Simply import `EMD` and pass
+your signal to instance or to `emd()` method.
+
+```python
+from PyEMD import EMD
+import numpy as np
+
+s = np.random.random(100)
+emd = EMD()
+IMFs = emd(s)
+```
+
+The Figure below was produced with input:
+$S(t) = cos(22 \pi t^2) + 6t^2$
+
+![simpleExample](https://github.com/laszukdawid/PyEMD/raw/master/example/simple_example.png?raw=true)
+
+### EEMD
+
+Simplest case of using Ensemble EMD (EEMD) is by importing `EEMD` and
+passing your signal to the instance or `eemd()` method.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import EEMD
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ eemd = EEMD()
+ eIMFs = eemd(s)
+```
+
+### CEEMDAN
+
+As with previous methods, also there is a simple way to use `CEEMDAN`.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import CEEMDAN
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ ceemdan = CEEMDAN()
+ cIMFs = ceemdan(s)
+```
+
+### Visualisation
+
+The package contains a simple visualisation helper that can help, e.g., with time series and instantaneous frequencies.
+
+```python
+import numpy as np
+from PyEMD import EMD, Visualisation
+
+t = np.arange(0, 3, 0.01)
+S = np.sin(13*t + 0.2*t**1.4) - np.cos(3*t)
+
+# Extract imfs and residue
+# In case of EMD
+emd = EMD()
+emd.emd(S)
+imfs, res = emd.get_imfs_and_residue()
+
+# In general:
+#components = EEMD()(S)
+#imfs, res = components[:-1], components[-1]
+
+vis = Visualisation()
+vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)
+vis.plot_instant_freq(t, imfs=imfs)
+vis.show()
+```
+
+## Experimental
+
+### JitEMD
+
+Just-in-time (JIT) compiled EMD is a version of EMD which exceed on very large signals
+or reusing the same instance multiple times. It's strongly sugested to be used in
+Jupyter notebooks when experimenting by modifyig input rather than the method itself.
+
+The problem with JIT is that the compilation happens on the first execution and it can be
+quite costly. With small signals, or performing decomposition just once, the extra time
+for compilation will be significantly larger than the decomposition, making it less performant.
+
+Please see documentation for more information or [examples](./example/) for how to use the code.
+This is experimental as it's value is still questionable, and the author (me) isn't proficient
+in JIT optimization so mistakes could've been made.
+
+Any feedback is welcomed. Happy to improve if there's intrest. Please open tickets with questions
+and suggestions.
+
+To enable JIT in your PyEMD, please install with `jit` option, i.e.
+
+> \$ pip install EMD-signal[jit]
+
+### EMD2D/BEMD
+
+*Unfortunately, this is Experimental and we can't guarantee that the output is meaningful.*
+The simplest use is to pass image as monochromatic numpy 2D array. Sample as
+with the other modules one can use the default setting of an instance or, more explicitly,
+use the `emd2d()` method.
+
+```python
+from PyEMD.EMD2d import EMD2D #, BEMD
+import numpy as np
+
+x, y = np.arange(128), np.arange(128).reshape((-1,1))
+img = np.sin(0.1*x)*np.cos(0.2*y)
+emd2d = EMD2D() # BEMD() also works
+IMFs_2D = emd2d(img)
+```
+
+## F.A.Q
+
+### Why is EEMD/CEEMDAN so slow?
+Unfortunately, that's their nature. They execute EMD multiple times every time with slightly modified version. Added noise can cause a creation of many extrema which will decrease performance of the natural cubic spline. For some tweaks on how to deal with that please see [Speedup tricks](https://pyemd.readthedocs.io/en/latest/speedup.html) in the documentation.
+
+## Contact
+
+Feel free to contact me with any questions, requests or simply to say *hi*.
+It's always nice to know that I've helped someone or made their work easier.
+Contributing to the project is also acceptable and warmly welcomed.
+
+### Citation
+
+If you found this package useful and would like to cite it in your work
+please use the following structure:
+
+```latex
+@misc{pyemd,
+ author = {Laszuk, Dawid},
+ title = {Python implementation of Empirical Mode Decomposition algorithm},
+ year = {2017},
+ publisher = {GitHub},
+ journal = {GitHub Repository},
+ howpublished = {\url{https://github.com/laszukdawid/PyEMD}},
+ doi = {10.5281/zenodo.5459184}
+}
+```
+
+
+%package help
+Summary: Development documents and examples for EMD-signal
+Provides: python3-EMD-signal-doc
+%description help
+[![codecov](https://codecov.io/gh/laszukdawid/PyEMD/branch/master/graph/badge.svg)](https://codecov.io/gh/laszukdawid/PyEMD)
+[![Build Status](https://app.travis-ci.com/laszukdawid/PyEMD.svg?branch=master)](https://app.travis-ci.com/laszukdawid/PyEMD)
+[![DocStatus](https://readthedocs.org/projects/pyemd/badge/?version=latest)](https://pyemd.readthedocs.io/)
+[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f56b6fc3f855476dbaebd3c02ae88f3e)](https://www.codacy.com/gh/laszukdawid/PyEMD/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=laszukdawid/PyEMD&amp;utm_campaign=Badge_Grade)
+[![DOI](https://zenodo.org/badge/65324353.svg)](https://zenodo.org/badge/latestdoi/65324353)
+
+# PyEMD
+
+## Links
+
+- Online documentation: <https://pyemd.readthedocs.org>
+- Issue tracker: <https://github.com/laszukdawid/pyemd/issues>
+- Source code repository: <https://github.com/laszukdawid/pyemd>
+
+## Introduction
+
+This is yet another Python implementation of Empirical Mode
+Decomposition (EMD). The package contains multiple EMD variations and
+intends to deliver more in time.
+
+### EMD variations
+
+- Ensemble EMD (EEMD),
+- "Complete Ensemble EMD" (CEEMDAN)
+- different settings and configurations of vanilla EMD.
+- Image decomposition (EMD2D & BEMD) (experimental, no support)
+- Just-in-time compiled EMD (JitEMD)
+
+*PyEMD* allows you to use different splines for envelopes, stopping criteria
+and extrema interpolations.
+
+### Available splines
+
+- Natural cubic (**default**)
+- Pointwise cubic
+- Akima
+- Linear
+
+### Available stopping criteria
+
+- Cauchy convergence (**default**)
+- Fixed number of iterations
+- Number of consecutive proto-imfs
+
+### Extrema detection
+
+- Discrete extrema (**default**)
+- Parabolic interpolation
+
+## Installation
+
+### PyPi (recommended)
+
+The quickest way to install package is through `pip`.
+
+> \$ pip install EMD-signal
+
+### From source
+
+In case, if you only want to *use* EMD and its variations, the best way to install PyEMD is through `pip`.
+However, if you want to modify the code, anyhow you might want to download the code and build package yourself.
+The source is publicaly available and hosted on [GitHub](https://github.com/laszukdawid/PyEMD).
+To download the code you can either go to the source code page and click `Code -> Download ZIP`, or use **git** command line
+
+> \$ git clone <https://github.com/laszukdawid/PyEMD>
+
+Installing package from source is done using command line:
+
+> \$ python setup.py install
+
+**Note**, however, that this will install it in your current environment. If you are working on many projects, or sharing reources with others, we suggest using [virtual environments](https://docs.python.org/3/library/venv.html).
+
+## Example
+
+More detailed examples are included in the
+[documentation](https://pyemd.readthedocs.io/en/latest/examples.html) or
+in the
+[PyEMD/examples](https://github.com/laszukdawid/PyEMD/tree/master/example).
+
+### EMD
+
+In most cases default settings are enough. Simply import `EMD` and pass
+your signal to instance or to `emd()` method.
+
+```python
+from PyEMD import EMD
+import numpy as np
+
+s = np.random.random(100)
+emd = EMD()
+IMFs = emd(s)
+```
+
+The Figure below was produced with input:
+$S(t) = cos(22 \pi t^2) + 6t^2$
+
+![simpleExample](https://github.com/laszukdawid/PyEMD/raw/master/example/simple_example.png?raw=true)
+
+### EEMD
+
+Simplest case of using Ensemble EMD (EEMD) is by importing `EEMD` and
+passing your signal to the instance or `eemd()` method.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import EEMD
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ eemd = EEMD()
+ eIMFs = eemd(s)
+```
+
+### CEEMDAN
+
+As with previous methods, also there is a simple way to use `CEEMDAN`.
+
+**Windows**: Please don't skip the `if __name__ == "__main__"` section.
+
+```python
+from PyEMD import CEEMDAN
+import numpy as np
+
+if __name__ == "__main__":
+ s = np.random.random(100)
+ ceemdan = CEEMDAN()
+ cIMFs = ceemdan(s)
+```
+
+### Visualisation
+
+The package contains a simple visualisation helper that can help, e.g., with time series and instantaneous frequencies.
+
+```python
+import numpy as np
+from PyEMD import EMD, Visualisation
+
+t = np.arange(0, 3, 0.01)
+S = np.sin(13*t + 0.2*t**1.4) - np.cos(3*t)
+
+# Extract imfs and residue
+# In case of EMD
+emd = EMD()
+emd.emd(S)
+imfs, res = emd.get_imfs_and_residue()
+
+# In general:
+#components = EEMD()(S)
+#imfs, res = components[:-1], components[-1]
+
+vis = Visualisation()
+vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)
+vis.plot_instant_freq(t, imfs=imfs)
+vis.show()
+```
+
+## Experimental
+
+### JitEMD
+
+Just-in-time (JIT) compiled EMD is a version of EMD which exceed on very large signals
+or reusing the same instance multiple times. It's strongly sugested to be used in
+Jupyter notebooks when experimenting by modifyig input rather than the method itself.
+
+The problem with JIT is that the compilation happens on the first execution and it can be
+quite costly. With small signals, or performing decomposition just once, the extra time
+for compilation will be significantly larger than the decomposition, making it less performant.
+
+Please see documentation for more information or [examples](./example/) for how to use the code.
+This is experimental as it's value is still questionable, and the author (me) isn't proficient
+in JIT optimization so mistakes could've been made.
+
+Any feedback is welcomed. Happy to improve if there's intrest. Please open tickets with questions
+and suggestions.
+
+To enable JIT in your PyEMD, please install with `jit` option, i.e.
+
+> \$ pip install EMD-signal[jit]
+
+### EMD2D/BEMD
+
+*Unfortunately, this is Experimental and we can't guarantee that the output is meaningful.*
+The simplest use is to pass image as monochromatic numpy 2D array. Sample as
+with the other modules one can use the default setting of an instance or, more explicitly,
+use the `emd2d()` method.
+
+```python
+from PyEMD.EMD2d import EMD2D #, BEMD
+import numpy as np
+
+x, y = np.arange(128), np.arange(128).reshape((-1,1))
+img = np.sin(0.1*x)*np.cos(0.2*y)
+emd2d = EMD2D() # BEMD() also works
+IMFs_2D = emd2d(img)
+```
+
+## F.A.Q
+
+### Why is EEMD/CEEMDAN so slow?
+Unfortunately, that's their nature. They execute EMD multiple times every time with slightly modified version. Added noise can cause a creation of many extrema which will decrease performance of the natural cubic spline. For some tweaks on how to deal with that please see [Speedup tricks](https://pyemd.readthedocs.io/en/latest/speedup.html) in the documentation.
+
+## Contact
+
+Feel free to contact me with any questions, requests or simply to say *hi*.
+It's always nice to know that I've helped someone or made their work easier.
+Contributing to the project is also acceptable and warmly welcomed.
+
+### Citation
+
+If you found this package useful and would like to cite it in your work
+please use the following structure:
+
+```latex
+@misc{pyemd,
+ author = {Laszuk, Dawid},
+ title = {Python implementation of Empirical Mode Decomposition algorithm},
+ year = {2017},
+ publisher = {GitHub},
+ journal = {GitHub Repository},
+ howpublished = {\url{https://github.com/laszukdawid/PyEMD}},
+ doi = {10.5281/zenodo.5459184}
+}
+```
+
+
+%prep
+%autosetup -n EMD-signal-1.4.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-EMD-signal -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.4.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..7f53d9e
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+9dade2aa07d241199393223a210f2ca6 EMD-signal-1.4.0.tar.gz