菜鸟求助,看不懂一维快速傅里叶变换的VC实现

yzh浣熊 2014-03-21 04:39:22
程序如下:
希望有大神帮忙解答
//循环变量
int i, k, r;

//申请临时复数缓冲区buf1,长度为n
ComplexNumber *buf1=new ComplexNumber[n];

//将arrayBuf拷贝进buf1
memcpy(buf1,arrayBuf,sizeof(ComplexNumber)*n);

//申请临时复数缓冲区buf2,长度为n
ComplexNumber *buf2=new ComplexNumber[n];

//将arrayBuf数组元素基2抽取并重新排列
//若0、1、2、3、4、5、6、7八点序列对调后变作0、4、2、6、1、5、3、7
int t1,t2;
for(r=1;pow(2,r)<n;r++){
t1=pow(2,r);
t2=pow(2,r-1);
for(k=0;k<t1;k++){
for(i=0;i<n/t1;i++){
buf2[k*n/t1+i].real=buf1[k/2*n/t2+i*2+k%2].real;
buf2[k*n/t1+i].imag=buf1[k/2*n/t2+i*2+k%2].imag;
}
}
memcpy(buf1,buf2,sizeof(ComplexNumber)*n);
}



//采用蝶型算法进行快速傅立叶变换
//buf1是第r级的输入,buf2存放第r级的输出
float c,s;
for(r=1;pow(2,r)<=n;r++){
t1=pow(2,r);
for(k=0;k<n/t1;k++){
for(i=t1/2;i<t1;i++){
//加权因子
c=cos(-2*PI*(i-t1/2)/t1);
s=sin(-2*PI*(i-t1/2)/t1);
buf1[k*t1+i].real= buf2[k*t1+i].real*c - buf2[k*t1+i].imag*s;
buf1[k*t1+i].imag=buf2[k*t1+i].imag*c+buf2[k*t1+i].real*s;
}
}
for(k=0; k<n/t1; k++){
for(i=0;i<t1/2;i++){
buf2[k*t1+i].real= buf1[k*t1+i].real+buf1[k*t1+i+t1/2].real;
buf2[k*t1+i].imag= buf1[k*t1+i].imag+buf1[k*t1+i+t1/2].imag;
}
for(i=t1/2;i<t1;i++){
buf2[k*t1+i].real= buf1[k*t1+i-t1/2].real-buf1[k*t1+i].real;
buf2[k*t1+i].imag= buf1[k*t1+i-t1/2].imag-buf1[k*t1+i].imag;
}
}

//第r级的输出存入buf1,作为下一级的输入数据
memcpy(buf1,buf2,sizeof(ComplexNumber)*n);
}



//傅立叶变换的结果存入arrayBuf
memcpy(arrayBuf,buf2,sizeof(ComplexNumber)*n);

//释放缓冲区
delete[]buf2;
delete[]buf1;
...全文
263 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
百曉生 2014-04-03
  • 打赏
  • 举报
回复
引用 5 楼 u013720248 的回复:
[quote=引用 3 楼 u012421456 的回复:] 这个。。。lz可以看看这几个——http://bbs.csdn.net/topics/300108374 ——http://www.docin.com/p-715068089.html
谢谢哦,总是给予帮助[/quote] 不客气,我水平不高,对这种问题只能是给传送门了
yzh浣熊 2014-04-03
  • 打赏
  • 举报
回复
引用 3 楼 u012421456 的回复:
这个。。。lz可以看看这几个——http://bbs.csdn.net/topics/300108374 ——http://www.docin.com/p-715068089.html
谢谢哦,总是给予帮助
百曉生 2014-03-21
  • 打赏
  • 举报
回复
还有这个——http://wenku.baidu.com/link?url=3hhyaDtIzrx7xRx3Bvwlwn8jvsZAaig90_m5ubieDgaSZ8e9uvy5vR4zH_21TRMlr2c81_7ZB9kvFiUZzvrdYJ2Kmmh4pD7u1iH2Wzu57lO 建议仔细看看,看不懂了再问更具体点儿的问题相信会有人回答的
百曉生 2014-03-21
  • 打赏
  • 举报
回复
这个。。。lz可以看看这几个——http://bbs.csdn.net/topics/300108374 ——http://www.docin.com/p-715068089.html
bobo928843007 2014-03-21
  • 打赏
  • 举报
回复
这个估计没多少人能回答得上,只有代码,没有算法分析更难看懂,傅里叶变换是将时间域(空间域)变换到频率域来观察。我也同求大神来讲解。
yzh浣熊 2014-03-21
  • 打赏
  • 举报
回复
怎么没有人回答啊

65,207

社区成员

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

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