最近帮助其他人搞个小东西,用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
工程已上传