将fftw_complex转换为std::complex



我使用FFTW来计算复向量的FFT。std::vector<std::complex<double>>成功转换为fftw_complex数组,但现在我需要再次将输出aray(一个具有fftw复杂类型变量的数组(转换为std::vector<std::complex<double>>,但无法做到这一点。我该如何转换?

矢量以这种方式转换为fftw_complex数组:

for (int i = 0 ;  i< fftrate ; i++){
memcpy( &fftwarray[i], &inputvector[i]sizeof(fftw_complex ) );
}

但当我想用转换回输出时,我遇到了分段错误

for (int j = 0 ;  j< fftrate ; j++){
memcpy( &outputvector[j], &fftwarray[j],sizeof(fftw_complex ) );
}

我也尝试过重新诠释选角,但没有成功。

EDIT:程序示例:

std::vector<std::complex<double>>input,output ;
std::vector<std::complex<double>> fft (void) {
fftw_complex in[fftrate], out[fftrate];
for (int i = 0 ;  i< fftrate ; i++){
memcpy( &in[i], &input[i], sizeof( fftw_complex ) );
}
fftw_plan p=fftw_create_plan(fftrate, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_one(p, in, out);
for (int j = 0 ;  j< fftrate ; j++){
memcpy( &output[j], &out[j], sizeof( fftw_complex ) );
}

return output;
}

来自std::complex:

对于指向名为pcomplex<T>数组的元素和任何有效数组索引i的任何指针,reinterpret_cast<T*>(p)[2*i]是复数p[i]的实部,reinterpret_cast<T*>(p)[2*i + 1]是复数p[i]的虚部。

由于这些是有保证的,只需完全跳过fftw_complex阵列:

std::vector<std::complex<double>> fft() {
output.resize(input.size());

fftw_plan p = fftw_create_plan(fftrate, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_one(p, reinterpret_cast<double*>(input.data()),
reinterpret_cast<double*>(output.data()));
return output;
}

最新更新