void FFT(complex<double>*TD,complex<double>*FD,int r)//r为log2N,即迭代次数
{
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));
}
// 将时域点写入X1
memcpy(X1, TD, sizeof(complex<double>) * count);
// 采用蝶形算法进行快速付立叶变换
for(k = 0; k < r; k++)//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 + bfs
C++实现FFT代码
最新推荐文章于 2025-01-31 00:15:00 发布