入力オーディオサンプルに存在する周波数のリストを取得しようとしています。この結果を得るにはFFTを実行する必要があるようですが、(FFTWを使用して)FFTを実行すると、奇妙な答えが得られます。入力トーンの周波数を変更しても、FFTのサンプル長を変更しても、常に同じ場所にあります(最後から5か所、最後から46か所、その他数か所が散発的に表示されます)。私は何が間違っているのですか?これが私のコードです:
#include <fftw3.h>
#include <sndfile.h>
#include <math.h>
#include <algorithm>
int main (int argc, char * argv []) {
char *infilename ;
SNDFILE *infile = NULL ;
FILE *outfile = NULL ;
SF_INFO sfinfo ;
infile = sf_open("test.wav", SFM_READ, &sfinfo);
int N = pow(2, 10);
double samples[N];
sf_read_double(infile, samples, 1);
fftw_complex out[N];
fftw_plan p;
p = fftw_plan_dft_r2c_1d(N, samples, out, FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
for (int i=0; i<N; i++) {
printf("%f %f\n", out[i][0], out[i][1]);
}
sf_close (infile) ;
return 0 ;
}