2016-07-05 56 views
-3

我想申請FFT轉換參數1(this rosettacode.org C++ implementation of FFTvoid fft(CArray &x) { ... },或者我應該使用C implementation?)由該數據給出的數組:無法從「浮動*」到「CARRAY&」

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

當我做:

fft(x); 

我得到:

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

如何解決這種類型的錯誤?


+0

哪裏代碼的其餘部分?你已經顯示了錯誤,但沒有導致錯誤的代碼 – EdChum

+0

對不起@EdChum,你是對的。我補充說:'void fft(CArray&x){...}',我用'fft(x);' – Basj

+0

調用它,爲什麼你會期望它工作?在鏈接中它是'typedef'ed'typedef std :: valarray CArray;'顯然不是'float *' – EdChum

回答

1

您將有數組轉換爲CARRAY類型別名:

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

謝謝!這會將數組的一個拷貝拷貝到一個新的'CArray'中。沒有辦法從一個'float *'製作一個CArray,而不需要複製? – Basj

+0

我不這麼認爲,問題是你的源數據是浮點類型,你需要將它轉換爲複雜的,即使是C版本也需要複製。你可以在這裏找到所有的valarray構造函數:http://en.cppreference.com/w/cpp/numeric/valarray/valarray – marcinj

+0

正確,謝謝@MarcinJędrzejewski。這讓我想我仍然需要rfft(真正的FFT像這裏:http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.rfft.html) – Basj