Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CWT: Interpolate wavelet values (Issue #531) #580

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

amanita-citrina
Copy link

The current implementation of CWT first takes equi-distant samples (currently 1024) over the range of the wavelet, then integrates the samples using np.cumsum.

Later on, the correct sampling instants are determined for each scale. The sample values are approximated by taking the value of the precomputed integral at the next smaller sampling instant. One can also view this as sampling jitter. It results in clearly visible artefacts (see issues #531 and #570).

This pull request aims to (mostly) eliminate the visible artefacts by interpolating the integral values at the scale-dependent sampling instants. This approximation is obviously more accurate (except perhaps for pathological cases), as can be seen in the attached plots. It is also low-complexity and avoids potentially expensive recomputing of wavelet samples.

The pull request is a result of the discussions about pull request #574. It solves the most urgent (and least controversial) issue addressed in #574, namely the strong visible artefacts at higher scales.

The proposed code passed all tests when running pywt.tests().

pywt_old
pywt_new

@amanita-citrina
Copy link
Author

The difference between the current cwt implementation and the proposed changes can be illustrated as follows:

cwt_figure

The current implementation replaces the true sample value with the value of the closest precomputed sample to the left. The proposed method instead interpolates between the adjacent precomputed samples.

Of course, the accuracy of both schemes improves as the number of precomputed samples increases. Nevertheless, linear interpolation will always be more accurate for a specific number of precomputed samples. On the other hand, the current scheme has a lower computational cost.

@amanita-citrina
Copy link
Author

The CI checks failed for some Matlab compatibility tests. Unfortunately, I have no idea how to fix this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant