我用fftw库对一维数组double array[ ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }进行FFT变换,但是得到的结果与matlab的结果不一样,两种fft结果前六个数据是一样的,后三个数据就很奇怪。原代码如下:
#include "fftw3.h"
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//****************************ifft********************************
double array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
double* out;
double* err;
int i, size = 10;
fftw_complex* out_cpx;
fftw_plan fft;
fftw_plan ifft;
out_cpx = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * size);
out = (double*)malloc(size * sizeof(double));
err = (double*)malloc(size * sizeof(double));
fft = fftw_plan_dft_r2c_1d(size, array, out_cpx, FFTW_ESTIMATE); //Setup fftw plan for fft
fftw_execute(fft);
cout << "fft输出结果" << endl;
for (int k = 0; k < size; k++)
{
cout << "(" << out_cpx[k][0] << "," << out_cpx[k][1] << ") ";
}
cout << endl;
ifft = fftw_plan_dft_c2r_1d(size, out_cpx, out, FFTW_ESTIMATE); //Setup fftw plan for ifft
fftw_execute(ifft);
for (i = 0; i < size; i++)
{
err[i] = (array[i] - out[i]);
printf("%f\t%f\n", (array[i]), out[i] / size);//需要做归一化处理
}
fftw_destroy_plan(fft);
fftw_destroy_plan(ifft);
fftw_free(out_cpx);
free(err);
free(out);
//***************************************ifft*********************
system("pause");//暂停
return 0;
}
c++运行结果
matlab运行结果
matlab代码: