1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#ifndef FFT_H
#define FFT_H
/* this is from ddcmath.h */
#define DDC_PI (3.14159265358979323846)
/*============================================================================
fourier.h - Don Cross <dcross@intersrv.com>
http://www.intersrv.com/~dcross/fft.html
Contains definitions for doing Fourier transforms
and inverse Fourier transforms.
============================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
/*
** If you change anything here, make sure to check if
** the offsets used in the asm version of BandPass() are affected
*/
struct BandPassInfo
{
float center;
float bandwidth;
float C, D;
float a[3], b[2];
float bufferX[2];
float bufferY[2];
};
void BandPassInit(struct BandPassInfo *i, float center, float bw);
void BandPassSSE(struct BandPassInfo *ip, float *inbuffer, float *outbuffer, unsigned long samples);
void BandPass(struct BandPassInfo *ip, float *inbuffer, float *outbuffer, unsigned long samples);
/*
** fft() computes the Fourier transform or inverse transform
** of the complex inputs to produce the complex outputs.
** The number of samples must be a power of two to do the
** recursive decomposition of the FFT algorithm.
** See Chapter 12 of "Numerical Recipes in FORTRAN" by
** Press, Teukolsky, Vetterling, and Flannery,
** Cambridge University Press.
**
** Notes: If you pass ImaginaryIn = NULL, this function will "pretend"
** that it is an array of all zeroes. This is convenient for
** transforming digital samples of real number data without
** wasting memory.
*/
void fft_float (
unsigned NumSamples, /* must be a power of 2 */
int InverseTransform, /* 0=forward FFT, 1=inverse FFT */
float *RealIn, /* array of input's real samples */
float *ImaginaryIn, /* array of input's imag samples */
float *RealOut, /* array of output's reals */
float *ImaginaryOut ); /* array of output's imaginaries */
/*
int IsPowerOfTwo ( unsigned x );
unsigned NumberOfBitsNeeded ( unsigned PowerOfTwo );
unsigned ReverseBits ( unsigned index, unsigned NumBits );
*/
/*
** The following function returns an "abstract frequency" of a
** given index into a buffer with a given number of frequency samples.
** Multiply return value by sampling rate to get frequency expressed in Hz.
*/
/*
double Index_to_frequency ( unsigned NumSamples, unsigned Index );
*/
#ifdef __cplusplus
}
#endif
#endif /* FFT_H */
|