VS + QT +FFTW


最近帮助其他人搞个小东西,用QT实现快速傅里叶正逆变换


网上很多需要的C++ fft ifft 有个限定条件,采样点数为2的N次幂,


这就导致取任意个数的时候,得出的结果跟matlab的结果不一致。


原因是matlab在做变换的时候进行了修正,具体方法不详。


这样一来,封装fft  ifft 就不太现实了。


那么怎么办呢?


万能的网络,要知道你想做的,99%的都有人做过了。FFTW 可以满足你的需求


网上QT + FFTW 的配置及使用有很多




通用流程:“下载”“创建lib”“配置”“使用”
1、
http://fftw.org/


2、进入fftw目录,
 
lib /def:libfftw3-3.def
l
lib /def:libfftw3f-3.def
l
lib /def:libfftw3l-3.def


默认x86 ,编译x64如下
    
lib /machine:x64 /def:libfftw3-3.def
l
lib /machine:x64 /def:libfftw3f-3.def
l
lib /machine:x64 /def:libfftw3l-3.def


3、QT是嵌入VS使用


属性配制方法,跟其他库在使用时一样。


include、lib、依赖性、dll拷到执行目录






void test()
{
QFile file("1.txt");
if (!file.open(QIODevice::ReadOnly)){
return;
}
int i = 0;


int N = 2000;
fftw_complex *in, *out, *o2i;
fftw_plan p;//正运算
fftw_plan b;//逆运算
//add code;
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);
o2i = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);//正FFTW_FORWARD
b = fftw_plan_dft_1d(N, out, o2i, FFTW_BACKWARD, FFTW_ESTIMATE);//逆FFTW_BACKWARD
//add code;


while (!file.atEnd())
{
QString lineString = QString(file.readLine());
qDebug() << lineString.toDouble();


in[i][0] = lineString.toDouble();//real
in[i][1] = 0;//image
i++;
}


N = i;
qDebug() << "正=============================";
fftw_execute(p); /* repeat as needed */
for (int i = 0; i < N; i++)
{
qDebug() << out[i][0] << "," << out[i][1];
}


qDebug() << "逆=============================";
fftw_execute(b);
for (int i = 0; i < N; i++)
{
qDebug() << o2i[i][0] / N << "," << o2i[i][1] / N;  //逆运算,一定要除采样数
}
fftw_destroy_plan(p);
fftw_destroy_plan(b);
fftw_free(in);
fftw_free(out);
fftw_free(o2i);
}




1.txt 内容如下


0.27219
0.26913
0.26107
0.25366
0.25576
0.25721
0.2498
0.24303
0.23627
0.23047
0.22371
0.21807
0.21259
0.20776
0.20229
0.20035
0.26027
0.2659
0.2593
0.25141
0.24481
0.26075
0.25463
0.24722
0.24013
0.23401
0.22757
0.22242
0.21598
0.2105
0.20535
0.20067
0.21356
0.26574
0.26252
0.25447
0.24754
0.24883
0.2564


补充几个参考:
http://blog.csdn.net/cyh706510441/article/details/46676123
http://blog.csdn.net/whhxp/article/details/54375339

http://blog.csdn.net/congwulong/article/details/7576012


工程已上传

你可能感兴趣的:(QT)