1
$\begingroup$

By Georg-Johann own work, CC BY-SA 3.0.

enter image description here

I’m trying to synthesise a sine wave using an IFFT at a frequency between bin centre frequencies.

Here are the details

-Samplerate : 44100
-FFT Size   : 512
-SignalFreq : 110 hz
-FreqPerBin : 86.1328125
-Bin1Freq   : 86.1328125
-Bin2Freq   : 172.265625

This desired Signal Frequency means that the signal is at midway between $\textrm{bin}_1$ and $\textrm{bin}_2$ (magnitudes) therefore I am wanting to split the synthesis magnitude across 3 bins: $\textrm{bin}_0 , \textrm{bin}_1$ and $\textrm{bin}_2$.

What am I doing wrong? Here’s how I’ve approached my calculation.

  • First I calculated the synthesis frequencies percentage between the bins.
    0.554195011337869  = (SignalFreq − Bin1Freq) ÷ (FreqPerBin ÷ 2)
  • Then I multiplied the percentage by PI ($\pi$) to convert it to radians (note I have assumed that bin centre frequency to the bin frequency midway between $\textrm{bin}_1$ and $\textrm{bin}_2 = \pi$
    1.74105497627516 = (0.554195011337869 * PI)
  • Then process it through the $\mathrm{sinc}$ function

    0.566059652593099 = Sin(1.74105497627516)/1.74105497627516
    Which give me the scaling value of $\textrm{bin}_1$

  • To calculate bin 2, I take the radian value of $\textrm{bin}_1$ and add PI to it (because this moves the location into the next bin for the $\mathrm{sinc}$ function )

    4.88264762986495 =  (bin1 radian value) 1.74105497627516 + PI

  • Process it through the $\mathrm{sinc}$ function

    -0.201845607081636 = sin(4.88264762986495)/4.88264762986495
    Which gives me the a value for $\textrm{bin}_2$. (I’m assuming this should be the absolute value)

  • To calculate bin 3, I take the radian value of $\textrm{bin}_1$ and subtract PI from it

    -1.40053767731463 =  (bin1 radian value) 1.74105497627516 - PI

  • Process it through the sinc function
    0.703687584403628 = sin(-1.40053767731463)/-1.40053767731463

My initial magnitude for $\textrm{bin}_1$ was $1.0$ so this means that splitting $\textrm{bin}_1$ across $\textrm{bin}_0, $\textrm{bin}_1 and $\textrm{bin}_2$ looks like this

bin0 = 0.703687584403628
bin1 = 0.566059652593099
bin2 = 0.201845607081636

This doesn’t seem right to me. It seems like bin0 (apart from this bin wanting to have a value of 0.0) has a value higher than the bin matching the frequency of the signal.

What am I doing wrong?

$\endgroup$
1
$\begingroup$

Your frequency in term of bin number is approximately:

SignalF / binDelta = 110 / 86.1 = 1.28

So, for the positive frequency image :

w0 = pi * (0 - 1.28)
w1 = pi * (1 - 1.28)
w2 = pi * (2 - 1.28) = pi * 0.72
wx = pi * (x - 1.28) 
binmag(x) = sin(wx) / wx

Also, one needs more than 3 points to avoid windowing artifacts.

But the big problem with Sinc interpolation for any f near bin 0 (DC) is that the signal plus its complex conjugate mirror image at the nearby negative frequency -f both wrap across bin 0, and thus constructively or destructively interfere within all those nearby bins, depending on the phase of f measured relative to the center of the window. See http://www.nicholson.com/rhn/dsp.html#4 for a more complete Sinc (or Dirichlet) interpolation formula. A similar problem occurs for frequencies near bin N/2 for an IFFT of length N. This creates a problem with IFFT (re)synthesis of any fractional frequencies near DC or N/2.

$\endgroup$
  • $\begingroup$ Thanks. and thanks for the link. It will take me a while to digest it completely. I was aware of the bin 0 consideration. What happens when the these 'interpolated' values overlap with other harmonics in the spectrum of a more complex waveform. i.e. how would they be mixed? $\endgroup$ – cixelsyd Jun 18 '16 at 21:10
  • $\begingroup$ @cixelsyd : Usually additively in any LTI system. $\endgroup$ – hotpaw2 Jun 19 '16 at 0:18
  • $\begingroup$ Does the sinc function have to be applied to the phases as well? I had assumed from reading Stephen Bernsee's site that the phases would all be identical. It is of course probably that I didn't fully understand what Stephen was explaining. $\endgroup$ – cixelsyd Jun 19 '16 at 2:54

Your Answer

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

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