fftpack库,使用的是pffft库中下载的,不需要额外配置,只需要fftpack.h和fftpack.c两个文件即可。使用也比较简单,有实数快速傅里叶转换(同快速傅立叶变换)和复数快速傅里叶转换(同快速傅立叶变换)两种。
(1) 复数例子
//复数fftvoid cfft _ test(){ int N=16;int n float=2 * Nint n bytes=n float * sizeof(FFT pack _ real);FFT pack _ real * wrk=(FFT pack _ real *)malloc(2 * n字节15 * sizeof(FFT pack _ real));FFT pack _ real * refin=(FFT pack _ real *)malloc(Nbytes);printf('======================\ n复杂奥尔金数据:\ n’);for(int k=0;k Nfloatk=2){ refin[k]=k * 0.5f;refin[k 1]=0 * k * 0.5f;printf('%d %f %f\n 'k/2,refin[k],refin[k 1]);}cffti(N,wrk);cfftf(N,refin,wrk);printf('=====================\ nfft:\ n ');for(int I=0;我^ 2 * n;i=2)printf('%d %f %f\n 'i/2,refin[i],refin[I 1]);printf('==========================\ n ft:\ n ');cfftb(N,refin,wrk);for(int I=0;我^ 2 * n;i=2)printf('%d %f %f\n 'i/2,refin[i]/N,refin[I 1]/N);免费(wrk);免费(refin);}(2) 实数例子
//实数fftvoid rfft _ test(){ int N=16;int n float=Nint Nbytes=n float * sizeof(FFT pack _ real);FFT pack _ real * wrk=(FFT pack _ real *)malloc(2 * n字节15 * sizeof(FFT pack _ real));FFT pack _ real * refin=(FFT pack _ real *)malloc(Nbytes);FFT pack _ real * refinr=(FFT pack _ real *)malloc(2 * Nbytes);printf('====================\ n real orgin data:\ n ');for(int k=0;k Nfloatk){ refin[k]=k * 1.0f;printf('%d %f \n 'k,refin[k]);}rffti(N,wrk);rfftf(N,refin,wrk);printf('=====================\ nfft:\ n ');{ refinr[0]=refin[0];refinr[1]=0;refinr[n float 1]=0;for(int I=2;I=n floati){ refinr[I]=refin[I-1];} for(int I=n float 2;I=2 * n float-1;I){ if(I % 2)refinr[I]=-refinr[2 * n float-I 2];elserefinr[I]=refinr[2 * n float-I];} } for(int I=0;i 2 * Nfloati=2)printf('%d %f %f\n 'i/2,refinr[i],refinr[I 1]);printf('==========================\ n ft:\ n ');rfftb(N,refin,wrk);for(int I=0;我飘;i )printf('%d %f \n 'i/2,refin[I]/N);免费(wrk);免费(refin);免费(refinr);}(3) 分析
与矩阵实验室结果比对一致,运算速度还可以。
支持两倍和浮动。
使用简单。