编程实现基于时间抽取的基2的FFT算法
要求:实现任意长度的基于时间抽取的基2的FFT算法,统计算法运行所需时间,与DFT的直接实现进行运行时间对比,与现存的FFT算法运行时间进行对比。
运行结果
实现FFT算法
部分代码:
//-------------------倒序实现
int daoxu(int a,int n)
{
int i,b,result=0;
for(i=0;i<n;i++)
{
b = a & 1;
a = a>>1;
result = result<<1;
result = result | b;
}
return result;
}
//-------------------旋转因子计算
struct finger xuanzhuanyinzi(int N,int P)
{
struct finger wn;
wn.shi = cos(2*PI/N*P);
wn.xu = -sin(2*PI/N*P);
return wn;
}
//-------------------蝶形运算
void diexingyunsuan(struct finger *p,struct finger *q,struct finger wn)
{
struct finger res1,res2;
struct finger temp;
temp = chengfa(*q,wn);
res1 = jiafa(*p,temp);
res2 = jianfa(*p,temp);
*q = res2;
*p = res1;
}
核心算法:
for(j=0;j<N;j++)
{
A[j]=x[daoxu(j,M)];
}
for(L=1;L<=M;L++)
{
B = pow(2,L-1);
for(J=0;J<B;J++)
{
P=J*pow(2,M-L);
for(K=J;K<N;K+=pow(2,L))
{
struct finger Wn;
Wn=xuanzhuanyinzi(N,P);
diexingyunsuan(&A[K],&A[K+B],Wn);
}
}
}
完整代码:https://download.csdn.net/download/qq_38305241/10804763