FFTW Amplitudenspectrum



  • Hallo!

    bin auf eure Hilfe angewiesen, ich hoffe dass da jamand, der mir weiterhelfen kann.

    nachdem ich Funktionswerte geplottet habe möchte ich nun ihr Amplitudenspektrum auch plotten, aber ich habe erstmal da Problem sein Werte zu brechnen, die Versuche ich mit Hilfe von C++ Library FTTw3/mffm zu bestimmen.
    habe zwar ein Beispiel im Internen gefunden, in dem gezeigt wird wie man power Spectrum berechnet wird aber würde Amlitudenspectum berechen, weis Jemand wie man die Ampltudenwerte darauslesen kann nach dem Transformation mit der Methode fwdTransform() .

    Hier ist das Beispiel:

    complexFFTData fftData(count);
          complexFFT fft(&fftData);
    
           X=2*pi/count;
          for (int i=0;i<count;i++){
             val=&X;
             c_re(fftData.in[i])=(double)sin(2*pi*X*i)+sin(4*pi*X*i) ;
             c_im(fftData.in[i])=0;
         }
    
          fft.fwdTransform();           //FFT transformation
    
          fftData.compPowerSpec();
    
          for (int i=0; i<psize; i++){
           Y[i]=fftData.power_spectrum[i];
    
           }
    

    hier ist link da wo das Beispiel ist:

    http://mffmfftwrapper.sourceforge.net/html/complexFFT_8H-source.html
    http://mffmfftwrapper.sourceforge.net/html/complexFFTExample_8cc-example.html#_a1

    bin für jede Tipps sehr Dankbar

    Gruß
    Cmark



  • Mal so aus der Doku zusammengelesen (die solltest Du lesen):

    std::size_t const signal_samples = 1024;
    
          realFFTData fftData(signal_samples); //reelle FFT
          realFFT fft(&fftData); //reelle FFT
    
          double const pi_2 = 2. * std::acos(-1.);
          double const phase_inc = pi_2 * .2; //Frequenz (0.2[e]omega[/e])
          for(std::size_t n = 0; n != signal_samples; ++n)
          {
             c_re(fftData.in[i]) = std::sin(std::fmod(n * phase_inc, pi_2));
          }
    
          fft.fwdTransform();           //FFT transformation
    
          fftData.sqrtPowerSpec(); //Amplitudenspektrum
    
          for(std::size_t n = 0; n != signal_samples; ++n)
          {
             std::cout << fftData.power_spectrum[n];
          }
    

    Da die Doku ziemlich dünne ist, kann ich allerdings nur mutmaßen, dass das so funktioniert.


Anmelden zum Antworten