-3

我正在尝试将 FFT(FFT的 this rosettacode.org C++ 实现void fft(CArray &x) { ... },还是我应该使用C 实现?)应用于此数据给出的数组:

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 &'

如何解决这种错误?


4

1 回答 1

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);
}
于 2016-07-05T10:14:56.423 回答