| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 981 人关注过本帖
标题:[讨论]C实现FFT的问题
只看楼主 加入收藏
wenrou01
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-9-17
收藏
 问题点数:0 回复次数:1 
[讨论]C实现FFT的问题

这是我做的一个求e^(-n) N=16的程序 怎么算出的结果和答案不同啊
帮下 谢谢
频谱计算的完整C程序为
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<process.h>

#define PI 3.1415926

float x[1024],y[1024],am[1024];
void main()
{
int l,N,i;
float a;
void put_in(int N); %*输入函数*%
void re_bit(int N); %*倒序重排*%
void butterfly(int l); %*蝶形算法*%

printf("input l(l<=10)=");
scanf("%d",&l);
N=(int)(pow(2,l));

put_in(N);
re_bit(N);
butterfly(l);

for(i=0;i<N;i++)
printf("%6.4f+i%6.4f\n",x[i],y[i]); %*FFT结果*%

printf("\n\n");
getchar();

for(i=0;i<N;i++)
{
am[i]=sqrt(x[i]*x[i]+y[i]*y[i]); %*其幅度谱*%

printf("%6.4f\n",am[i]);
}
printf("\n\n");
getchar();
}
void butterfly(int l)
{
int i,j,r,m1,m2,m3,m4;
int k1,k2;
int N;
float u,v;
N=(int)(pow(2,l));
for(i=0;i<l;i++)
{
m1=(int)(pow(2,i));
m2=2*m1;
m3=N/m2;
for(j=0;j<m3;j++)
{
m4=j*m2;
for(r=0;r<m1;r++)
{
k1=m4+r;
k2=k1+m1;
u=x[k2]*cos(2*PI*r/m2)+y[k2]*sin(2*PI*r/m2);
v=y[k2]*cos(2*PI*r/m2)-x[k2]*sin(2*PI*r/m2);
x[k2]=x[k1]-u;
y[k2]=y[k1]-v;
x[k1]=x[k1]+u;
y[k1]=y[k1]+v;
}
}
}

}
void re_bit(int N)
{
int i,j,M,s;
float a;

M=N/2;
i=0;
for(j=1;j<N;j++)
{
s=M;
while(i>=s)
{
i=i-s;
s=s/2;
}
if(j<i)
{
a=x[j];x[j]=x[i];x[i]=a;
a=y[j];y[j]=y[i];y[i]=a;
}
}
}
void put_in(int N)
{
int i;
for(i=0;i<N;i++)
{
x[i]=exp(-i);
y[i]=0.0;
}
}

[此贴子已经被作者于2007-6-10 23:26:11编辑过]

搜索更多相关主题的帖子: FFT 讨论 
2007-06-10 23:23
wenrou01
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-9-17
收藏
得分:0 

没的大哥帮看下吗 是倒序重排那个出问题 还是蝶形算法出的问题啊

2007-06-12 05:01
快速回复:[讨论]C实现FFT的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017907 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved