It is known that

* a) the STFT gives a rectangular tiling of the time-frequency plane
* b) the Wavelet transform gives a non-linear tiling (better frequency resolution for low-frequencies, and better time-domain resolution for higher-frequencies)

[![enter image description here](https://i.stack.imgur.com/SHoFd.png)](https://i.stack.imgur.com/SHoFd.png)
* c) Constant-Q transform (such as NonStationaryGaborTransform) have a logarithmic scale for frequency bins (instead of linear with STFT) and have a time-frequency tiling like this (y-axis logarithmic):

[![enter image description here](https://i.stack.imgur.com/i2YeT.png)](https://i.stack.imgur.com/i2YeT.png)

Question:
---------

**Is there an transform like this:**

[![enter image description here](https://i.stack.imgur.com/9Fyc6.jpg)](https://i.stack.imgur.com/9Fyc6.jpg)

i.e. like a normal STFT, but **for which the FFT-size would change for successive time frames.**

Example: if there is a transient, the FFT-size is small (512) to keep good time-domain resolution, then a few time-frames later the signal is rather stationary, so the FFT-size is higher (8192) to have good frequency resolution.

It's like an adaptative / multiresolution STFT.

Last but not least: of course it's always possible to perform FFT with different window-length on successive time-frames, so the **forward transform I'm describing is probably easy to do**.

What I'm asking here is a transform which is invertible, i.e. in which we can compute an inverse transform to recover the initial signal.

Does this exist in Matlab or Python?