Guest User

Untitled

a guest
Oct 1st, 2020
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.72 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import scipy.signal as sig
  4.  
  5. from pywt._extensions._pywt import DiscreteContinuousWavelet
  6. from pywt._functions import integrate_wavelet
  7. #%%##########################################################################
  8. def l1(x):
  9.     return np.sum(np.abs(x))
  10.  
  11. def l2(x):
  12.     return np.sqrt(np.sum(np.abs(x ** 2)))
  13.  
  14. def plot(scales, y1, y2, logx=1):
  15.     scales = np.log2(scales) if logx else scales
  16.     if logx == 'lin':
  17.         scales = np.arange(len(scales))
  18.     plt.plot(scales, y1)
  19.     plt.plot(scales, y2)
  20.     plt.show()
  21. #%%##########################################################################
  22. scales = np.power(2 ** (1 / 32), np.arange(1, 256 + 1))
  23.  
  24. wavelet = DiscreteContinuousWavelet('morl')
  25. int_psi, x = integrate_wavelet(wavelet, precision=10)
  26.  
  27. linrange = max(x) - min(x)
  28. step = linrange / len(x)  # == x[1] - x[0]
  29. #%%##########################################################################
  30. mae = []
  31.  
  32. l1res, l2res = [], []
  33. l1rec, l2rec = [], []
  34. for scale in scales:
  35.     j = np.arange(scale * linrange + 1) / (scale * step)
  36.     j = j.astype(int)  # floor
  37.     if j[-1] >= int_psi.size:
  38.         j = np.extract(j < int_psi.size, j)
  39.     int_psi_scale = int_psi[j][::-1].real
  40.  
  41.     Ns = len(int_psi_scale)
  42.     w = np.real(sig.morlet2(Ns, Ns / 16) * np.sqrt(Ns / 16) * np.pi**(.25))
  43.     w /= scale
  44.  
  45.     l1res.append(l1(np.diff(int_psi_scale)))
  46.     l2res.append(l2(np.diff(int_psi_scale) * np.sqrt(scale)))
  47.  
  48.     l1rec.append(l1(w))
  49.     l2rec.append(l2(w * np.sqrt(scale)))
  50.  
  51. #%%##########################################################################
  52. k = None
  53. plot(scales[:k], l1res[:k], l2res[:k], logx=1)
  54. plot(scales[:k], l1rec[:k], l2rec[:k], logx=1)
  55.  
Add Comment
Please, Sign In to add comment