请教关于“实序列快速傅里叶变换”(rfft)程序的问题~

rabbitjerry 2009-02-25 04:24:57
加精
出自<<数字信号处理C语言程序集>>,但运算结果与书中给的结果不符合,估计书中给的这个程序代码有些错误~哪位高手能帮忙看看错误在哪呢?
实序列快速傅里叶变换:
#include "stdafx.h"
#include "math.h"
void rfft(int n, double x[]);

int main(int argc, char* argv[])
{
int i,n;
double x[64];
n=64;
for(i=0;i<10;i++) x[i]=0;
for(i=0;i<n;i++) x[i]=exp(-(i-10)/15.0)*sin(6.2831853*(i-10)/16.0);
rfft(n,x);
printf("\n DISCRETE FOURIER TRANSFORM\n");
printf(" %10.7f",x[0]);
printf("\n");
printf(" %10.7f + J%10.7f\n",x[1],x[n-1]);
for(i=2;i<n/2;i+=2)
{
printf(" %10.7f + J%10.7f\n",x[i],x[n-i]);
printf(" %10.7f + J%10.7f\n",x[i+1],x[n-i-1]);
//printf("\n");
}
printf(" %10.7f",x[n/2]);
printf("\n");
printf(" %10.7f + J%10.7f\n",x[n/2-1],-x[n/2+1]);
for(i=2;i<n/2;i+=2)
{
printf(" %10.7f + J%10.7f\n",x[n/2-i],-x[n/2+i]);
printf(" %10.7f + J%10.7f\n",x[n/2-i-1],-x[n/2+i+1]);
//printf("\n");
}
return 0;
}

void rfft(int n, double x[]) //实序列快速傅里叶变换
{
int i,j,k,m,i1,i2,i3,i4,n1,n2,n4;
double a,e,cc,ss,xt,t1,t2;
for(j=1,i=1;i<16;i++)
{
m=i;
j= 2*j;
if(j==n) break;
}
n1=n-1;
for(j=0,i=0;i<n1;i++)
{
if(i<j)
{
xt=x[j];
x[j]=x[i];
x[i]=xt;
}
k=n/2;
while (k<(j+1)) {
j=j-k;
k=k/2;
}
j=j+k;
}
for(i=0;i<n;i+=2)
{
xt=x[i];
x[i]=xt+x[i+1];
x[i+1]=xt-x[i+1];
}
n2=1;
for(k=2;k<=m;k++)
{
n4=n2;
n2=2*n4;
n1=2*n2;
e=6.28318530718/n1;
for(i=0;i<n;i+=n1)
{
xt=x[i];
x[i]=xt+x[i+n2];
x[i+n2]=xt-x[i+n2];
x[i+n2+n4]=-x[i+n2+n4];//
a=e;
for(j=1;j<(n4-1);j++)
{
i1=i+j;
i2=i-j+n2;
i3=i+j+n2;
i4=i-j+n1;
cc=cos(a);
ss=sin(a);
a=a+e;
t1=cc*x[i3]+ss*x[i4];
t2=ss*x[i3]-cc*x[i4];
x[i4]=x[i2]-t2;
x[i3]=-x[i2]-t2;//
x[i2]=x[i1]-t1;
x[i1]=x[i1]+t1;
}
}
}
}

...全文
1448 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
luechen0912 2011-11-18
  • 打赏
  • 举报
回复
那本书里我也发现,关于rlfft程序调试的程序结果和书上有不一致的地方。
jardearson 2011-08-09
  • 打赏
  • 举报
回复
拿分走人...
wangw89 2011-08-09
  • 打赏
  • 举报
回复
闲人路过,帮顶一下!
peijch02 2011-05-27
  • 打赏
  • 举报
回复
最好附上数学表达式,
duxing87 2011-05-03
  • 打赏
  • 举报
回复
我自己试了一下,当输入1到8计算结果是对的,1到16就有问题,不知道怎么回事
勇敢的搬砖人 2010-05-26
  • 打赏
  • 举报
回复
kingteng 2010-04-16
  • 打赏
  • 举报
回复
这么复杂。。。看我写的符合不?http://blog.chinaunix.net/u2/82750/showart_2208849.html
chrile 2010-03-05
  • 打赏
  • 举报
回复
我是出来打酱油的。飘过
HUAXIANGDAGE 2010-01-15
  • 打赏
  • 举报
回复
单步跟踪试试!
L_thread 2009-09-13
  • 打赏
  • 举报
回复
mask
zjweii 2009-09-12
  • 打赏
  • 举报
回复
ddddddddddddddddddddddddd
wuhui5125 2009-09-12
  • 打赏
  • 举报
回复
真够烦的,下载 东西要积分
wuhui5125 2009-09-12
  • 打赏
  • 举报
回复
真够烦的,下载 东西要积分
wuhui5125 2009-09-12
  • 打赏
  • 举报
回复
真够烦的,下载 东西要积分
thrtc 2009-09-11
  • 打赏
  • 举报
回复
sinf
ding
guo5115 2009-09-11
  • 打赏
  • 举报
回复
HAO
o2cola 2009-09-11
  • 打赏
  • 举报
回复
看到傅里叶变换 进来了,
曾今极度反感老傅搞出来这么多东西
大雷子老师 2009-09-11
  • 打赏
  • 举报
回复
电路中学过,已经忘记。。。
m271262011 2009-09-10
  • 打赏
  • 举报
回复
dingdingding
mark
m271262011 2009-09-10
  • 打赏
  • 举报
回复
dingdingding
mark
加载更多回复(36)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