Skip to content

Releases: OverLordGoldDragon/ssqueezepy

v0.6.5

29 Mar 12:20
85563d0
Compare
Choose a tag to compare

Updated deprecated CuPy method.

For all changes, see CHANGELOG.

v0.6.4

29 Aug 04:19
0dc2558
Compare
Choose a tag to compare

QoL, cleanups, fixes

23 Jan 16:21
Compare
Choose a tag to compare

FEATURES

  • freq_to_scale & scale_to_freq, experimental
  • Improved auto-scales
  • Optional nan_checks
  • Improved default gamma

BREAKING

  • ssq_freqs now correctly maps frequencies to corresponding rows of Tx for ssq_cwt, no longer requiring [::-1]
  • scales returned as 1D
  • extract_ridges: ridge_f (formerly fridge) now returns scales rather than log(scales)
  • extract_ridges: renamed: fridge -> ridge_f, max_energy -> ridge_e

FIXES

  • False warning for t & fs
  • Extended scope of astensor to scales, ssq_freqs
  • visuals: improve xticks & yticks handling

MISC

  • Added citation; README changes; docs changes
  • experimental: remove phase_squeeze, phase_transform
  • visuals.imshow: default cmap='turbo'
  • visuals: added auto_xlims, squeeze

DOI

07 Jul 18:06
2a37f80
Compare
Choose a tag to compare
DOI

Adds a DOI for citation purposes

GPU & CPU acceleration

05 May 18:04
efc6f91
Compare
Choose a tag to compare

Dramatic speed and memory improvements, along other changes; see changelog.

Generalized Morse Wavelets, Ridge Extraction, Testing Suite

19 Feb 11:59
Compare
Choose a tag to compare

A massive update.

FEATURES (major)

  • Generalized Morse Wavelets (gmw, morsewave in _gmw.py)
  • Automatic time-frequency ridge extraction, ridge_extraction.py
  • Signal testing suite, _test_signals.py, and examples
  • Higher-order CWT (via GMWs); _cwt.cwt_higher_order
  • configs.ini, used to control function defaults globally
  • scales default improved to not over-represent low frequencies

FEATURES (other)

  • visuals: added wavelet_filterbank, viz_cwt_higher_order, viz_gmw_orders (first callable as wavelet.viz('filterbank'))
  • visuals.wavelet_tf: autopicks scale for scale=None to give a nice visual for any wavelet
  • ssq_cwt & ssq_stft: added arg preserve_transform to (see docstrings)
  • padsignal: 2D input support, of form (n_signals, signal_length) (i.e. will pad every row vector).
  • cwt: support for padtype=None
  • maprange: tuple of floats now supported (help(_ssq_cwt.ssq_cwt))
  • Wavelet.info() and @propertys of Wavelet revamped for generality; added @propertys: wc_ct, scalec_ct.
  • wavelets.center_frequency: added kind='peak-ct'
  • utils.find_max_scale now simpler and more effective, guaranteeing complete spectral coverage for low frequencies

