最近接到一个项目,要求把稀疏傅里叶变换的代码编译通过,该代码由老外实现,并且官方网址为:http://groups.csail.mit.edu/netmit/sFFT/。刚开始以为该代码为官方网址,我就在Ubuntu18.04环境上编译了,但是按照他说的搭建依赖库->编译,都实现了最后还是没有编译通过。后来经过九九八十一难,找了很多相关的资料才知道老外把代码给写错了,让我好一阵惊讶。其中我还不断地联系此网址的相关负责人都没有给出任何回复。
接下来我吧所有的错误以及需要改正的地方纠正出来:
1.sudo apt-get install pkg-config
2.sudo apt-get install valgrind
3.sudo apt-get install fftw3 fftw3-dev
4.解压 fftw-3.3.9.zip
cd fftw-3.3.9
./configure
make
sudo make install
5.解压gnuplot-5.4.2.tar.gz
cd gnuplot-5.4.2
./configure
make
sudo make install
6.解压sFFT.tar
cd sFFT
./configure
make
运行命令 ./experiment -N 65536 -K 50 -B 4 -E 2 -M 128 -m 6 -L 10 -l 4 -r 2 -t 1e-8 -e 1e-8
fftw
makeinstall”命令在标准位置安装fftw和rfftw库,通常需要root权限
--prefix标志指定另一个要配置的安装目录
makecheck 使FFTW测试程序按其速度运行
make distclean
1.fft.h
将2个“typedef double complex complex_t;”更改为“typedef double _Complex complex_t;”
2.experiment.cc
202:将"p = fftw_plan_dft_1d(n, x, xtmp, FFTW_FORWARD, FFTW_MEASURE);"修改为
"p = fftw_plan_dft_1d(n,reinterpret_cast<fftw_complex *>(x),reinterpret_cast<fftw_complex *>(xtmp), FFTW_FORWARD, FFTW_MEASURE);"
204:将"p = fftw_plan_dft_1d(n, x, xtmp, FFTW_FORWARD, FFTW_ESTIMATE);"修改为
"p = fftw_plan_dft_1d(n,reinterpret_cast<fftw_complex *>(x),reinterpret_cast<fftw_complex *>(xtmp), FFTW_FORWARD, FFTW_ESTIMATE);"
3.fftw.cc
34:将2个"complex_t"修改为"fftw_complex"
35:将2个"complex_t"修改为"fftw_complex"
44:将"fftw_plan_dft_1d(n, x, out,"修改为
"fftw_plan_dft_1d(n, reinterpret_cast<fftw_complex *> (x), reinterpret_cast<fftw_complex *> (out),"
4.generate_graphs.cc
180:将"p = fftw_plan_dft_1d(n, x, xtmp, FFTW_FORWARD, FFTW_MEASURE);"修改为
"p = fftw_plan_dft_1d(n,reinterpret_cast<fftw_complex *>(x),reinterpret_cast<fftw_complex *>(xtmp), FFTW_FORWARD, FFTW_MEASURE);"
182:将"p = fftw_plan_dft_1d(n, x, xtmp, FFTW_FORWARD, FFTW_ESTIMATE);"修改为
"p = fftw_plan_dft_1d(n,reinterpret_cast<fftw_complex *>(x),reinterpret_cast<fftw_complex *>(xtmp), FFTW_FORWARD, FFTW_ESTIMATE);"
以上内容分为两部分第一部分是sfft需要的搭建环境,第二部分为sfft源代码需要修改的地方。
稀疏傅里叶变换sfft需要依赖FFTW包,该包官方网址为http://www.fftw.org/