我必须使用 python 来重现使用 MODWT 的论文的结果。我目前正在使用 pywt,它只有平稳小波变换(SWT)。我研究了一下,似乎目前没有 MODWT 的软件包,而且我还发现很多人说 SWT 和 MODWT 是同一件事。但是使用 MATLAB 的 MODWT 和使用 python 的 SWT 的结果是不同的。 python中有没有可以用来直接执行MODWT的包?或者我可以使用 SWT 在 MODWT 中获得结果吗?
最近看了小波的书,
Percival、D. B. 和 A. T. Walden。用于时间序列分析的小波方法。英国剑桥:剑桥大学出版社,2000 年
接下来,我使用 python 执行了 modwt 和多分辨率分析的算法。 python 代码可以在 github here 中找到。也许对你有用。
另一个选项:安装 api 以从 python 使用 Matlab,如 https://es.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html
中所述然后你可以使用Python中的Matlab的modwt:
import matlab.engine
future = matlab.engine.start_matlab(background=True) # Starts Matlab on the background, meanwhile python can execute more commands
import numpy as np
x = np.sin(2 * np.pi * np.arange(100) / 20) + np.random.randn(100)
# Transfiere la señal desde Python a MATLAB
eng.workspace['x'] = x
# Realizar la MODWT en MATLAB
wavelet = 'db4' # Nombre de la wavelet (puedes cambiarlo)
level = 5 # Nivel de descomposición
# Llama a la función modwt de MATLAB
eng.eval(f"wcoefs = modwt(x, '{wavelet}', {level})", nargout=0)
# Recupera los coeficientes de detalle y aproximación desde MATLAB
eng.eval("detail_coefficients = wcoefs(end, :)", nargout=0)
eng.eval("approximation_coefficients = wcoefs(1, :)", nargout=0)
# Transfiere los resultados desde MATLAB a Python
detail_coefficients = eng.workspace['detail_coefficients']
approximation_coefficients = eng.workspace['approximation_coefficients']
# Puedes imprimir o graficar los coeficientes según tus necesidades
print("Coeficientes de detalle en el nivel", level, ":", detail_coefficients)
print("Coeficientes de aproximación:", approximation_coefficients)
eng.quit()