快速傅里叶变换(FFT)

来源:互联网 发布:fifaonline3吧数据库 编辑:程序博客网 时间:2024/05/16 18:29

挖坑,原理有待补充


附上代码:

//按照二进制位倒序重排template<class T>void resort(int N, T* inRe, T* inIm,T* outRe,T* outIm){int n = 1 << N;int i, j, k;for (i = 0; i < n; i++){j = 0;for (k = 0; k < N; k++)j |= ((i >> k) & 1) << (N - k - 1);outRe[i] = inRe[j];outIm[i] = inIm[j];}}//基于2的快速傅里叶变换template<class T>void FFT_2(int N, T* inRe, T* inIm, T* outRe, T* outIm){resort(N, inRe, inIm, outRe, outIm);T Pi = 4 * atan(1), tRe, tIm;int n = 1 << N, i, j, k;for (i = 1; i < n; i <<= 1){k = 0;for (j = i; j < n; j++){tRe = outRe[j] * cos(Pi*k / i) + outIm[j] * sin(Pi*k / i);tIm = outIm[j] * cos(Pi*k / i) - outRe[j] * sin(Pi*k / i);outRe[j] = outRe[j - i] - tRe;outIm[j] = outIm[j - i] - tIm;outRe[j - i] = outRe[j - i] + tRe;outIm[j - i] = outIm[j - i] + tIm;k = (++k) % i;if (k == 0)j += i;}}}


0 0
原创粉丝点击