# Time-frequency analysis beyond wavelets

What possibilities are there for time-frequency analysis in Mathematica beyond wavelet decomposition? I could not even find a simple STFT.

-
See this question for a spectrogram. –  rm -rf May 23 '12 at 23:49
See: Fractional Fourier transform, mathworld.wolfram.com/FractionalFourierTransform.html it has a downloadable notebook –  Jagra May 23 '12 at 23:50
you can use Wigner distribution function ... see demos... demonstrations.wolfram.com/WignerFunctionOfHarmonicOscillator demonstrations.wolfram.com/… demonstrations.wolfram.com/… –  s.s.o May 24 '12 at 0:03

The links provide you with everything you need I think. The goal of this answer is to show you that even though it's not built in, a discrete STFT is quite easy and short to code.

This would take the DFT of the data set partitioned into chunks of length 2^13, with half a window overlap, and a rectangular window

STFT[r_]:= Fourier /@ Partition[r, 2^13, 2^12];


That's the end of it.

Of course it would take a little more to make a function with options such as Overlap, some option to automatically drop the negative frequencies for real inputs, window type, DFT length... But all of them are immediate to implement. I just saw the very neat @RM's implementation. You should go check it out.

Legacy code from before having seen the link with enough attention:

Options[STFT] = {"Overlap" -> 0.5,
"DropNegativeFrequenciesForRealInputs" -> True,
"Window" -> ConstantArray[1, 2^10], "DFTLength" -> 2^10};

STFT[r_, OptionsPattern[]] :=
With[{wlen = OptionValue["DFTLength"]},