资源简介
用于计算实序列的快速傅立叶变换c源程序(对于按时间抽取的基2复序列FFT算法进行一定的修改)。
代码片段和文件信息
#include
#include
void rfft(double x[]int n);
//void fft(double x[]double y[]int nint sign);
void main()
{
int in;
double x[64];
n=64;
for(i=0;i<10;i++) //设置函数
x[i]=0.0;
for(i=10;i x[i]=exp(-(i-10)/15.0)*sin(6.2831853*(i-10)/16.0);
printf(“\n输入序列x[i]为:\n“);
for(i=0;i {printf(“%10.7f“x[i]);
if(i%4==0)
printf(“\n“);
}
rfft(xn);
printf(“\n离散傅立叶变换X(k)为:\n“);
printf(“%10.7f“x[0]);
printf(“ %10.7f+j%10.7f\n“x[1]x[n-1]);
for(i=2;i {
printf(“%10.7f+j%10.7f“x[i]x[n-i]);
printf(“ %10.7f+j%10.7f“x[i+1]x[n-i-1]);
printf(“\n“);
}
printf(“%10.7f“x[n/2]);
printf(“ %10.7f+j%10.7f\n“x[n/2-1]-x[n/2+1]);
for(i=2;i {
printf(“%10.7f+j%10.7f“x[n/2-i]-x[n/2+i]);
printf(“ %10.7f+j%10.7f“x[n/2-i-1]-x[n/2+i+1]);
printf(“\n“);
}
/* for(i=0;i y[i]=0;
fft(xyn-1);
printf(“傅立叶逆变换x(i)为:\n“);
for(i=0;i {
for(j=0;j<2;j++)
printf(“%10.7f+j%10.7f “x[2*i+j]y[2*i+j]);
printf(“\n“);
}*/
}
void rfft(double x[]int n)
{
int ijkmi1i2i3i4n1n2n4;
double aeccssxtt1t2;
for(j=1i=1;i<16;i++)
{
m=i;
j=2*j;
if(j==n)
break;
}
n1=n-1;
for(j=0i=0;i {
if(i {
xt=x[j];
x[j]=x[i];
x[i]=xt;
}
k=n/2;
while(k<(j+1))
{
j=j-k;
k=k/2;
- 上一篇:Linux 串口源代码纯C++
- 下一篇:vc++ 数据采集卡编程
评论
共有 条评论