这样FFT运算是否正确? C++程序设计分类下还有100分

来源:百度知道 编辑:UC知道 时间:2024/05/18 20:21:38
使用FFT后只对FFT后的部分结果进行IFFT,问这样是否能表达这部分部分结果的时域信息.这样的结果相位和频率有什么区别,求救

void FFT(complex<double> * TD,complex<double> * FD, int r)
{
long count;
int i,j,k;
int bfsize,p;
double angle;
complex<double> *W,*X1,*X2,*X;

count = 1 << r;

W = new complex<double>[count / 2];
X1 = new complex<double>[count];
X2 = new complex<double>[count];

for(i = 0; i < count / 2; i++)
{
angle = -i * PI * 2 / count;
W[i] = complex<double> (cos(angle), sin(angle));
}

memcpy(X1, TD, sizeof(complex<double>) * count);

for(k = 0; k < r; k++)
{
for(j = 0; j < 1 << k; j++)
{
bfsize = 1 << (r-k);
for(i = 0; i < bfsize / 2; i++)
{
p = j * bfsize;
X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2];
X2[i + p + bfsize / 2] = (X1[i + p] - X1[i + p + bfsize / 2]) * W[i * (1<<k)];
}
}
X = X