Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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

share|improve this question
2  
See this question for a spectrogram. –  rm -rf May 23 '12 at 23:49
1  
See: Fractional Fourier transform, mathworld.wolfram.com/FractionalFourierTransform.html it has a downloadable notebook –  Jagra May 23 '12 at 23:50
2  
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
add comment

1 Answer 1

up vote 7 down vote accepted

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"]},
   With[{w = PadRight[OptionValue["Window"], wlen], 
     wstep = Round[wlen (1 - OptionValue["Overlap"])]},
    If[r \[Element] Reals, 
       Take[#, All, Round[Last@Dimensions@#]/2], #] &[
     Fourier /@ (w # &) /@ Partition[r, wlen, wstep]]]
   ];
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.