BREAKING

  • utils.py -> utils/*: common.py, cwt_utils.py, stft_utils.py
  • The default wavelet has been changed from 'morlet' to 'gmw'
  • Changed Morlet's default parameters to closely match GMW's defaults per time & frequency resolution
  • ssq_cwt(mapkind=) default change: 'maximal' to 'peak'
  • scales default change: implicit preset from 'maximal' to 'minimal' for low scales, 'maximal' for high
  • ssq_cwt return order change: Tx, ssq_freqs, Wx, scales, w to Tx, Wx, ssq_freqs, scales, w, dWx (additionally returning dWx)
  • ssq_stft return order change: Tx, ssq_freqs, Sx, Sfs, dSx, w to Tx, Sx, ssq_freqs, Sfs, w, dSx
  • ssqueezing & ssq_cwt: renamed mapkind to maprange
  • difftype: 'direct' -> 'trig'
  • _infer_scaletype -> infer_scaletype
  • _integrate_analytic -> integrate_analytic
  • find_max_scale -> find_max_scale_alt, but find_max_scale is still (but a different) function

MISC

  • phase_cwt: takes abs(w) instead of zeroing negatives
  • wavelet in icwt and issq_cwt now defaults to the default wavelet
  • cwt: added args order, average
  • stft & ssq_stft: added t argument
  • stft default window increased frequency resolution
  • visuals.imshow(): cmap now defaults to 'jet' instead of 'bone' for abs=True
  • Added Examples to README, adjusted Minimal Example
  • NOTICE.txt: added jLab
  • setup.py: added short & long description, copyright, keywords

FIXES

  • visuals.wavelet_heatmap: string scales now functional
  • visuals: w overreached into negative frequencies for odd N in wavelet_tf, wavelet_tf_anim, & wavelet_heatmap
  • icwt: padtype now functional

FILE CHANGES

  • ssqueezepy/ added: _gmw.py, _test_signals.py, ridge_extraction.py, configs.ini, README.md
  • ssqueezepy/ added utils/, split utils.py into common.py, cwt_utils.py, stft_utils.py, __init__.py, & moved to utils/.
  • tests/ added: gmw_test.py, test_signals_test.py, ridge_extraction_test.py
  • examples/ added: extracting_ridges.py, scales_selection.py, ridge_extract_readme/: README.md, imgs/*
  • Created MANIFEST.in

STFT & Synchrosqueezed STFT

14 Jan 04:23
ac2fd4b
Compare
Choose a tag to compare

FEATURES:

  • stft, istft, ssq_stft, and issq_stft implemented and validated
  • Added to utils.py: buffer, unbuffer, window_norm, window_resolution, and window_area
  • Replaced numba.njit with numba.jit(nopython=True, cache=True), accelerating recomputing

BREAKING:

  • cwt() no longer returns x_mean
  • padsignal now only returns padded input by default; get_params=True for old behavior
  • Moved methods: phase_cwt & phase_cwt_num from ssqueezing to _ssq_cwt
  • In future release: return order of cwt and stft will be changed to have Wx, dWx and Sx, dSx, and ssq_cwt and ssq_stft to have Tx, Wx and Tx, Sx

MISC:

  • wavelet positional argument in cwt is now a keyword argument that defaults to 'morlet'
  • Support for padsignal(padtype='wrap')
  • Added CHANGELOG.md
  • Docstring, comment cleanups

ssqueezepy v0.5.0

19 Dec 20:53
Compare
Choose a tag to compare

Synchrosqueezing arrives to Python:

  • Continuous Wavelet Transform, forward & inverse, beating PyWavelets' & scipy's
  • CWT-based synchrosqueezing, forward & inverse
  • Wavelet visualizations
  • Docs/comments explaining relevant concepts
  • Several important fixes and performance optimizations relative to original MATLAB repository
  • Greater flexibility and improved edge-case handling relative to latest MATLAB implementations

Planned for v0.6.0:

  • Short-time Fourier Transform, forward & inverse
  • STFT-based synchrosqueezing, forward & inverse
  • Generalized Morse Wavelets

Existing users: please review code anew; too many changes to note between Prerelease 2 and v0.5.0. This changes onward, with every change explicitly tracked.

0.5.0 Pre-release 2

08 Nov 21:10
8314572
Compare
Choose a tag to compare
  • Added Wavelet class
  • Faster wavelet recomputation
  • Deprecated wfiltfn
  • Added setup.py and requirements

0.5.0 Pre-release

05 Nov 20:51
d7b016c
Compare
Choose a tag to compare

At last, SYNCRHOSQUEEZING is here.

Relative to MATLAB repo:

  • Several important fixes
  • Possible performance improvements**
  • Formula clarity in code and comments; correct quantity placement prioritized over saving code space
  • Forward CWT and synchrosqueezing fully* fixed & validated
  • Inverse synchrosqueezing fully* fixed & validated
  • Inverse CWT and helper methods ported, partly fixed & validated
  • Added linear scale support to CWT
  • Added support for custom scales
  • Replaced opts with Pythonic argument handling

*: not every argument config works. I tested every option, and marked in comments what fails to deliver "good" results (marked with # !!! and sometimes # TODO). Unless explicitly stating otherwise, there may be nothing to 'fix' - simply the method is flawed, or thrives in specific settings.
**: I initially didn't realize the MATLAB code was jit-compiled; will run tests to compare speed & memory use.

To-do for first release:

  • Complete docstrings
  • Add examples
  • Revamp README
  • Set license

Note that majority of code organization is subject to change by v0.6.0. This includes args placement and defaults, variable, function, and module names, and whether wavelets are functions or class instances.


Not reviewed/validated: synsq_stft.py, stft_transforms.py. I don't plan on reviewing these; others are welcome to, and I'll validate changes.