A simple FFT example

28 kwietnia 2010 22:03 tags:

The following example shows how to use FFT to calculate spectrum of a signal. The input signal is a sum of two sine waves (125 and 700 Hz) sampled at 2 kHz. The magnitude spectrum is plotted to the console.

#include "aquila/global.h"
#include "aquila/source/generator/SineGenerator.h"
#include "aquila/transform/FftFactory.h"
#include "aquila/tools/TextPlot.h"

int main()
{
    // input signal parameters
    const std::size_t SIZE = 64;
    const Aquila::FrequencyType sampleFreq = 2000;
    const Aquila::FrequencyType f1 = 125, f2 = 700;

    Aquila::SineGenerator sineGenerator1 = Aquila::SineGenerator(sampleFreq);
    sineGenerator1.setAmplitude(32).setFrequency(f1).generate(SIZE);
    Aquila::SineGenerator sineGenerator2 = Aquila::SineGenerator(sampleFreq);
    sineGenerator2.setAmplitude(8).setFrequency(f2).setPhase(0.75).generate(SIZE);
    auto sum = sineGenerator1 + sineGenerator2;

    Aquila::TextPlot plt("Input signal");
    plt.plot(sum);

    // calculate the FFT
    auto fft = Aquila::FftFactory::getFft(SIZE);
    Aquila::SpectrumType spectrum = fft->fft(sum.toArray());

    plt.setTitle("Spectrum");
    plt.plotSpectrum(spectrum);

    return 0;
}

The output should look like this:

Input signal
   * *              *                *             *            
                   *              * *               * *         
  * * *               *            *                 *          
                 *   *                                          
                  *    *              **          *             
                                 *               *              
**     **                               *       *      *

                *              **                       **      
                        **                                     *
         *    *                                                 
               *                         **    *              * 
           *              * *                **                 
          *                   *            *              ***   
             *               *                                  
            *              *                *                *

Spectrum
    *












                      *         
                       *        
**** *****************  ********
« Return to list