Hi Fons and you other FFT initiates,
I have written a simple test program (end of this mail) that produces two sine waves one octave apart. I used the FFTW_R2HC plan, which operates on two double arrays. The output can be read as two halves:
up to half the array:
output[k] = real[k] the real part of the FFT
The second half:
output[size -k] = imaginary[k], the imaginary/complex part of the FFT
The output shows 0 for the first to real values, but the same strength for the first two imaginary parts. Is this to be expected?

Best wishes (code below),

Jeanette
*** fft_test.cpp ***
// g++ -o fft_test fft_test.cpp -lfftw3 -lm
#include <iostream>
#include <cmath>
#include <fftw3.h>

using namespace std;

int main()
{
        // Create input, output arrays and allocate them
        double *in, *out;
        in = (double *) fftw_malloc(sizeof(double) * 2048);
        out = (double *) fftw_malloc(sizeof(double) * 2048);

        // Create the fftw plan: halfcomplex out[k] = real[k] out[size-k] = 
im[k]
        fftw_plan conv_plan = fftw_plan_r2r_1d(2048, in, out, FFTW_R2HC, 
FFTW_ESTIMATE);

        // Create input, two sinewaves one octave apart
        for (int i = 0;i<2048;i++)
        {
                in[i] = sin(M_PI * i/1024) + sin(M_PI * i/512);
        }

        // Now execute the FFT on the in-array
        fftw_execute(conv_plan);

        // "beautify" the output, by setting everything below 10^(-10) to zero
        for (int i = 0;i<2048;i++)
        {
                if (abs(out[i]) < 1e-10)
                {
                        out[i] = 0;
                }
        }

        // Print the first 16 harmonics, both real and imaginary parts (see
        // half-complex fftw plan FFTW_R2HC)
        for (int i = 0;i<16;i++)
        {
                cout << "Harm[" << i << "] = " << out[i] << ", " << out[2047 - i] 
<< endl;
        }

        // Free everything
        fftw_destroy_plan(conv_plan);
        fftw_free(in);
        fftw_free(out);
        return 0;
}
*** end of file ***

--
 * Website: http://juliencoder.de - for summer is a state of sound
 * Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
 * Audiobombs: https://www.audiobombs.com/users/jeanette_c
 * GitHub: https://github.com/jeanette-c

But tell me what happens when it stops? <3
(Britney Spears)
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
https://lists.linuxaudio.org/listinfo/linux-audio-dev

Reply via email to