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#_a1bin 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.