CWT: Interpolate wavelet values (Issue #531)#580
Open
amanita-citrina wants to merge 3 commits intoPyWavelets:mainfrom
Open
CWT: Interpolate wavelet values (Issue #531)#580amanita-citrina wants to merge 3 commits intoPyWavelets:mainfrom
amanita-citrina wants to merge 3 commits intoPyWavelets:mainfrom
Conversation
…ility that largest sampling instant exceeds wavelet upper bound
Author
|
The difference between the current cwt implementation and the proposed changes can be illustrated as follows: 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. |
Author
|
The CI checks failed for some Matlab compatibility tests. Unfortunately, I have no idea how to fix this. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

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().