フーリエ変換を使用して実装された数値計算の問題があります。FFT を実装するために fftw を使用していますが、FFT される信号はかなり奇妙です。信号の半分は 1 つの配列からのもので、残りの半分は他の配列からのものです。現在のコードでは、データをコピーするだけです
#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 配列の場合はどうなりますか? 2d-fftw の入力配列が 2 つの別個の 2d 配列を参照することは可能ですか?