# Interpolation of estimated frequency between fft bins: what about phase?

I am developing an additive re-synthesier, which involves identifying partials from FFT frames.

Partial identification requires amplitude peaks. The simplest way to do this is to just look at the amplitude of each bin, but this of course can miss partials that happen to lay between bins, and there energy is spread over the two adjacent bins.

I understand there are various interpolation methods (of varying complexity) to estimate the actual amplitude peak and frequency... however, if taking such an approach, how to estimate the phase offset? Is it even possible?

• Interpolation for analysis-resynthesis is often done phase first, rather than magnitude first. The interpolated spectrum peaks are often estimated by using phase vocoder methods, looking at the phase change between adjacent overlapped windows. – hotpaw2 Jun 17 '19 at 9:01
• Ok thanks. I already know of the method to estimate the bin frequency by comparing adjacent frame phase offsets (and comparing it to the expected change)... however, with that approach, I cant then estimate the corresponding amplitude... or can I? (That is why I was looking into the interpolation approach above) – audioboy Jun 17 '19 at 9:29
• – Cedron Dawg Jul 17 '19 at 15:32

If you do an fftshift before the FFT (to center the phase reference in the data frame), you can use the same interpolation methods on the real (even) and imaginary (positive odd) components in the complex FFT result, and thus get interpolated phase estimates (referenced to the original data frame’s center) between FFT result bins.

• More details in the comments to answers to this question: dsp.stackexchange.com/questions/3301/… – hotpaw2 Jun 17 '19 at 9:19
• Ah ok, so do you mean then to do first do regular short term FFTs, and estimate my exact frequencies by comparing phase offsets of adjacent phases, and then secondly, do another round of DFTs at those exact frequencies, to get the actual phase and amplitude? Alternatively, a cheaper idea would be to do my stFFTs, estimate exact frequencies, then use those estimated frequencies to interpolate between my bins and get the corresponding amplitudes.. does that make sense? But In this case I would just use the phase from the FFT, and not adjust it? – audioboy Jun 17 '19 at 9:37

For a single pure real noiseless tone, the technique given in my blog article

will give you an exact answer.

For tone peaks that aren't too close to other tones, (e.g. a bin or two), and not too much noise, it will give you a very good estimate.

Mathematically, it is equivalent to constructing two basis vectors at your estimated frequency and solving for the phase like a DFT bin does, but it does it from the neighboring bin values rather than the source values so it is extremely efficient in comparison. (And frame sample count independent)

Ced