FFTとIFFTを実行した後、ヘッドホンでノイズしか聞こえません...コードは次のとおりです。
double* spectrum = new double[n];
fftw_plan plan;
plan = fftw_plan_r2r_1d(n, data, spectrum, FFTW_REDFT10, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
plan = fftw_plan_r2r_1d(n, spectrum, data, FFTW_REDFT01, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
たぶん私は間違ったFFTタイプを選択しましたか?
PSデータは初期信号です
アップデート
さて、コードは
fftw_complex* spectrum = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
fftw_plan plan;
plan = fftw_plan_dft_r2c_1d(n, data, spectrum, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
plan = fftw_plan_dft_c2r_1d(n, spectrum, data, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
問題は同じままで、データ配列が破損しています。
更新#2
したがって、問題は変換サイズと正規化にあります。実在のFFTW_REDFT10およびFFTW_REDFT01変換を使用する場合、使用する必要のある変換サイズはどれですか?2 * n?または、他の何か?次に、各要素を2 * nで割って、出力信号を正規化する必要がありますか?
返信してくれてありがとう。
更新#3
再度返信していただきありがとうございます。私はあなたの助けを借りて問題を解決しました。動作するコードは次のとおりです。
// FFT
fftw_complex* spectrum = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
fftw_plan plan;
plan = fftw_plan_dft_r2c_1d(n, data, spectrum, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
// some filtering here
// IFFT
plan = fftw_plan_dft_c2r_1d(n, spectrum, data, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
// normalizing
for (int i = 0; i < n; i++) {
data[i] = data[i] / n;
}