2016-07-05 22 views
-3

Ich versuche, FFT anzuwenden (this rosettacode.org C++ implementation of FFT: void fft(CArray &x) { ... }, oder soll ich die C implementation?) Zu einer Reihe von diesen Daten gegeben:Kann nicht Argument 1 von 'float *' konvertieren 'CArray &'

float *x 
VstInt32 sampleFrames // basically the length of the array 

Wenn ich tun:

fft(x); 

ich:

error C2664: 'void fft(CArray &)' : cannot convert argument 1 from 'float *' to 'CArray &' 

Wie diese Art von Fehler zu lösen?


+0

Wo der Rest des Codes ist? Sie haben den Fehler angezeigt, aber nicht den Code, der den Fehler verursacht hat – EdChum

+0

Sorry @EdChum, Sie haben Recht. Ich fügte hinzu: 'void fft (CArray & x) {...}' und ich nenne es mit 'fft (x);' – Basj

+0

Warum würdest du erwarten, dass das funktioniert? Im Link heißt es 'typedef' als 'typedef std :: valarray CArray;' was eindeutig kein 'float *' ist – EdChum

Antwort

1

Sie haben Array CArray Typ alias konvertieren:

http://coliru.stacked-crooked.com/a/20adde65619732f8

typedef std::complex<double> Complex; 
typedef std::valarray<Complex> CArray; 

void fft(CArray& x) 
{ 
} 

int main() 
{ 
    float sx[] = {1,2,3,4}; 

    float *x = sx; 
    int sampleFrames = sizeof(sx)/sizeof(sx[0]); 

    // Convert array of floats to CArray 
    CArray ca; 
    ca.resize(sampleFrames); 
    for (size_t i = 0; i < sampleFrames; ++i) 
     ca[i] = x[i]; 

    // Make call 
    fft(ca); 
} 
+0

Danke! Dies macht eine Kopie des Arrays in ein neues CArray. Gibt es nicht eine Möglichkeit, ein CArray von einem 'float *' zu erstellen, ohne es zu kopieren? – Basj

+0

Ich denke nicht, das Problem ist, dass Ihre Quelldaten vom Typ Float sind und Sie müssen es in komplexe konvertieren , sogar C-Version würde erfordern, zu kopieren. Sie können alle Valarray-Konstruktoren hier finden: http://en.cppreference.com/w/cpp/numeric/valarray/valarray – marcinj

+0

Wahr, danke @ MarcinJędrzejewski. Das lässt mich denken, ich brauche sowieso rfft (echte FFT wie hier: http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.rfft.html) – Basj