我有一个用傅立叶变换实现的数值计算问题。我正在使用 fftw 来实现 FFT,但被 FFT 处理的信号非常奇怪。一半的信号来自一个阵列,另一半来自另一个阵列。在当前代码中,我只是复制数据
#include <iostream>
#include <vector>
#include <complex>
#include <fftw3.h>
using namespace std;
void main(void)
{
std::vector< std::complex<double> > V1(4);
std::vector< std::complex<double> > V2(4);
std::vector< std::complex<double> > V(8);
for (int i=0; i<4; i++) V[i] = V1[i] = std::complex<double>(i, i);
for (int i=0; i<4; i++) V[i+4] = V2[i] = std::complex<double>(i+4, i+4);
fftw_complex* in = reinterpret_cast<fftw_complex*>(&V[0]);
fftw_plan plan = fftw_plan_dft_1d(8, in, in, FFTW_FORWARD, FFTW_MEASURE);
fftw_execute(plan);
}
这段代码工作得很好。但我想让大数组引用 V1 和 V2 而不是复制数据。我尝试以下代码但它不起作用,它说输入数组是**(双指针?)
std::vector< std::complex<double> > V1(4);
std::vector< std::complex<double> > V2(4);
fftw_complex *in[8];
for (int i=0; i<4; i++) in[i] = reinterpret_cast<fftw_complex*>(&V1[i]);
for (int i=0; i<4; i++) in[i+4] = reinterpret_cast<fftw_complex*>(&V2[i]);
for (int i=0; i<4; i++) V1[i] = std::complex<double>(i, i);
for (int i=0; i<4; i++) V2[i] = std::complex<double>(i+4, i+4);
fftw_plan plan = fftw_plan_dft_1d(8, in, in, FFTW_FORWARD, FFTW_MEASURE);
fftw_execute(plan);
无论如何都要将“参考”数组作为fftw的输入吗?二维数组会发生什么,是否可以让 2d-fftw 的输入数组引用两个单独的二维数组?