Can an FFT be used to extract individual sinusoids from a set of data points?

In summary, the conversation discusses using a fast Fourier transform (FFT) to extract individual sinusoids from a set of discrete data points. The FFT value for each harmonic can be interpreted as a combination of cosine and sine functions, allowing for the creation of a Fourier series representation of the data. The conversation also mentions using FFT to transform shapes and images, such as identifying the type of planes in a satellite photo or removing blur from a photo.
  • #1
jameslat
28
0
Hello,

Thank you for taking time to read my post.

Background: I have a accelerometer project that I am playing with that gives me the acceleration of the object. I can plot this data and it looks very nice. I want to integrate this to get the velocity and then integrate it again to get the position over time.

Question: is there a way to extract the individual sinusoids out of a fast Fourier transform of a discrete set of data points?
I understand that the FFT of the set of data points gives me the amplitude of each sinusoids for its respective frequency. But how can I extract the Fourier series representation of my set of data points?
 
Mathematics news on Phys.org
  • #2
A FFT will give you a complex value for each harmonic in your set of discrete data points.

Say that the FFT value of the 4. harmonic is ( 0.3 + 0.5i ), you may interprete it as 0.3*cos(4ωt) + 0.5*sin(4ωt)

. . . if I understand you correct.
 
  • Like
Likes jameslat
  • #3
Works perfectly! I can't believe that it was that straight forward. You have been very helpful. Here is my python code as a contribution to the community (this is obviously for a dummy signal):


Python:
import numpy as n
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft, fftfreq

#create our dummy signal
x=[]
xaxis = n.linspace(0,2*n.pi,num=1000)
for i in range(0,xaxis.size):
    x.append( n.exp(-xaxis[i])*n.sin((xaxis[i])))

#take the fft of the dummy signal
xfft = fft(x)

#find out what the 10 main frequencies are and add them to a list
main =[]
tempMain = 0;
for i in range(0,999):
    for j in range(-10,10):
        a_ = n.real(xfft[j])
        b_ = n.imag(xfft[j])
        w_ = 1 #really w=2pi*f, f=1/T, T=2pi therefore w=1
        n_ = 1000
       
        tempMain += (a_*n.cos(j*w_*xaxis[i])+b_*n.sin(j*w_*xaxis[i]))/n_
       
       
       
    main.append(tempMain)
    tempMain = 0

#this will reverse the order of the list. FFT will cause the data to be mirrored.
main=main[::-1]

#plot the beauties. blue is the original, main is the fit
plt.figure()
plt.plot(a,'b')
plt.plot(main, 'r')
plt.show()
Thanks again!
 
  • #4
Well, I have recently done some experiments, transforming some shapes like the letters 'E' and 'F'.

Then I calculate the transfer function from 'F' to 'E':

FFT(H) = FFT('E') / FFT('F').

Now, if I transform the letter 'O' and calculate:

IFFT( FFT('O') * FFT(H) ), will I get a 'Q' ??
 
  • #5
will iFFT( FFT('O') * FFT(H) ), result in a backwards 9?
I haven't ever find anything like that before. It seems interesting though.
 
  • #6
You can do a lot with these transforms.

Say you have a sattelite photo of a milititary airport and you want to know how many jet fighters of which type is parked in this airport, you can employ a lot of people with magnifying glasses to count these planes. But also you could stuff the photo into a computer, that will place silhouttes of the planes into a complex plane. Now the computer can convert edge pixels of the silhouette to complex numbers, that can be FFT-transformed.

The 0. harmonic tells about the mean illumination in the photo. That's not interesting, so all harmonics in the transform is divided by the 0. harmonic to "standardize" the illumination.

The 1. harmonic tells about in which direction the plane is parked. Different directions could be confusing to the computer, but if you divide all the harmonics by the 1. harmonic, so that the 1. harmonic becomes ( 1 + 0i ), all the planes will be parked in the same direction, and with the same size. In this way you have made a "stadardized" FFT of the jet plane, which you could regard as a "finger print" of the plane.

Now the computer just have to find a matching finger print in a look up table to identify the type of plane.

Another example is to remove blur in a photo due to linear motion of an object ( passing car, where the registration number cannot be read due to blur ).
 

1. What is FFT and how does it work?

The FFT (Fast Fourier Transform) is an algorithm used to efficiently compute the Discrete Fourier Transform (DFT) of a sequence or signal. It works by decomposing a sequence into smaller subproblems and then combining the results to produce the final DFT. It is widely used in many applications, including extracting sinusoids from signals.

2. How do I extract sinusoids from FFT?

To extract sinusoids from FFT, you first need to obtain the FFT of the signal using an FFT algorithm. Then, you can identify the dominant frequencies in the FFT spectrum, which correspond to the sinusoids in the signal. You can also use techniques like windowing or filtering to enhance the sinusoids in the FFT spectrum before extracting them.

3. What information can I get from extracting sinusoids from FFT?

Extracting sinusoids from FFT can provide you with important information about a signal, such as its frequency components and their amplitudes. This can be useful for tasks like signal processing, filtering, and analysis. It can also help you identify and remove noise or unwanted frequencies from a signal.

4. Can I extract sinusoids from non-periodic signals using FFT?

Yes, you can extract sinusoids from non-periodic signals using FFT. However, since non-periodic signals do not have a single dominant frequency, the sinusoids extracted from FFT may not accurately represent the signal. In such cases, other techniques like wavelet analysis may be more suitable for extracting frequency components.

5. What are the limitations of extracting sinusoids from FFT?

One limitation of extracting sinusoids from FFT is that it assumes the signal to be periodic. If the signal is not periodic, the extracted sinusoids may not accurately represent the signal. Additionally, noise in the signal can affect the accuracy of the extracted sinusoids. Other limitations include the resolution of the FFT and the sampling rate of the signal.

Similar threads

  • Programming and Computer Science
Replies
3
Views
2K
  • General Math
Replies
4
Views
5K
Replies
1
Views
1K
Replies
3
Views
1K
Replies
2
Views
936
Replies
5
Views
361
Replies
1
Views
1K
Replies
7
Views
2K
Replies
3
Views
4K
Back
Top