LMMS
Loading...
Searching...
No Matches
fft.c File Reference
#include <math.h>
#include "fft.h"

Macros

#define FFT_MAXBITLEN   15
#define PI   3.1415926535897932384626433832795
#define sqrthalf   (d16[1].re)
#define VOL   *(volatile WDL_FFT_REAL *)&
#define TRANSFORM(a0, a1, a2, a3, wre, wim)
#define TRANSFORMHALF(a0, a1, a2, a3)
#define TRANSFORMZERO(a0, a1, a2, a3)
#define UNTRANSFORM(a0, a1, a2, a3, wre, wim)
#define UNTRANSFORMHALF(a0, a1, a2, a3)
#define UNTRANSFORMZERO(a0, a1, a2, a3)
#define fft_gen(x, y, z)
#define TMP(x)
#define TMP(x)

Functions

static void c2 (register WDL_FFT_COMPLEX *a)
static void c4 (register WDL_FFT_COMPLEX *a)
static void c8 (register WDL_FFT_COMPLEX *a)
static void c16 (register WDL_FFT_COMPLEX *a)
static void cpass (register WDL_FFT_COMPLEX *a, register const WDL_FFT_COMPLEX *w, register unsigned int n)
static void c32 (register WDL_FFT_COMPLEX *a)
static void c64 (register WDL_FFT_COMPLEX *a)
static void c128 (register WDL_FFT_COMPLEX *a)
static void c256 (register WDL_FFT_COMPLEX *a)
static void c512 (register WDL_FFT_COMPLEX *a)
static void cpassbig (register WDL_FFT_COMPLEX *a, register const WDL_FFT_COMPLEX *w, register unsigned int n)
static void c1024 (register WDL_FFT_COMPLEX *a)
static void c2048 (register WDL_FFT_COMPLEX *a)
static void c4096 (register WDL_FFT_COMPLEX *a)
static void c8192 (register WDL_FFT_COMPLEX *a)
static void c16384 (register WDL_FFT_COMPLEX *a)
static void c32768 (register WDL_FFT_COMPLEX *a)
void WDL_fft_complexmul (WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n)
void WDL_fft_complexmul2 (WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n)
void WDL_fft_complexmul3 (WDL_FFT_COMPLEX *c, WDL_FFT_COMPLEX *a, WDL_FFT_COMPLEX *b, int n)
static void u4 (register WDL_FFT_COMPLEX *a)
static void u8 (register WDL_FFT_COMPLEX *a)
static void u16 (register WDL_FFT_COMPLEX *a)
static void upass (register WDL_FFT_COMPLEX *a, register const WDL_FFT_COMPLEX *w, register unsigned int n)
static void u32 (register WDL_FFT_COMPLEX *a)
static void u64 (register WDL_FFT_COMPLEX *a)
static void u128 (register WDL_FFT_COMPLEX *a)
static void u256 (register WDL_FFT_COMPLEX *a)
static void u512 (register WDL_FFT_COMPLEX *a)
static void upassbig (register WDL_FFT_COMPLEX *a, register const WDL_FFT_COMPLEX *w, register unsigned int n)
static void u1024 (register WDL_FFT_COMPLEX *a)
static void u2048 (register WDL_FFT_COMPLEX *a)
static void u4096 (register WDL_FFT_COMPLEX *a)
static void u8192 (register WDL_FFT_COMPLEX *a)
static void u16384 (register WDL_FFT_COMPLEX *a)
static void u32768 (register WDL_FFT_COMPLEX *a)
static void __fft_gen (WDL_FFT_COMPLEX *buf, const WDL_FFT_COMPLEX *buf2, int sz, int isfull)
static unsigned int fftfreq_c (unsigned int i, unsigned int n)
static void idx_perm_calc (int offs, int n)
int WDL_fft_permute (int fftsize, int idx)
intWDL_fft_permute_tab (int fftsize)
void WDL_fft_init ()
void WDL_fft (WDL_FFT_COMPLEX *buf, int len, int isInverse)
static void r2 (register WDL_FFT_REAL *a)
static void v2 (register WDL_FFT_REAL *a)
static void two_for_one (WDL_FFT_REAL *buf, const WDL_FFT_COMPLEX *d, int len, int isInverse)
void WDL_real_fft (WDL_FFT_REAL *buf, int len, int isInverse)

Variables

static WDL_FFT_COMPLEX d16 [3]
static WDL_FFT_COMPLEX d32 [7]
static WDL_FFT_COMPLEX d64 [15]
static WDL_FFT_COMPLEX d128 [31]
static WDL_FFT_COMPLEX d256 [63]
static WDL_FFT_COMPLEX d512 [127]
static WDL_FFT_COMPLEX d1024 [127]
static WDL_FFT_COMPLEX d2048 [255]
static WDL_FFT_COMPLEX d4096 [511]
static WDL_FFT_COMPLEX d8192 [1023]
static WDL_FFT_COMPLEX d16384 [2047]
static WDL_FFT_COMPLEX d32768 [4095]
static int _idxperm [2<< FFT_MAXBITLEN]

