fftw 的安装和使用


安装:ubuntu使用新立得安装 fftw3 fftw3-dev fftw3-doc, 非常顺利。

下面的是如何使用的一个例子
/*****************************
* filename: test_fftw.cpp
* author : Tiao Lu
* Company : School of Mathematical Sciences, Peking University
* 编译命令: g++ -o test_fftw.exe test_fftw.cpp -lfftw3
* Date    : September 30th, 2007
* Description: This code is an example to show the use of the free code FFTW, which implements the Fast Fourier Trasformation algorithm.
*/

#include <complex>
#include <fftw3.h>
#include <math.h>
#include <iostream>

#define N 10
using namespace std;
int main(int argc, char * argv[]){

    fftw_complex in[N], out[N];
    fftw_plan p;

//一维dft,in 输入,out输出,FFTW_FORWARD 表示 exp 上指数是负号
// out = F in
//where out and in are two vectors of the same length n, and F is a n-by-n matrix with the (j,k) element
// F jk = exp(-i 2 pi j k /n). i 是虚数单位. 

    p=fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_MEASURE);
    for(int i=0;i <N;i ++) {
        in[i][0]=i;
        in[i][1]=0.0;
    }
   

    fftw_execute(p);

    for(int i=0;i <N;i ++){
        cout<<out[i][0]<<" "<<out[i][1]<<endl;
    }

    //验证是否 out[3] = \sum_{k=0}^{N-1}exp(-i 2pi 3 k/N)in[k]
    complex<double> temp = 0.0;
    for(int k =0; k < N; k ++){
        double pi = 4*atan(1.0);
        temp += exp(complex<double>(0.0,-2.0*pi*3*k/N))*complex<double>(in[k][0],in[k][1]);
    }
    cout<<"out[3] is "<<temp<<endl;

    fftw_complex out1[N];

    fftw_plan p1;
//一维dft,in 输入,out输出,FFTW_BACKWARD 表示 exp 上指数是正号
// out = IF in
//where out and in are two vectors of the same length n, and IF is a n-by-n matrix with the (j,k) element
// IF jk = exp( +i 2 pi jk/n). i 是虚数单位.

    p1=fftw_plan_dft_1d(N,out1,in,FFTW_BACKWARD,FFTW_MEASURE);

    for(int i=0;i <N;i ++){
        out1[i][0]=out[i][0];
        out1[i][1]=out[i][1];
    }

    fftw_execute(p1);
//注意这里得到的 in 并不是和原来的in 的数值不同,比较之后发现,现在的in
// 是原来的 in 的 N 倍。原因是这里的定义的逆傅立叶变换没有除以 N.
//这和课本中定义的逆傅立叶变换不同。
    for(int i=0;i <N;i ++){
        cout<<in[i][0]<<" "<<in[i][1]<<endl;
    }



    fftw_destroy_plan(p);
    fftw_destroy_plan(p1);
    return 1;
}
<think>我们被要求回答如何在Linux系统上安装FFTW库。根据提供的引用资料,我们可以总结出安装步骤,包括下载、编译安装。同时,我们注意到有关于权限问题的说明(有root权限无root权限的情况),以及如何在编译其他程序时链接FFTW库。 安装步骤大致如下: 1. 下载FFTW源码包 2. 解压源码包 3. 进入解压后的目录 4. 配置编译选项(指定安装路径、是否生成动态库等) 5. 编译(make) 6. 安装(make install) 根据引用资料,我们可以提供两种安装方式:有root权限无root权限。同时,我们还需要注意在安装过程中可能遇到的一些问题(如引用[5]中提到的找不到头文件的问题)。 下面我们按照步骤详细说明:</think>### 如何在Linux系统上安装FFTWFFTW(快速傅里叶变换库)是高性能科学计算的核心组件。以下是详细安装步骤: #### 📥 1. 下载源码 ```bash wget http://www.fftw.org/fftw-3.3.10.tar.gz ``` #### 📂 2. 解压源码 ```bash tar -xvf fftw-3.3.10.tar.gz cd fftw-3.3.10 ``` #### ⚙ 3. 配置编译选项(两种方式) **A. 有root权限的标准安装** [^3] ```bash ./configure --prefix=/usr/local # 默认系统路径 ``` **B. 无root权限的自定义安装** [^2][^5] ```bash mkdir $HOME/fftw_install # 创建个人安装目录 ./configure --prefix=$HOME/fftw_install \ CFLAGS=-fPIC CXXFLAGS=-fPIC \ --enable-shared ``` #### 🔧 4. 编译与安装 ```bash make -j$(nproc) # 并行编译加速 make install ``` #### 🔍 5. 环境配置 **添加库路径**(无root权限时必需)[^5]: ```bash # 添加到.bashrc或.zshrc export LD_LIBRARY_PATH=$HOME/fftw_install/lib:$LD_LIBRARY_PATH export CPATH=$HOME/fftw_install/include:$CPATH ``` #### ✅ 6. 验证安装 ```c #include <fftw3.h> int main() { fftw_complex *in; fftw_plan p; in = fftw_alloc_complex(1024); p = fftw_plan_dft_1d(1024, in, in, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); return 0; } ``` 编译测试: ```bash gcc test.c -o test -lfftw3 -lm ``` ### ⚠️ 常见问题解决 1. **找不到头文件/库** [^5] ```bash # 显式指定路径(示例) gcc program.c -I$HOME/fftw_install/include -L$HOME/fftw_install/lib -lfftw3 ``` 2. **交叉编译**(如ARM架构)[^4] ```bash ./configure --host=arm-linux-gnueabihf --prefix=/target/path ``` 3. **Matlab集成** [^1] 在Matlab中添加: ```matlab setenv(&#39;LD_LIBRARY_PATH&#39;, &#39;/path/to/fftw/lib:$LD_LIBRARY_PATH&#39;); ``` ### 📚 引用说明 [^1]: 标准系统路径安装后需配置动态链接库路径 [引用1] [^2]: 无root权限安装需自定义路径并配置环境变量 [引用2][引用5] [^3]: 编译选项 `CFLAGS=-fPIC` 确保位置无关代码 [引用3] [^4]: ARM架构需指定交叉编译工具链 [引用4] [^5]: 头文件路径错误通常因环境变量未正确设置 [引用5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值