A simple FFT example
28 kwietnia 2010 22:03
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 * * * **** ***************** ********