The Griffin-Lim algorithm for phase recovery (based on the magnitude of an STFT) involves a step that is: STFT(Inverse STFT(...)). This seems to be the key iteration in the algorithm.

This Quora article and this line in the librosa implementation can be referred to for a description of this step.

I don't understand what makes this algorithm convergent - isn't the STFT supposed to be invertible? Why does STFT(ISTFT(...)) do anything interesting? If the usage of different window functions make it non-invertible, why does this step recover any phase information about the original signal?

  • $\begingroup$ My hunch is that it has to do with the redundancy of the STFT. Yes, the fourier transform is invertible, but considering an extreme case where the hop length is one and the window length big - most of the points in successive windows are the same, so the phases will be (highly) correlated. Not every combination of spectrum and phase corresponds to a reasonable signal, so this is where the Griffin-Lim comes in. With a good/correct estimation of phase, STFT(ISTFT(X)) = X, but with an incorrect/(inconsistent?) estimation of phase, this isn't true. (Just a guess at the answer) $\endgroup$ – adityar Jan 8 at 19:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.