0
$\begingroup$

I have a periodic series of 360 values. How can I use the fftw c libraries to get the amplitude and phase of the first, second, third and fourth harmonic?

If I do this for N=360

fftw_plan_r2r_1d(N,input_array,output_array,FFTW_R2HC,FFTW_ESTIMATE);

I can get the 360-point Discrete Fourier Transform (DFT) where output_array[k] is the real portion of the kth element of a halfcomplex array while output_array[N-k] is the imaginary portion of the kth value.

So if I want the amplitude or magnitude(??) of the first harmonic should I do this?

ampl_1sth=sqrt(output_array[1]*output_array[1]+output_array[N-1]*output_array[N-1])

Is that correct? then the amplitude of the second harmonic will be the same but with output_array[2] and output_array[N-2] and so on right?

And then how can I get the phase of the first, second, third and fourth harmonic with the infor from the DFT?

For a reference to fftw see here www.fftw.org/fftw3.pdf

Thank you.

$\endgroup$
3
$\begingroup$

You just need to know how to compute magnitude and phase of a complex number $z=z_R+iz_I$:

$$|z|=\sqrt{z_R^2+z_I^2}\\ \arg\{z\}=\left\{\begin{array}{ll}0,&z_R=z_I=0\\ \pi/2&z_R=0,\; z_I>0\\ -\pi/2&z_R=0,\; z_I<0\\ \arctan\left(\frac{z_I}{z_R}\right),&z_R>0\\ \arctan\left(\frac{z_I}{z_R}\right)+\pi,&z_R<0,\;z_I\ge0\\ \arctan\left(\frac{z_I}{z_R}\right)-\pi,&z_R<0,\;z_I<0\\ \end{array}\right. $$

Luckily, the computation of the phase $\arg\{z\}$ is simplified by the existence of the function atan2 in most programming languages. Watch out, you need to use it like this:

$$\text{phase = }\text{atan2}(z_I,z_R)$$

$\endgroup$
  • $\begingroup$ Thanks a lot Matt. So if I want the amplitude and phase of the second harmonic I would have to just make those calculations with hc[2] and hc[N-2] right? In my case. $\endgroup$ – Atirag Jun 21 '13 at 15:21
  • $\begingroup$ Yes, that's it. $\endgroup$ – Matt L. Jun 21 '13 at 16:36
0
$\begingroup$

So if I want to calculate for example the fifth_harmonic (phase + amplitude) for every point in the time domain, I have to write:

fifth_harmonic[k] = ampl_5th * cos((5 * PI * k)/N-1 + phase_5th) 

or

fifth_harmonic[k] = ampl_5th * sin((5 * PI * k)/N-1 + phase_5th)

?

where:

K=0,......,N-1 are the sampling point in time domain

fifth_harmonic - amplitude for the fifth harmonic

phase_5th - phase for the fifth harmonic

which one I have to use: the sin or cos?

$\endgroup$
  • $\begingroup$ Is correct to say that if you expect a real output you have to use the cosin component? Otherwise yo have to use a combination of both cosin and sin component? $\endgroup$ – gioooooo Nov 25 '15 at 10:20

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.