xoreos  0.0.5
Namespaces | Macros | Functions | Variables
fft.cpp File Reference

(Inverse) Fast Fourier Transform. More...

#include <cassert>
#include <cstring>
#include "src/common/maths.h"
#include "src/common/cosinetables.h"
#include "src/common/util.h"
#include "src/common/fft.h"
Include dependency graph for fft.cpp:

Go to the source code of this file.

Namespaces

 Common
 

Macros

#define sqrthalf   (float)M_SQRT1_2
 
#define BF(x, y, a, b)
 
#define BUTTERFLIES(a0, a1, a2, a3)
 
#define BUTTERFLIES_BIG(a0, a1, a2, a3)
 
#define TRANSFORM(a0, a1, a2, a3, wre, wim)
 
#define TRANSFORM_ZERO(a0, a1, a2, a3)
 
#define PASS(name)
 
#define BUTTERFLIES   BUTTERFLIES_BIG
 
#define DECL_FFT(t, n, n2, n4)
 
#define pass   pass_big
 

Functions

static void Common::pass (Complex *z, const float *wre, unsigned int n)
 
static void Common::pass_big (Complex *z, const float *wre, unsigned int n)
 
static void Common::fft4 (Complex *z)
 
static void Common::fft8 (Complex *z)
 
static void Common::fft16 (Complex *z)
 
static void Common::fft32 (Complex *z)
 
static void Common::fft64 (Complex *z)
 
static void Common::fft128 (Complex *z)
 
static void Common::fft256 (Complex *z)
 
static void Common::fft512 (Complex *z)
 
static void Common::fft1024 (Complex *z)
 
static void Common::fft2048 (Complex *z)
 
static void Common::fft4096 (Complex *z)
 
static void Common::fft8192 (Complex *z)
 
static void Common::fft16384 (Complex *z)
 
static void Common::fft32768 (Complex *z)
 
static void Common::fft65536 (Complex *z)
 

Variables

static void(*const Common::fft_dispatch [])(Complex *)
 

Detailed Description

(Inverse) Fast Fourier Transform.

Definition in file fft.cpp.

Macro Definition Documentation

◆ BF

#define BF (   x,
  y,
  a,
 
)
Value:
{\
x = a - b;\
y = a + b;\
}

Definition at line 123 of file fft.cpp.

Referenced by Common::fft4(), and Common::fft8().

◆ BUTTERFLIES [1/2]

#define BUTTERFLIES (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
BF(t3, t5, t5, t1);\
BF(a2.re, a0.re, a0.re, t5);\
BF(a3.im, a1.im, a1.im, t3);\
BF(t4, t6, t2, t6);\
BF(a3.re, a1.re, a1.re, t4);\
BF(a2.im, a0.im, a0.im, t6);\
}

Definition at line 190 of file fft.cpp.

◆ BUTTERFLIES [2/2]

#define BUTTERFLIES   BUTTERFLIES_BIG

Definition at line 190 of file fft.cpp.

◆ BUTTERFLIES_BIG

#define BUTTERFLIES_BIG (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
float r0=a0.re, i0=a0.im, r1=a1.re, i1=a1.im;\
BF(t3, t5, t5, t1);\
BF(a2.re, a0.re, r0, t5);\
BF(a3.im, a1.im, i1, t3);\
BF(t4, t6, t2, t6);\
BF(a3.re, a1.re, r1, t4);\
BF(a2.im, a0.im, i0, t6);\
}

Definition at line 140 of file fft.cpp.

◆ DECL_FFT

#define DECL_FFT (   t,
  n,
  n2,
  n4 
)
Value:
static void fft##n(Complex *z)\
{\
fft##n2(z);\
fft##n4(z+n4*2);\
fft##n4(z+n4*3);\
pass(z,getCosineTable(t),n4/2);\
}
const float * getCosineTable(int bits)

Definition at line 193 of file fft.cpp.

◆ PASS

#define PASS (   name)
Value:
static void name(Complex *z, const float *wre, unsigned int n)\
{\
float t1, t2, t3, t4, t5, t6;\
int o1 = 2*n;\
int o2 = 4*n;\
int o3 = 6*n;\
const float *wim = wre+o1;\
n--;\
TRANSFORM_ZERO(z[0],z[o1],z[o2],z[o3]);\
TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1]);\
do {\
z += 2;\
wre += 2;\
wim -= 2;\
TRANSFORM(z[0],z[o1],z[o2],z[o3],wre[0],wim[0]);\
TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1]);\
} while (--n);\
}
#define TRANSFORM_ZERO(a0, a1, a2, a3)
Definition: fft.cpp:158

Definition at line 167 of file fft.cpp.

◆ pass

#define pass   pass_big

◆ sqrthalf

#define sqrthalf   (float)M_SQRT1_2

Definition at line 121 of file fft.cpp.

Referenced by Common::fft16(), and Common::fft8().

◆ TRANSFORM

#define TRANSFORM (   a0,
  a1,
  a2,
  a3,
  wre,
  wim 
)
Value:
{\
t1 = a2.re * wre + a2.im * wim;\
t2 = a2.im * wre - a2.re * wim;\
t5 = a3.re * wre - a3.im * wim;\
t6 = a3.im * wre + a3.re * wim;\
BUTTERFLIES(a0,a1,a2,a3)\
}

Definition at line 150 of file fft.cpp.

Referenced by Common::fft16(), and Common::fft8().

◆ TRANSFORM_ZERO

#define TRANSFORM_ZERO (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
t1 = a2.re;\
t2 = a2.im;\
t5 = a3.re;\
t6 = a3.im;\
BUTTERFLIES(a0,a1,a2,a3)\
}

Definition at line 158 of file fft.cpp.

Referenced by Common::fft16().