Macro Definition Documentation

◆ fft_gen

#define fft_gen ( x,
y,
z )
Value:
__fft_gen(x,y,sizeof(x)/sizeof(x[0]),z)
unsigned z
Definition inflate.c:1589
int y
Definition inflate.c:1588
unsigned x[BMAX+1]
Definition inflate.c:1586
static void __fft_gen(WDL_FFT_COMPLEX *buf, const WDL_FFT_COMPLEX *buf2, int sz, int isfull)
Definition fft.c:966

◆ FFT_MAXBITLEN

#define FFT_MAXBITLEN   15

◆ PI

#define PI   3.1415926535897932384626433832795

◆ sqrthalf

#define sqrthalf   (d16[1].re)

◆ TMP [1/2]

#define TMP ( x)
Value:
case x: two_for_one(buf, d##x, len, isInverse); break;
unsigned d
Definition inflate.c:940
static void two_for_one(WDL_FFT_REAL *buf, const WDL_FFT_COMPLEX *d, int len, int isInverse)
Definition fft.c:1109

◆ TMP [2/2]

#define TMP ( x)
Value:
case x: if (!isInverse) c##x(buf); else u##x(buf); break;
struct huft * u[BMAX]
Definition inflate.c:1583
return c
Definition crypt.c:175

◆ TRANSFORM

#define TRANSFORM ( a0,
a1,
a2,
a3,
wre,
wim )

◆ TRANSFORMHALF

#define TRANSFORMHALF ( a0,
a1,
a2,
a3 )

◆ TRANSFORMZERO

#define TRANSFORMZERO ( a0,
a1,
a2,
a3 )
Value:
{ \
t5 = a2.re; \
t1 = a0.re - t5; \
t5 += a0.re; \
a0.re = t5; \
t8 = a3.im; \
t4 = a1.im - t8; \
t7 = a3.re; \
t6 = t1 - t4; \
a2.re = t6; \
t1 += t4; \
a3.re = t1; \
t8 += a1.im; \
a1.im = t8; \
t3 = a1.re - t7; \
t7 += a1.re; \
a1.re = t7; \
t6 = a2.im; \
t2 = a0.im - t6; \
t7 = t2 + t3; \
a2.im = t7; \
t2 -= t3; \
a3.im = t2; \
t6 += a0.im; \
a0.im = t6; \
}

◆ UNTRANSFORM

#define UNTRANSFORM ( a0,
a1,
a2,
a3,
wre,
wim )

◆ UNTRANSFORMHALF

#define UNTRANSFORMHALF ( a0,
a1,
a2,
a3 )

◆ UNTRANSFORMZERO

#define UNTRANSFORMZERO ( a0,
a1,
a2,
a3 )
Value:
{ \
t2 = a3.im; \
t3 = a2.im - t2; \
t2 += a2.im; \
t1 = a2.re; \
t4 = a3.re - t1; \
t1 += a3.re; \
t5 = a0.re - t1; \
a2.re = t5; \
t6 = a0.im - t2; \
a2.im = t6; \
t7 = a1.re - t3; \
a3.re = t7; \
t8 = a1.im - t4; \
a3.im = t8; \
t1 += a0.re; \
a0.re = t1; \
t2 += a0.im; \
a0.im = t2; \
t3 += a1.re; \
a1.re = t3; \
t4 += a1.im; \
a1.im = t4; \
}

◆ VOL

#define VOL   *(volatile WDL_FFT_REAL *)&

Function Documentation

◆ __fft_gen()

void __fft_gen ( WDL_FFT_COMPLEX * buf,
const WDL_FFT_COMPLEX * buf2,
int sz,
int isfull )
static

◆ c1024()

void c1024 ( register WDL_FFT_COMPLEX * a)
static

◆ c128()

void c128 ( register WDL_FFT_COMPLEX * a)
static

◆ c16()

void c16 ( register WDL_FFT_COMPLEX * a)
static

◆ c16384()

void c16384 ( register WDL_FFT_COMPLEX * a)
static

◆ c2()

void c2 ( register WDL_FFT_COMPLEX * a)
static

◆ c2048()

void c2048 ( register WDL_FFT_COMPLEX * a)
static

◆ c256()

void c256 ( register WDL_FFT_COMPLEX * a)
static

◆ c32()

void c32 ( register WDL_FFT_COMPLEX * a)
static

◆ c32768()

void c32768 ( register WDL_FFT_COMPLEX * a)
static

◆ c4()

void c4 ( register WDL_FFT_COMPLEX * a)
inlinestatic

◆ c4096()

void c4096 ( register WDL_FFT_COMPLEX * a)
static

◆ c512()

