i
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1 Complex One-Dimensional DFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Complex Multi-Dimensional DFTs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 One-Dimensional DFTs of Real Data . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Multi-Dimensional DFTs of Real Data . . . . . . . . . . . . . . . . . . . . . . . . 7
2.5 More DFTs of Real Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5.1 The Halfcomplex-format DFT . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.2 Real even/odd DFTs (cosine/sine transforms). . . . . . . . . . . . 10
2.5.3 The Discrete Hartley Transform . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Other Important Topi cs . . . . . . . . . . . . . . . . . . . 15
3.1 Data Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1 SIMD alignment and fftw malloc. . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.2 Stack alignment on x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Multi-dimensional Array Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1 Row-major Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.2 Column-major Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.3 Fixed-size Arrays in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.4 Dynamic Arrays in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.5 Dynamic Arrays in C—The Wrong Way . . . . . . . . . . . . . . . . . 17
3.3 Words of Wisdom—Saving Plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4 Caveats in Using Wisdom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 FFTW Reference . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1 Data Types and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.1 Complex numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.2 Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.3 Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2 Using Plans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3 Basic Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3.1 Complex DFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3.2 Planner Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.3 Real-data DFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.4 Real-data DFT Array Format . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.5 Real-to-Real Transforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.6 Real-to-Real Transform Kinds . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Advanced Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.1 Advanced Complex DFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.2 Advanced Real-data DFTs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.3 Advanced Real-to-real Transforms. . . . . . . . . . . . . . . . . . . . . . . 32