将fftw_complex转换为std::complex
conversion fftw_complex to 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
:
对于指向名为
p
的complex<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;
}
相关文章:
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 仅当类型为 std::complex 时,才进行缩放
- std::complex<> in C++ 数学特殊函数:技术规范或提案
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 将分配的内存与基本数据类型一起使用时,是否需要新放置? std::complex?
- (如何)我可以使用openmp矢量化"std::complex<double>"吗?
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- _Complex 和 std::complex 之间的 C/C++ 互操作
- 优化两个 std::vector<std::complex> 的元素乘积,使用 <float>fftw_malloc() 分配
- 英特尔 ICPC 和 C++14:如何构建 std::complex
- C99 中的_Complex类型在 C++ 中的行为是否类似于 std::complex<>?
- 可以使用 memset 来填充 std::complex<float>s 数组吗?
- 我越来越"invalid conversion from `void*` to `std::complex<double>*"
- 在C++中使用 std::complex 创建复数无穷大<T>
- 重载标准运算符<<对于 std::complex
- 使用 std::complex <double>时使用 GCC4.9.1 的段错误
- C++ NAN、INF(非收敛)的 std::complex<> 数据类型测试
- 使用 std::complex<double> 作为 std::map 键
- 用SWIG包裹一个4维标准::向量 std::complex。<float>