c++でfftw(自己定義のfft関数を置き換える)を学んでいます。古いコードでは、アルゴリズムは std::vector サンプル ストレージで設計されています。ドキュメントによると、キャストを使用して fftw データ型をデータ (std::vector) とやり取りします。
#include <fftw3.h>
#include <vector>
#include <iostream>
#include <complex>
using namespace std;
void main(void)
{
std::vector< complex<double> > x(4);
x[0] = std::complex<double>(0.0, 0.0);
x[1] = std::complex<double>(1.0, 0.0);
x[2] = std::complex<double>(0.0, 2.0);
x[3] = std::complex<double>(3.0, 3.0);
// print the vector, looks good
for (int i=0; i<4; i++)
{
cout << x[i] << endl;
}
// refer fftw datatype to the std::vector by casting
fftw_complex* in = reinterpret_cast<fftw_complex*>(&x[0]);
// print in reference, gives random numbers
for (int i=0; i<4; i++)
{
cout << *in[i*2] << " " << *in[i*2+1] << endl;
}
}
しかし、実際には正しい場所を指していないようで、代わりに乱数が表示されます。上記の質問に加えて、私の目的は 8 つの要素 (例) を持つベクトルを生成することです。最初の 4 つの要素は std::vector を参照しますが、最後の 4 つの要素は定数として初期化されます。*in ベクトルの最初のものを指し、次に別の場所で 4 つの定数値を指している可能性があるので、「in」で fftw できますか? ありがとう。