# Frequency Interpolation - Grandke's Method

Started by April 20, 2011
```I have a question about Grandke's method of frequency interpolation.  (I suspect
this question has been asked before).  Using the Hanning window (and Schoukens, 1991
notation), he derives

f_interp = (i + delta) * fo, where

delta = (2*alpha - 1) / (alpha + 1), and

alpha = abs(X(i+1) / X(i)), and

{X(i), X(i+1)} includes the peak.  By definition,

0 < delta < 1, which implies 1/2 < alpha < 2.  Why must

alpha satisfy this?

---

```
```On Wed, 20 Apr 2011 14:28:13 -0500, creekmor <user@compgroups.net/>
wrote:

>I have a question about Grandke's method of frequency interpolation.  (I suspect
this question has been asked before).  Using the Hanning window (and Schoukens, 1991
notation), he derives
>
>f_interp = (i + delta) * fo, where
>
>delta = (2*alpha - 1) / (alpha + 1), and
>
>alpha = abs(X(i+1) / X(i)), and
>
>{X(i), X(i+1)} includes the peak.  By definition,
>
>0 < delta < 1, which implies 1/2 < alpha < 2.  Why must
>
>alpha satisfy this?

The units on delta are DFT bins, so if delta > 1 then you picked the
wrong bin for the maximum.   The correction is just to find a finer
estimate between bins, so the assumption is that the peak is already
determined within one bin.

Eric Jacobsen
http://www.ericjacobsen.org
http://www.dsprelated.com/blogs-1//Eric_Jacobsen.php
```
```On Apr 20, 3:28=A0pm, creekmor <u...@compgroups.net/> wrote:
> I have a question about Grandke's method of frequency interpolation. =A0(=
I suspect this question has been asked before). =A0Using the Hanning window=
(and Schoukens, 1991 notation), he derives
>
> f_interp =3D (i + delta) * fo, where
>
> delta =3D (2*alpha - 1) / (alpha + 1), and
>
> alpha =3D abs(X(i+1) / X(i)), and
>
> {X(i), X(i+1)} includes the peak.

so the discrete peak can be either X[i] or X[i+1]?  what if you
included the wrong "2nd place" with the discrete peak?  e.g.  what if
X[i] is the discrete peak, but you should have chosen X[i-1] instead
of X[i+1]?

dunno who Grandke is, but i think this method sorta sucks.  a simple
quadratic peak interpolation with three points (the discrete peak and
its two adjacent neighbors) is better, both analytically and, since
division is required in both cases, in practice.  this method has a
name (i think i saw the person's name in Numerical Recipes) but i
dunno who it is.

r b-j
```
```On Apr 20, 2:01&#2013266080;pm, robert bristow-johnson
<r...@audioimagination.com>
wrote:

>
> so the discrete peak can be either X[i] or X[i+1]? &#2013266080;what if
you
> included the wrong "2nd place" with the discrete peak?
&#2013266080;e.g. &#2013266080;what if
> X[i] is the discrete peak, but you should have chosen X[i-1] instead
> of X[i+1]?

Is there some reason to think it is unreasonably more difficult to
locate the peak value and the next greatest value than to find the
peak and the two adjacent values?

>
> dunno who Grandke is, but i think this method sorta sucks. &#2013266080;a
simple
> quadratic peak interpolation with three points (the discrete peak and
> its two adjacent neighbors) is better, both analytically ...

Analytically, Grandke's method is derived from and exact for the von
Hann weighting. The quadratic peak interpolator is exact for the log
of the power spectrum for the Gaussian window and very good for large
transforms or high sidelobe rejection Gaussian windows for the
discrete case. The quadratic method may be more robust to some
mismatched window choices and is commonly used by people who accept
the inaccuracy for the benefit of code reuse.

Dale B. Dalrymple

```
```>On Wed, 20 Apr 2011 14:28:13 -0500, creekmor <user@compgroups.net/>
>wrote:
>
>>I have a question about Grandke's method of frequency interpolation.  (I
suspect this question has been asked before).  Using the Hanning window
(and Schoukens, 1991 notation), he derives
>>
>>f_interp = (i + delta) * fo, where
>>
>>delta = (2*alpha - 1) / (alpha + 1), and
>>
>>alpha = abs(X(i+1) / X(i)), and
>>
>>{X(i), X(i+1)} includes the peak.  By definition,
>>
>>0 < delta < 1, which implies 1/2 < alpha < 2.  Why must
>>
>>alpha satisfy this?
>
>The units on delta are DFT bins, so if delta > 1 then you picked the
>wrong bin for the maximum.   The correction is just to find a finer
>estimate between bins, so the assumption is that the peak is already
>determined within one bin.
>
>
>Eric Jacobsen
>http://www.ericjacobsen.org
>http://www.dsprelated.com/blogs-1//Eric_Jacobsen.php
>
I agree with that; however, the quantity

alpha = abs(X(i+1) / X(i))

clearly could be between 0 and infty.  For example, if the peak is located
at bin # i, and the next largest bin # is i+1, then

0 < alpha < 1

while if the peak is located at bin # i+1 and the next largest bin # is i,
then

1 < alpha < infty

However, to ensure that the fractional bin spacing delta satisfies

0 < delta < 1,

alpha must then satisfy

1/2 < alpha < 2

which contradicts the above.  In comparison, the interpolation formula for
the rectangular window is

delta = alpha / (alpha+1)

which causes no similar problem.

```
```>On Wed, 20 Apr 2011 14:28:13 -0500, creekmor <user@compgroups.net/>
>wrote:
>
>>I have a question about Grandke's method of frequency interpolation.  (I
suspect this question has been asked before).  Using the Hanning window
(and Schoukens, 1991 notation), he derives
>>
>>f_interp = (i + delta) * fo, where
>>
>>delta = (2*alpha - 1) / (alpha + 1), and
>>
>>alpha = abs(X(i+1) / X(i)), and
>>
>>{X(i), X(i+1)} includes the peak.  By definition,
>>
>>0 < delta < 1, which implies 1/2 < alpha < 2.  Why must
>>
>>alpha satisfy this?
>
>The units on delta are DFT bins, so if delta > 1 then you picked the
>wrong bin for the maximum.   The correction is just to find a finer
>estimate between bins, so the assumption is that the peak is already
>determined within one bin.
>
>
>Eric Jacobsen
>http://www.ericjacobsen.org
>http://www.dsprelated.com/blogs-1//Eric_Jacobsen.php
>
I agree with that; however, the quantity

alpha = abs(X(i+1) / X(i))

clearly could be between 0 and infty.  For example, if the peak is located
at bin # i, and the next largest bin # is i+1, then

0 < alpha < 1

while if the peak is located at bin # i+1 and the next largest bin # is i,
then

1 < alpha < infty

However, to ensure that the fractional bin spacing delta satisfies

0 < delta < 1,

alpha must then satisfy

1/2 < alpha < 2

which contradicts the above.  In comparison, the interpolation formula for
the rectangular window is

delta = alpha / (alpha+1)

which causes no similar problem.

```
```On Apr 20, 2:01&#2013266080;pm, robert bristow-johnson
<r...@audioimagination.com>
wrote:

>
> so the discrete peak can be either X[i] or X[i+1]? &#2013266080;what if
you
> included the wrong "2nd place" with the discrete peak?
&#2013266080;e.g. &#2013266080;what if
> X[i] is the discrete peak, but you should have chosen X[i-1] instead
> of X[i+1]?

Is there some reason to think it is unreasonably more difficult to
locate the peak value and the next greatest value than to find the
peak and the two adjacent values?

>
> dunno who Grandke is, but i think this method sorta sucks. &#2013266080;a
simple
> quadratic peak interpolation with three points (the discrete peak and
> its two adjacent neighbors) is better, both analytically ...

Analytically, Grandke's method is derived from and exact for the von
Hann weighting. The quadratic peak interpolator is exact for the log
of the power spectrum for the Gaussian window and very good for large
transforms or high sidelobe rejection Gaussian windows for the
discrete case. The quadratic method may be more robust to some
mismatched window choices and is commonly used by people who accept
the inaccuracy for the benefit of code reuse.

Dale B. Dalrymple

```
```On Apr 20, 3:28=A0pm, creekmor <u...@compgroups.net/> wrote:
> I have a question about Grandke's method of frequency interpolation. =A0(=
I suspect this question has been asked before). =A0Using the Hanning window=
(and Schoukens, 1991 notation), he derives
>
> f_interp =3D (i + delta) * fo, where
>
> delta =3D (2*alpha - 1) / (alpha + 1), and
>
> alpha =3D abs(X(i+1) / X(i)), and
>
> {X(i), X(i+1)} includes the peak.

so the discrete peak can be either X[i] or X[i+1]?  what if you
included the wrong "2nd place" with the discrete peak?  e.g.  what if
X[i] is the discrete peak, but you should have chosen X[i-1] instead
of X[i+1]?

dunno who Grandke is, but i think this method sorta sucks.  a simple
quadratic peak interpolation with three points (the discrete peak and
its two adjacent neighbors) is better, both analytically and, since
division is required in both cases, in practice.  this method has a
name (i think i saw the person's name in Numerical Recipes) but i
dunno who it is.

r b-j
```
```On Wed, 20 Apr 2011 14:28:13 -0500, creekmor <user@compgroups.net/>
wrote:

>I have a question about Grandke's method of frequency interpolation.  (I suspect
this question has been asked before).  Using the Hanning window (and Schoukens, 1991
notation), he derives
>
>f_interp = (i + delta) * fo, where
>
>delta = (2*alpha - 1) / (alpha + 1), and
>
>alpha = abs(X(i+1) / X(i)), and
>
>{X(i), X(i+1)} includes the peak.  By definition,
>
>0 < delta < 1, which implies 1/2 < alpha < 2.  Why must
>
>alpha satisfy this?

The units on delta are DFT bins, so if delta > 1 then you picked the
wrong bin for the maximum.   The correction is just to find a finer
estimate between bins, so the assumption is that the peak is already
determined within one bin.

Eric Jacobsen
http://www.ericjacobsen.org
http://www.dsprelated.com/blogs-1//Eric_Jacobsen.php
```
```I have a question about Grandke's method of frequency interpolation.  (I suspect
this question has been asked before).  Using the Hanning window (and Schoukens, 1991
notation), he derives

f_interp = (i + delta) * fo, where

delta = (2*alpha - 1) / (alpha + 1), and

alpha = abs(X(i+1) / X(i)), and

{X(i), X(i+1)} includes the peak.  By definition,

0 < delta < 1, which implies 1/2 < alpha < 2.  Why must

alpha satisfy this?

---

```