原理自己查书,代码如下:
/****************************************************************
功能: 一维快速傅里叶反变换
参数: complex<double> *TD: 指向时域数组的指针
complex<double> *FD: 指向频域数组的指针
int r: 2的幂数,即迭代次数
返回值: 无
***************************************************************/
void Ctry::IFFT(complex<double> *FD, complex<double> *TD, int r)
{
LONG count; //傅里叶变换点数
int i; //循环变量
complex<double> *x;
count = 1 << r; //计算傅里叶变换点数
x = new complex<double>[count]; //分配运算所需要的存储器
//将频域点写入x
memcpy(x, FD, sizeof(complex<double>)* count);
//求共轭
for (i = 0; i < count; i++)
{
x[i] = complex<double>(x[i].real, -x[i].imag());
}
FFT(x, TD, r); //调用快速傅里叶变换
//求时域点共轭
for (i = 0; i < count; i++)
{
TD[i] = complex<double>(TD[i].real/count, -TD[i].imag()/count);
}
delete x; //释放内存
}
FFT函数见上一篇博客