void c512 ( register WDL_FFT_COMPLEX * a)
static

◆ c64()

void c64 ( register WDL_FFT_COMPLEX * a)
static

◆ c8()

void c8 ( register WDL_FFT_COMPLEX * a)
static

◆ c8192()

void c8192 ( register WDL_FFT_COMPLEX * a)
static

◆ cpass()

void cpass ( register WDL_FFT_COMPLEX * a,
register const WDL_FFT_COMPLEX * w,
register unsigned int n )
static

◆ cpassbig()

void cpassbig ( register WDL_FFT_COMPLEX * a,
register const WDL_FFT_COMPLEX * w,
register unsigned int n )
static

◆ fftfreq_c()

unsigned int fftfreq_c ( unsigned int i,
unsigned int n )
static

◆ idx_perm_calc()

void idx_perm_calc ( int offs,
int n )
static

◆ r2()

void r2 ( register WDL_FFT_REAL * a)
inlinestatic

◆ two_for_one()

void two_for_one ( WDL_FFT_REAL * buf,
const WDL_FFT_COMPLEX * d,
int len,
int isInverse )
static

◆ u1024()

void u1024 ( register WDL_FFT_COMPLEX * a)
static

◆ u128()

void u128 ( register WDL_FFT_COMPLEX * a)
static

◆ u16()

void u16 ( register WDL_FFT_COMPLEX * a)
static

◆ u16384()

void u16384 ( register WDL_FFT_COMPLEX * a)
static

◆ u2048()

void u2048 ( register WDL_FFT_COMPLEX * a)
static

◆ u256()

void u256 ( register WDL_FFT_COMPLEX * a)
static

◆ u32()

void u32 ( register WDL_FFT_COMPLEX * a)
static

◆ u32768()

void u32768 ( register WDL_FFT_COMPLEX * a)
static

◆ u4()

void u4 ( register WDL_FFT_COMPLEX * a)
inlinestatic

◆ u4096()

void u4096 ( register WDL_FFT_COMPLEX * a)
static

◆ u512()

void u512 ( register WDL_FFT_COMPLEX * a)
static

◆ u64()

void u64 ( register WDL_FFT_COMPLEX * a)
static

◆ u8()

void u8 ( register WDL_FFT_COMPLEX * a)
static

◆ u8192()

void u8192 ( register WDL_FFT_COMPLEX * a)
static

◆ upass()

void upass ( register WDL_FFT_COMPLEX * a,
register const WDL_FFT_COMPLEX * w,
register unsigned int n )
static

◆ upassbig()

void upassbig ( register WDL_FFT_COMPLEX * a,
register const WDL_FFT_COMPLEX * w,
register unsigned int n )
static

◆ v2()

void v2 ( register WDL_FFT_REAL * a)
inlinestatic

◆ WDL_fft()

void WDL_fft ( WDL_FFT_COMPLEX * buf,
int len,
int isInverse )

◆ WDL_fft_complexmul()

void WDL_fft_complexmul ( WDL_FFT_COMPLEX * a,
WDL_FFT_COMPLEX * b,
int n )

◆ WDL_fft_complexmul2()

void WDL_fft_complexmul2 ( WDL_FFT_COMPLEX * c,
WDL_FFT_COMPLEX * a,
WDL_FFT_COMPLEX * b,
int n )

◆ WDL_fft_complexmul3()

void WDL_fft_complexmul3 ( WDL_FFT_COMPLEX * c,
WDL_FFT_COMPLEX * a,
WDL_FFT_COMPLEX * b,
int n )

◆ WDL_fft_init()

void WDL_fft_init ( )

◆ WDL_fft_permute()

int WDL_fft_permute ( int fftsize,
int idx )

◆ WDL_fft_permute_tab()

int * WDL_fft_permute_tab ( int fftsize)

◆ WDL_real_fft()

void WDL_real_fft ( WDL_FFT_REAL * buf,
int len,
int isInverse )

Variable Documentation

◆ _idxperm

int _idxperm[2<< FFT_MAXBITLEN]
static

◆ d1024

WDL_FFT_COMPLEX d1024[127]
static

◆ d128

WDL_FFT_COMPLEX d128[31]
static

◆ d16

WDL_FFT_COMPLEX d16[3]
static

◆ d16384

WDL_FFT_COMPLEX d16384[2047]
static

◆ d2048

WDL_FFT_COMPLEX d2048[255]
static

◆ d256

WDL_FFT_COMPLEX d256[63]
static

◆ d32

WDL_FFT_COMPLEX d32[7]
static

◆ d32768

WDL_FFT_COMPLEX d32768[4095]
static

◆ d4096

WDL_FFT_COMPLEX d4096[511]
static

◆ d512

WDL_FFT_COMPLEX d512[127]
static

◆ d64

WDL_FFT_COMPLEX d64[15]
static

◆ d8192

WDL_FFT_COMPLEX d8192[1023]
static