18 #ifndef PIC_UTIL_FFT_HPP 19 #define PIC_UTIL_FFT_HPP 24 #include "../base.hpp" 25 #include "../util/math.hpp" 67 out =
new float[n * 2];
72 for(
unsigned int i = 0; i < n ; i++) {
73 unsigned int re =
RE(i);
74 unsigned int im =
IM(i);
80 for(
unsigned int j = 0; j < n ; j++) {
82 float angle = -
C_PI_2 * i_f * float(j) / n_f;
83 out[re] += in[j] * cosf(angle);
84 out[im] += in[j] * sinf(angle);
100 for(
int i = nbit; i>0; i--) {
101 unsigned int bit = (n >> (i - 1)) & 0x00000001;
102 out += bit << (nbit - i);
118 out =
new float[n * 2];
123 for(
unsigned int i = 0; i< n; i++) {
126 out[
RE(i_rev)] = in[i];
127 out[
IM(i_rev)] = 0.0f;
130 for(
unsigned int s = 1; s <= logn; s++) {
132 float angle = -
C_PI_2 / float(m);
137 for(
unsigned int j = 0; j < (m / 2); j++) {
138 for(
unsigned int k = j; k < n; k += m) {
139 unsigned int ind = k + m / 2;
146 out[
RE(k)] = tmp0.real();
147 out[
IM(k)] = tmp0.imag();
151 out[
RE(ind)] = tmp1.real();
152 out[
IM(ind)] = tmp1.imag();
168 float *values =
new float[n];
169 float *values_fft =
new float[n * 2];
170 float *values_dft =
new float[n * 2];
172 for(
int i=0;i<n;i++) {
182 for(
int i=0;i<n;i++) {
183 printf(
"%3.3f %3.3f\n", values_fft[
RE(i)], values_fft[
IM(i)]);
186 DFT1D(values, n, values_dft);
188 for(
int i=0;i<n;i++) {
189 printf(
"%3.3f %3.3f\n", values_dft[
RE(i)], values_dft[
IM(i)]);
PIC_INLINE unsigned int RE(unsigned int x)
RE.
Definition: fft.hpp:34
PIC_INLINE float * FFTIterative1D(float *in, unsigned int n, float *out=NULL)
FFTIterative1D.
Definition: fft.hpp:115
const float C_PI_2
Definition: math.hpp:52
PIC_INLINE float * DFT1D(float *in, unsigned int n, float *out=NULL)
DFT1D.
Definition: fft.hpp:64
PIC_INLINE unsigned int bitReversal(unsigned int n, unsigned int nbit)
bitReversal
Definition: fft.hpp:97
std::complex< double > complexd
complexd
Definition: fft.hpp:55
#define PIC_INLINE
Definition: base.hpp:33
std::complex< float > complexf
complexf
Definition: fft.hpp:50
PIC_INLINE int log2(int n)
log2 computes logarithm in base 2 for integers.
Definition: saturation.hpp:302
PIC_INLINE void fftTest()
fftTest
Definition: fft.hpp:165
Definition: bilateral_separation.hpp:25
PIC_INLINE unsigned int IM(unsigned int x)
IM.
Definition: fft.hpp:43