Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.

Using Fast Fourier Transforms in Symbian C++

From Wiki
Jump to: navigation, search
Article Metadata
Created: mbrockma (22 Aug 2007)
Last edited: hamishwillee (03 Feb 2012)

The Fast Fourier transform (FFT) is one of the key algorithms of digital signal processing (DSP). This article shows how to port an open source FFT library and use it in your Symbian C++ applications.


Using FFT/IFFT algorithms in S60 is quite simple with the following instructions.

  1. Download FFT algorithm by Laurent de Soras for C++.
  2. Port the algorithm for Symbian with the following minor modifications:
    • Set the used data type in fftreal.h:
      typedef TReal flt_t;
    • Create standard two-phased constructors:
      static CFFTReal* NewL(const TInt aLength);
      void ConstructL();
    • Add epoc32\include\libc to additional include directories and link against estlib.lib
    • Modify FFTReal to inherit CBase and add #include <e32base.h>

Using the algorithm

Normal FFT:

fftreal ->Fft(fft, x);

Inverse FFT:

fftreal->Ifft(fft, x);

Important As the FFT coefficients may have complex values, they will be presented in format: <Real values of coefficients 0-n><Complex values of coefficients 0-n>. This way the length of the FFT result array is the same as the number of FFT points.


#include "fftreal.h"
// FFT length must be a power of 2
TInt frame = 1024;
// Create objects
FFTReal* fftreal = FFTReal::NewL(frame);
FFTReal::flt_t * const x = new (ELeave) FFTReal::flt_t[frame];
FFTReal::flt_t * const fft = new (ELeave) FFTReal::flt_t[frame];
// Fetch the source signal from somewhere (eg. audio)
// Actual FFT calculation
fftreal ->Fft(fft, x);
// Modify FFT coefficients etc.
// Convert back to time domain, note the important Rescale()
// after every Ifft() call!
fftreal->Ifft(fft, x);
// Do something with the result
delete fft;
delete x;
delete fftreal;
This page was last modified on 3 February 2012, at 05:54.
42 page views in the last 30 days.