19 #ifdef USE_FFTW // the FFTW-based version
27 mSpectBuf = (fftwf_complex *) fftwf_malloc(mCSize *
sizeof(fftwf_complex));
31 mPlan = fftwf_plan_dft_r2c_1d(size, mSampBuf, mSpectBuf, FFTWF_FLAGS);
34 mPlan = fftwf_plan_dft_c2r_1d(size, mSpectBuf, mSampBuf, FFTWF_FLAGS);
39 FFTW_Wrapper::~FFTW_Wrapper() {
40 fftwf_destroy_plan(mPlan);
42 fftwf_free(mSpectBuf);
57 fftwf_complex * spPtr = mSpectBuf;
60 for (
unsigned j = 0; j < mCSize; j++, spPtr++)
61 *ioPtr++ = hypotf((*spPtr)[0], (*spPtr)[0]);
64 memcpy(out.buffer(0), mSpectBuf, (mCSize *
sizeof(fftwf_complex)));
68 for (
unsigned j = 0; j < in.mNumFrames; j++) {
70 *ioPtr++ = hypotf((*spPtr)[0], (*spPtr)[1]);
72 if ((*spPtr)[0] == 0.0f) {
73 if ((*spPtr)[1] >= 0.0f)
78 *inOutPh++ = atan((*spPtr)[1] / (*spPtr)[0]);
84 memcpy(mSpectBuf, in.buffer(0), (mCSize *
sizeof(fftwf_complex)));
88 memcpy(out.buffer(0), mSampBuf, (mSize *
sizeof(
sample)));
96 #ifdef USE_FFTREAL // the FFTReal-based version
101 :
Abst_FFT_W(size, type, forward), mFFT(size) {
106 FFTR_Wrapper::~FFTR_Wrapper() {
117 mFFT.do_fft(mTempBuf, ioPtr);
129 float normFactor = 1.0 / sqrt((
double) mSize);
130 for (
unsigned j = 0; j < mSize / 2; j++) {
132 cx_r(cplx) = *rPtr++ * normFactor;
133 cx_i(cplx) = *iPtr++ * normFactor;
137 ioPtr = out.buffer(0);
140 for (
unsigned j = 0; j < mSize / 2; j++)
141 *ioPtr++ = hypotf(*rPtr++, *iPtr++);
144 ioPtr = out.buffer(0);
148 for (
unsigned j = 0; j < mSize / 2; j++) {
149 *ioPtr++ = hypotf(*rPtr, *iPtr);
156 *inOutPh++ = atan(*iPtr / *rPtr);
169 for (
unsigned j = 0; j < mSize / 2; j++) {
171 *rPtr++ =
cx_r(cplx);
172 *iPtr++ =
cx_i(cplx);
176 mFFT.do_ifft(mTempBuf, oPtr);
199 mFFT = kiss_fft_alloc(size, dir, NULL, NULL);
204 KISSFFT_Wrapper::~KISSFFT_Wrapper() {
216 for (
int j = 0; j < mSize; j++) {
217 *cxPtr[0] = *ioPtr++;
228 kiss_fft(mFFT, (
const kiss_fft_cpx *) inBuf, (kiss_fft_cpx *) outBuf);
230 ioPtr = out.buffer(0);
236 for (
int j = 1; j < mSize; j++)
237 *ioPtr++ = hypotf(*rPtr++, *iPtr++);
243 kiss_fft(mFFT, (
const kiss_fft_cpx *) in.buffer(0), (kiss_fft_cpx *) outBuf);
247 for (
int j = 0; j < mSize; j++)
248 *ioPtr++ = cxPtr[j][0];