信号处理课程需要用到FFT变换,于是找资料写了一个C程序,网上的资料不少,但是感觉没什么大用,基本上大部分是MATLAB写的,在 Introduction to Algorithm的第三十章有一个算法伪代码图,小心wn这个是每一次都变的而不是一直是2pi/N,我犯了这个错误,一直不大对,后来在 cprogramming上的以为朋友指出了这个错误,之后犯的错误是结果一直都是不对称,找来找去不知道错在哪里,第二天才发现关键错在
re_w = re_w*W_RE - im_w*W_IM; im_w = im_w*W_RE + re_w*W_IM;
应该替换为
save_re = re_w;save_im = im_w;re_w = save_re*W_RE(len_x) - save_im*W_IM(len_x);im_w = save_im*W_RE(len_x) + save_re*W_IM(len_x);
好了,贴上我的代码,大家有什么问题欢迎讨论
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
#define N 16 //需要处理的离散信号的总个数
#define W_RE(n) (cos(-2.0*PI/n))
#define W_IM(n) (sin(-2.0*PI/n))
void recursive_fft(double [],int,double [],double []);
int main(){
double x[N] = {
0.5751,
0.4514,
0.0439,
0.0272,
0.3127,
0.0129,
0.3840,
0.6831,
0.0928,
0.0353,
0.6124,
0.6085,
0.0158,
0.0164,
0.1901,
0.5869
};
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。