Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
kiss_fft.hh
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file
11 /// @brief
12 /// @author Frank DiMaio
13 
14 #ifndef INCLUDED_numeric_fourier_kiss_fft_hh
15 #define INCLUDED_numeric_fourier_kiss_fft_hh
16 
17 #include <cmath>
19 
20 namespace numeric {
21 namespace fourier {
22 
23 inline void kf_cexp(kiss_fft_cpx & x, kiss_fft_scalar phase) {
24  x = kiss_fft_cpx( cos(phase) , sin(phase) );
25 }
26 
27 ///////////////////
28 // 1D FFTs
29 ///////////////////
30 //
31 // Perform an FFT on a complex input buffer.
32 // for a forward FFT,
33 // fin should be f[0] , f[1] , ... ,f[nfft-1]
34 // fout will be F[0] , F[1] , ... ,F[nfft-1]
35 // Note that each element is complex and can be accessed like
36 // f[k].r and f[k].i
37 void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
38 
39 //fpd
41  const kiss_fft_scalar *rin,
42  const kiss_fft_scalar *iin,
43  kiss_fft_scalar *rout,
44  kiss_fft_scalar *iout,
45  int fin_stride,
46  int fout_stride);
47 
48 
49 // A more generic version of the above function. It reads its input from every Nth sample.
50 void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
51 
52 // Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up
53 // your compiler output to call this before you exit.
54 void kiss_fft_cleanup(void);
55 
56 // Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
57 int kiss_fft_next_fast_size(int n);
58 
59 // for real ffts, we need an even size
60 inline int kiss_fftr_next_fast_size_real(int n) {
61  return ( kiss_fft_next_fast_size( ((n)+1)>>1)<<1 );
62 }
63 
64 ///////////////////
65 // Multidim FFTs
66 ///////////////////
67 void kiss_fftnd(kiss_fftnd_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
68 
69 
70 ///////////////////
71 // Real FFTs
72 ///////////////////
73 // input timedata has nfft scalar points
74 // output freqdata has nfft/2+1 complex points
75 void kiss_fftr(
76  kiss_fftr_cfg cfg,
77  const kiss_fft_scalar *timedata,
78  kiss_fft_cpx *freqdata);
79 
80 // input freqdata has nfft/2+1 complex points
81 // output timedata has nfft scalar points
82 void kiss_fftri(
83  kiss_fftr_cfg cfg,
84  const kiss_fft_cpx *freqdata,
85  kiss_fft_scalar *timedata);
86 
87 
88 ///////////////////
89 // R->R cosine transform
90 ///////////////////
91 //fpd
92 void kiss_dct(
93  kiss_dct_cfg st,
94  const kiss_fft_scalar *timedata,
95  kiss_fft_scalar *freqdata);
96 
97 void kiss_idct(
98  kiss_dct_cfg st,
99  const kiss_fft_scalar *freqdata,
100  kiss_fft_scalar *timedata);
101 
102 ///////////////////
103 // Multidim Real FFTs
104 ///////////////////
105 // dims[0] must be even
106 
107 // input timedata has dims[0] X dims[1] X ... X dims[ndims-1] scalar points
108 // output freqdata has dims[0] X dims[1] X ... X dims[ndims-1]/2+1 complex points
109 void kiss_fftndr(
110  kiss_fftndr_cfg cfg,
111  const kiss_fft_scalar *timedata,
112  kiss_fft_cpx *freqdata);
113 
114 // input and output dimensions are the exact opposite of kiss_fftndr
115 void kiss_fftndri(
116  kiss_fftndr_cfg cfg,
117  const kiss_fft_cpx *freqdata,
118  kiss_fft_scalar *timedata);
119 
120 }
121 }
122 
123 #endif
124 
void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata)
real fft
Definition: kiss_fft.cc:362
class kiss_fftnd_state * kiss_fftnd_cfg
void kiss_idct(kiss_dct_cfg st, const kiss_fft_scalar *freqdata, kiss_fft_scalar *timedata)
idct-II (dct-iii)
Definition: kiss_fft.cc:475
int kiss_fft_next_fast_size(int n)
Definition: kiss_fft.cc:344
#define kiss_fft_scalar
def x
void kiss_fft_split(kiss_fftsplit_cfg st, const kiss_fft_scalar *rin, const kiss_fft_scalar *iin, kiss_fft_scalar *rout, kiss_fft_scalar *iout, int fin_stride, int fout_stride)
Definition: kiss_fft.cc:313
class kiss_fftsplit_state * kiss_fftsplit_cfg
void kf_cexp(kiss_fft_cpx &x, kiss_fft_scalar phase)
Definition: kiss_fft.hh:23
void kiss_fft(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout)
Definition: kiss_fft.cc:309
int kiss_fftr_next_fast_size_real(int n)
Definition: kiss_fft.hh:60
void kiss_dct(kiss_dct_cfg st, const kiss_fft_scalar *timedata, kiss_fft_scalar *freqdata)
dct-II
Definition: kiss_fft.cc:438
void kiss_fftri(kiss_fftr_cfg st, const kiss_fft_cpx *freqdata, kiss_fft_scalar *timedata)
Definition: kiss_fft.cc:404
class kiss_fftr_state * kiss_fftr_cfg
void kiss_fftndr(kiss_fftndr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata)
Definition: kiss_fft.cc:614
void kiss_fft_stride(kiss_fft_cfg st, const kiss_fft_cpx *fin, kiss_fft_cpx *fout, int in_stride)
Definition: kiss_fft.cc:297
class kiss_dct_state * kiss_dct_cfg
void kiss_fft_cleanup(void)
Definition: kiss_fft.cc:339
void kiss_fftndri(kiss_fftndr_cfg st, const kiss_fft_cpx *freqdata, kiss_fft_scalar *timedata)
Definition: kiss_fft.cc:640
std::complex< kiss_fft_scalar > kiss_fft_cpx
class kiss_fftndr_state * kiss_fftndr_cfg
class kiss_fft_state * kiss_fft_cfg
void kiss_fftnd(kiss_fftnd_cfg st, const kiss_fft_cpx *fin, kiss_fft_cpx *fout)
multidim fft
Definition: kiss_fft.cc:574