版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、windowsxp操作系统中fftw的安装与使用(一) 安装fftw:1. 从网站上下载最新的预编译文件:l 32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8mb) l 64-bit version: fftw-3.2.2-dll64.zip (2.2mb)1. 解压缩文件,打开windows命令行窗口,就是那个cmd窗口。然后把当前目录转换到你解压缩文件的目录下。2. 执行以下3个指令:l lib /machine:ix86 /def:libfftw3-3.defl lib /machine:ix86 /def:l
2、ibfftw3f-3.defl lib /machine:ix86 /def:libfftw3l-3.def3. 这会在该目录下建三个相应的.lib文件。注意第三个.def文件中的“3l-3”中的是字母l的小写,不是数字1。4. 将目录中原有的libfftw3l-3.dll,libfftw3f-3.dll,libfftw3-3.dll文件复制到文件夹system32中。这一步是为了你以后都不用在你的可执行文件所在的文件夹中带上这3个拖油瓶,因为系统直接会去system32中找。5. 在 vc 中指定 libfftw3l-3.lib,libfftw3f-3.lib,libfftw3-3.lib这
3、3个lib文件及 fftw3.h 文件所在的目录。对于vs2005,相应的目录是:工具>>选项>>项目和解决方案>>vc+目录,在“包含文件”和“库文件”下添加目录。包含文件主要目的是为了添加fftw3.h文件所在目录。库文件则是为了添加上述三个.lib文件所在目录。其他版本vs软件的目录略有出入,读者自行解决。6. 最后一步就是,在你新建工程的时候,一定要定义宏:#include“fftw3.h”,然后把你要用的lib写到project里面去。具体的做法是(vs2005版本):项目>>属性>>配置属性>>链接器。选择“常
4、规”,在“附加库目录”中添加lib文件所在的目录。选择“输入”,在“附加依赖项”中添加具体的lib文件,如libfftw3-3.lib。由于已经添加了附加目录,所以在项目生成过程中,会自动找到相应的lib文件。7. 完成上述6步就已经基本完成了fftw在windows系统中的安装。但是根据的介绍,运行fftw的最佳编译器是gun,为了在windows系统中使用gun编译器,可用的手段有,安装mingw,安装cygwin,安装mingw developer studio。其中,mingw developer studio的软件环境和vs环境基本相似。在此介绍m
5、ingw developer studio中lib文件的目录添加设置。windows下mingw的安装另见文档。对于mingw developer studio2.05版本,选择edit>>option>>directories,在include files中添加fftw3.h所在目录。在library files中添加.lib文件所在目录。至此,可以完成第5步。新建项目时,选择project>>settings中的link选项卡。在libraries中添加具体的lib文件,最好有绝对路径。在additional library path中也可以添加lib文
6、件所在的目录作为附加库目录。至此,完成上述第6步。(二) fftw的使用:1. fftw的具体使用可以参考使用手册:manual for fftw 3.2.2 online2. 在此提供一个简单的案例:源码如下:#include <fstream>#include <iostream>#include <iomanip>#include <fftw3.h>#include <math.h>#include <time.h>static void my_fftw_write_char(char c, void *f) fpu
7、tc(c, (file *) f); #define fftw_export_wisdom_to_file(f) fftw_export_wisdom(my_fftw_write_char, (void*) (f)#define fftwf_export_wisdom_to_file(f) fftwf_export_wisdom(my_fftw_write_char, (void*) (f)#define fftwl_export_wisdom_to_file(f) fftwl_export_wisdom(my_fftw_write_char, (void*) (f)static int my
8、_fftw_read_char(void *f) return fgetc(file *) f); #define fftw_import_wisdom_from_file(f) fftw_import_wisdom(my_fftw_read_char, (void*) (f)#define fftwf_import_wisdom_from_file(f) fftwf_import_wisdom(my_fftw_read_char, (void*) (f)#define fftwl_import_wisdom_from_file(f) fftwl_import_wisdom(my_fftw_r
9、ead_char, (void*) (f)const int num = 1024;/长度为1024 。const double pi = 3.14159265;const double tstart = 0, tend = 10;const double fsample = num / (tend - tstart);fftw_complex innum;fftw_complex outnum;using namespace std;ofstream fin("input.txt");ofstream fout("output.txt");int ma
10、in()fin <<setiosflags(ios:scientific)<<setiosflags(ios:right)<<setprecision(6);fout<<setiosflags(ios:scientific)<<setiosflags(ios:right)<<setprecision(6);double t, w;for(int i = 0; i < num; i+)t = i * (tend - tstart) / (num-1);w = i * fsample / (num-1);ini0 = s
11、in(20 * pi * t); ini1 = 0;/ x 为实数。/ini = sin(20 * pi * t);fin <<setw(16)<<t<<setw(16)<<w<<setw(16)<<ini0<<endl;/输出到文件:时间轴t ,频率轴f ,时域值x 。fftw_plan p;/设计plan 。file* fp;if (fp = fopen("plan","r+")!=null)fftw_import_wisdom_from_file(fp);elsef
12、p = fopen("plan","w+");clock_t start, finish;for (int i = 0; i < 5; i+)start = clock();p = fftw_plan_dft_1d(num, &in0, &out0, fftw_forward, fftw_estimate);/for(int i = 0; i < num; i+)/t = i * (tend - tstart) / (num-1);/w = i * fsample / (num-1);/ini0 = sin(20 * pi *
13、 t); ini1 = 0;/ x 为实数。/fin <<setw(16)<<t/<<setw(16)<<w/<<setw(16)<<ini0<<endl;/输出到文件:时间轴t ,频率轴f ,时域值x 。/fftw_execute(p);/执行dft 。/* 可以多次执行*/finish = clock();cout<<": "<<double(finish - start) / clocks_per_sec<<endl;fp = fopen("
14、;plan","a+");fftw_export_wisdom_to_file(fp);for(int i = 0; i < num; i+)fout<<setw(16)<<ini0<<setw(16)<<outi0<<setw(16)<<outi1<<endl;fftw_destroy_plan(p);fclose(fp);return 0;说明:fftw的独特之处在于其第一次运算时提供了一个运算策略,并且将该策略保存,以此可以大大提高第二次以后的所有fft运算速度。对于1
15、维的复数dft运算,运用语句产生策略:p = fftw_plan_dft_1d(num, &in0, &out0, fftw_forward, fftw_estimate);p是fftw_plan类型的。num是数组的逻辑长度,对于复数,其物理长度是逻辑长度的2倍,因为有实部和虚部。并且要传入输入数组和输出数组的地址,两者可以相同,为本地转换,数组的长度要有冗余。对于数组空间的开辟,可以用fftw_malloc和fftw_free函数动态开辟(详见使用手册)。此处,笔者在全局空间内,用:fftw_complex innum;fftw_complex outnum;最后两个参数是
16、宏标示符,fftw_forward表明是正向运算,如果要做反变换,则应当是fftw_backward。fftw_estimate则对应了策略产生的算法,此外还有fftw_measure、fftw_patient、fftw_exhaustive。对于一般的使用,采用measure策略较好,其第一次运算的时间较长,但第二次开始运算的时间就非常短,如果运算的次数不多,则建议采用estimate,其提供的一般是次优化算法,每次运算的时间基本相当。在程序的最后要销毁策略p:fftw_destroy_plan(p);策略产生后,真正执行dft运算的语句是:fftw_execute(p);如果采用measu
17、re或者patient策略,则需要注意,该策略下,会改变in和out的值,所以要在p赋值后进行in的赋值(代码中的注释部分),再运行fftw_execute(p)。在代码中,由于是采用了estimate策略,不会改变in的值。此外,fftw还提供了方便的策略导入导出功能,便于项目再次生成时使用,当项目重新生成后,调用已经储存的策略(wisdom),只要硬件条件和内存环境不发生改变,理论上可以节省重新寻找策略的时间。具体的用法为:fftw_import_wisdom_from_file(fp);fftw_export_wisdom_to_file(fp);但是在vc的编译器下,要使用该接口,需要
18、添加声明及宏定义,具体如下:static void my_fftw_write_char(char c, void *f) fputc(c, (file *) f); #define fftw_export_wisdom_to_file(f) fftw_export_wisdom(my_fftw_write_char, (void*) (f)#define fftwf_export_wisdom_to_file(f) fftwf_export_wisdom(my_fftw_write_char, (void*) (f)#define fftwl_export_wisdom_to_file(f)
19、 fftwl_export_wisdom(my_fftw_write_char, (void*) (f)static int my_fftw_read_char(void *f) return fgetc(file *) f); #define fftw_import_wisdom_from_file(f) fftw_import_wisdom(my_fftw_read_char, (void*) (f)#define fftwf_import_wisdom_from_file(f) fftwf_import_wisdom(my_fftw_read_char, (void*) (f)#defi
20、ne fftwl_import_wisdom_from_file(f) fftwl_import_wisdom(my_fftw_read_char, (void*) (f)如果采用mingw developer stdio,则不需要上述定义,便可以顺利的生成项目。3. fftw的测试及结果:测试的内容有:1) fftw运算前后,in和out的内容是否改变?2) fftw运算前后,in和out的实际长度变化?(初始化时为等长且有所冗余)3) 不同策略的时间对比4) 从文件调用策略的好处?5) 策略的保存形式?6) 将结果与matlab对比?7) 正变换再接反变换。结果:1) 对于不同的接口,有不同的结论,在复数的dft中,in和out不会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士长培训补考三基护士
- 实习生宿舍安全使用协议书
- 2024年阿凤离婚协议书模板
- 小零食店货物转让协议书范文
- 人教版英语八年级下册 Unit 2 基础知识复习
- 餐饮业疫情防控操作方案
- 幼儿园招生工作总结与家长满意度调查
- 化工厂设备拆除环保方案
- 商铺独立基础施工方案
- 生产经营单位安全培训试题及答案综合卷
- 防渗漏、防裂缝施工技术交底.doc
- 城市地下管线普查与实施方案(完整版)
- 第三届全国“TRIZ”杯大学生创新方法大赛作品申报书
- 《一共有多少天》教学设计附反思[优制备课]
- 江苏建设工程施工项目部关键岗位人员变更申请表
- 诺贝尔奖获得者的教育背景统计分析及对我国研究生教育的启示
- 护理安全隐患及防范会议
- 天健军卫医院信息系统住院部分ppt课件
- 广西壮族自治区普通高级中学学籍管理规定.doc
- 变形观测记录表.doc
- 《与朱元思书》《与顾章书》阅读练习及答案
评论
0/150
提交评论