本文主要对如何将FFTW3编译且移植到Android App上进行介绍,同时对各FFTW提供的一些快速傅里叶变换的方法在手机进行性能测试,总结出使用FFTW3进行小规模傅里叶变换的最佳方式。html
文章重点内容有:FFTW configure;编译so库;ARM NEON优化;float加速;多线程linux
第1部分为快速入门版,如想查看更详细的使用说明,请查看第2部分 : http://he-kai.com/?p=38 内容android
1. 下载好fftw-3.3.3.tar.gz和fftw_android项目后,将目录结构按以下方式放置git
—->parent foldergithub
—->fftw-3.3.3多线程
—->fftw_androideclipse
2. Eclipse中导入,选择已有项目,将fftw_android项目导入。运行为Android Application,在手机上查看运行效果。性能
若出现错误,请检查错误输出,主要检查Eclipse中NDK路径是否配置好,以及在项目上尝试右键Android Tool-> Fix Project Properties 和Add Native Support。若仍是有报错,选择错误的视图,将全部的错误选中,删除,再运行看是否能正常编译运行经过。测试
3. 若想要观察各傅里叶变换方法的性能,打开Logcat,增长过滤器,将Application栏填为com.hekai.fftw_android,从而将此程序的全部LOG输出过滤显示出来。优化
下表为个人测试结果
测试数据:160 x 160 实数二维矩阵
测试手机:Google Nexus 4( Qualcomm APQ8064 1.5GHz x 4)
方法 | Avg(ms)(10 times) |
ffwt_plan_dft_2d | 58.013794 |
ffwt_plan_dft_r2c_2d | 25.4669923 |
ffwtf_plan__dft_r2c_2d | 19.3967774 |
ffwtf_plan__dft_r2c_2d(neon) | 9.5950195 |
ffwtf_plan__dft_r2c_2d(threads=4) | 30.2916016 |
ffwtf_plan__dft_r2c_2d(threads=4)(neon) | 18.9395753 |
另外,还有一篇帖子: 编译且移植FFTW3 https://blog.csdn.net/flfihpv259/article/details/80819084