OverLordGoldDragon / ssqueezepy

Synchrosqueezing, wavelet transforms, and time-frequency analysis in Python
MIT License
618 stars 96 forks source link

ConceFT #50

Closed rcabdia closed 2 years ago

rcabdia commented 2 years ago

Dear Eugene Brevdo and Gaurav Thakur,

First of all, thank you very much for your python library ssqueezepy. it is very useful and is the first library that really implements very well the icwt in python (at least from my concern). I would like to know if It would be possible to improve the ssq_cwt method applying the ConceFT (Daubechies et al., 2016) algorithm. What is your opinion? is it worth it?

If that were the case, what wavelet families could be applied? it could be applied an stack of synchrosqueezed scalograms generated by morlet families at different number of cycles or on the contrary morse wavelet have a clear advantage? For the STFT, what is the advantage of the orthonormal Hermite functions over the Discrete Prolate Spheroidal (Slepian) Sequences?

Thank you very much in advance for your time and for your help

Best Regards, Roberto Cabieces

bluenote10 commented 2 years ago

I was basically wondering the same, having recently seen this interesting (high-level) talk by Ingrid Daubechies. That (to-be-published?) stuff she talks about in the end is also very intriguing. I actually need to check if this follow-up is published by now, since the talk is almost two years old.

OverLordGoldDragon commented 2 years ago

Hello,

While E. Brevdo and G. Thakur implemented the original toolbox, they have nothing to do with ssqueezepy - if you wish, you can try asking on their repository.

I'm unaware of the methods mentioned, but I'll take a look.

OverLordGoldDragon commented 2 years ago

While the paper suggests definitive improvements, I don't find them significant enough to justify implementation effort. (I also wish more graphical examples were provided vs vanilla SST)

ssqueezepy currently has something similar to MSST via GMWs: instead of averaging several SSTs from orthogonal wavelets, it takes SST of several orthogonal-wavelet (GMW) CWTs - as shown here. The CWT averaging was proposed in the original GMW paper as an anti-noise measure, but taking its SST was my idea (which may have been proposed elsewhere, but I'm unaware).

If that were the case, what wavelet families could be applied?

GMWs for sure. Don't know whether Morlets have an orthonormal family.

For the STFT, what is the advantage of the orthonormal Hermite functions over the Discrete Prolate Spheroidal (Slepian) Sequences?

Don't know, but worth asking on DSP.SE. DPSS has optimal time-frequency resolution (beating Gaussian in discrete case).

his interesting (high-level) talk by Ingrid Daubechies

Interesting indeed. Granted, no improvements I've seen so far (ConceFT, adaptive SST, higher order SST) seem to significantly outdo plain SST - but each time authors demonstrate very few examples. Something like TestSignals would make things lot clearer.

OverLordGoldDragon commented 2 years ago

Worth noting (and I should add to docs) that the current MSST-like implementation (via order > 0) may not be quite correct, as it reuses scales from order=0, whereas I imagine it'd be more appropriate to recompute scales for each wavelet order to map to the same center frequency. So results are approximate, and possibly coincidentally exact, but I've not checked.

rcabdia commented 2 years ago

Dear John Muradeli,

I still have some concerns about how exactly is the idea behind;

SSQ_CWT (avg =0-3) computes the squeezing of several scalograms where each scalogram is computed with different set of GMWs parameters and then stack it? if so I think it is the same concept as ConceFT...

Please could you give me a detailed explanation of your proposal? any case I am going to check the scalograms of regional earthquakes using order = and order = (0-3) to see if there is a SNR improvement....

Best Regards,

Roberto Cabieces

OverLordGoldDragon commented 2 years ago
  1. My variant: SSQ(mean(CWT1, CWT2, CWT3))
  2. MSST: mean(SSQ(CWT1), SSQ(CWT2), SSQ(CWT3))
  3. ConceFT: mean(mSSQ(mCWT1), mSSQ(mCWT2), mSSQ(mCWT3)), where m is for "modified" as per page 6

1 is fastest to compute since there's only one phase transform, whereas 2 and 3 have one for each SSQ. However, I'm uncertain 1 is even legitimate per the nonlinearities involved, but the phase transform is taken before the nonlinearity, and I confirmed it improving or not changing the SNR.

MSST can be done with ssqueezepy by simply creating appropriate wavelets with scales mapping to same frequencies for each SSQ row; ConceFT will be more complicated but still reasonable - the hard part is testing.