FFTW編譯以及使用


FFTW官網www.fftw.org上可以下載fftw-3.3.4.tar.gz

解壓tar -xzvf fftw-3.3.4.tar.gz

1 ./configure
     
2 make
3 make install

以編譯float版本為例:
    
    ./configure --prefix=/home/tuzb/fftw --enable-shared --enable-float --disable-fortran

 make

 make install


1.FFTW有三個版本的數據類型float , double , long double。
2.都使用同樣的頭文件fftw3.h
3.所有以小寫fftw_開頭的函數替換為fftwf_或者fftwl_
4.函數參數中double替換成float或者long double

 

使用實例


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "fftw3.h"

int main(int argc,char** argv){
    printf("--------------start---------------\n");

    int len = 8;
    float *in = NULL;
    // 如果要使用float版本,需先引用float版本的lib庫,然后在fftw后面加上f后綴即可.
    fftwf_complex *out = NULL; // fftwf_complex --> 即為float版本
    fftwf_plan p;
    in = (float *) fftwf_malloc(sizeof(float) * len);
    out = (fftwf_complex *) fftwf_malloc(sizeof(fftw_complex) * len);
    float dx = 1.0 / len;

    // 輸入純實數
    for (int i = 0; i < len; i++) {
        in[i] = sinf(2 * M_PI * dx * i) + sinf(4 * M_PI * dx * i);

        printf("%.2f ", in[i]);
    }
    printf("\n\n");

    // 傅里葉變換
    p = fftwf_plan_dft_r2c_1d(len, in, out, FFTW_ESTIMATE);
    fftwf_execute(p);

    // 輸出幅度譜
    for (int i = 0; i < len; i++) {
        float len = sqrt(out[i][0] * out[i][0] + out[i][1] * out[i][1]);
        printf("%.2f ", len);
    }
    printf("\n");

    // 釋放資源
    fftwf_destroy_plan(p);
    fftwf_free(in);
    fftwf_free(out);


    printf("-------------- end ---------------\n");
    return 0;
}
————————————————
版權聲明:本文為CSDN博主「xiaotu2011」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tuzanbo/article/details/75309647

 

Linux下FFTW庫的安裝

FFTW(the Fastest Fourier Transform in the West)庫是由MIT(Massachusetts Institute of Technology)的Matteo Frigo和Steven G. Johnson開發的,用於一維和多維實數或復數的離散傅里葉變換。

1. 下載 fftw-3_2_2_tar.gz              (www.fftw.org, or www.rpmfind.net )


2. tar zxvf fftw-3_2_2_tar.gz            展開壓縮文件


3. 在Linux中安裝FFTW:
總共需要兩次安裝  
 第一次安裝就按下面的 a 配置就行
第二次安裝時為了 生成libfftwf.so的庫文件   以f結尾的代表可以的數據類型是 float  加上 --enable-float   第一次安裝的時候不能加這個選項  否則會出錯

a.    
./configure --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks  --enable-shared=yes
其中,
--enable-type-prefix    參數是為了同時使用single precision(單精度)和double precision(雙精度),如果不使用它,最后只有以rfftw開頭的文件被安裝(real fftw);

--prefix=                      參數是設定安裝目錄;

--with-gcc                    使用gcc編譯器;

--disable-fortran         參數為了不包含Fortran調用的機制;

--enable-i386-hacks   為Pentium和x86以后的CPU優化gcc的編譯速度。
 --enable-shared=yes  為了生成動態庫.so文件  否則生成的都是.a 文件  沒法編譯 (我就卡在這里)

第一次安裝
1.
make                          編譯
2.
make install               安裝,這一次安裝完后,在安裝目錄中存在以dfftw和drfftw開頭文件,但沒有sfftw開頭的文件
3.
make clean              還需要安裝一次,先清除

第二次安裝
1.
./configure --enable-float --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks --enable-shared=yes
其中,--enable-float      為了生成單精度計算的頭文件和庫文件,即以sfftw開頭的文件。
2.
make                      重新編譯
3.
make install            再一次安裝,安裝完后,目錄中便會同時存在sfftw和dfftw開頭的文件(用於復數函數/complex function的FFT變換)和srfftw與drfftw開頭的文件(用於實數函數的FFT變換)
————————————————
版權聲明:本文為CSDN博主「IT張先生」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zwjzwj108108/article/details/24254067


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM