comparison src/vamp-sdk/FFT.cpp @ 501:90571dcc371a vamp-kiss-naming

Extensively rename things in the KissFFT headers to use a Vamp prefix. The motivation is not to change anything about the Vamp SDK library builds, but to avoid confusion in case any other code (for example that pulls in the Vamp SDK as part of a wider project definition) accidentally includes these headers instead of, or as well as, some other copy of KissFFT.
author Chris Cannam
date Tue, 30 Jan 2018 09:56:46 +0000
parents d132b92ec65d
children df32b473b9b6
comparison
equal deleted inserted replaced
500:4a86f866bb6b 501:90571dcc371a
49 49
50 #include "FFTimpl.cpp" 50 #include "FFTimpl.cpp"
51 51
52 namespace Vamp { 52 namespace Vamp {
53 53
54 using namespace Kiss;
55
54 void 56 void
55 FFT::forward(unsigned int un, 57 FFT::forward(unsigned int un,
56 const double *ri, const double *ii, 58 const double *ri, const double *ii,
57 double *ro, double *io) 59 double *ro, double *io)
58 { 60 {
59 int n(un); 61 int n(un);
60 Kiss::kiss_fft_cfg c = Kiss::kiss_fft_alloc(n, false, 0, 0); 62 vamp_kiss_fft_cfg c = vamp_kiss_fft_alloc(n, false, 0, 0);
61 Kiss::kiss_fft_cpx *in = new Kiss::kiss_fft_cpx[n]; 63 vamp_kiss_fft_cpx *in = new vamp_kiss_fft_cpx[n];
62 Kiss::kiss_fft_cpx *out = new Kiss::kiss_fft_cpx[n]; 64 vamp_kiss_fft_cpx *out = new vamp_kiss_fft_cpx[n];
63 for (int i = 0; i < n; ++i) { 65 for (int i = 0; i < n; ++i) {
64 in[i].r = ri[i]; 66 in[i].r = ri[i];
65 in[i].i = 0; 67 in[i].i = 0;
66 } 68 }
67 if (ii) { 69 if (ii) {
68 for (int i = 0; i < n; ++i) { 70 for (int i = 0; i < n; ++i) {
69 in[i].i = ii[i]; 71 in[i].i = ii[i];
70 } 72 }
71 } 73 }
72 kiss_fft(c, in, out); 74 vamp_kiss_fft(c, in, out);
73 for (int i = 0; i < n; ++i) { 75 for (int i = 0; i < n; ++i) {
74 ro[i] = out[i].r; 76 ro[i] = out[i].r;
75 io[i] = out[i].i; 77 io[i] = out[i].i;
76 } 78 }
77 Kiss::kiss_fft_free(c); 79 vamp_kiss_fft_free(c);
78 delete[] in; 80 delete[] in;
79 delete[] out; 81 delete[] out;
80 } 82 }
81 83
82 void 84 void
83 FFT::inverse(unsigned int un, 85 FFT::inverse(unsigned int un,
84 const double *ri, const double *ii, 86 const double *ri, const double *ii,
85 double *ro, double *io) 87 double *ro, double *io)
86 { 88 {
87 int n(un); 89 int n(un);
88 Kiss::kiss_fft_cfg c = Kiss::kiss_fft_alloc(n, true, 0, 0); 90 vamp_kiss_fft_cfg c = vamp_kiss_fft_alloc(n, true, 0, 0);
89 Kiss::kiss_fft_cpx *in = new Kiss::kiss_fft_cpx[n]; 91 vamp_kiss_fft_cpx *in = new vamp_kiss_fft_cpx[n];
90 Kiss::kiss_fft_cpx *out = new Kiss::kiss_fft_cpx[n]; 92 vamp_kiss_fft_cpx *out = new vamp_kiss_fft_cpx[n];
91 for (int i = 0; i < n; ++i) { 93 for (int i = 0; i < n; ++i) {
92 in[i].r = ri[i]; 94 in[i].r = ri[i];
93 in[i].i = 0; 95 in[i].i = 0;
94 } 96 }
95 if (ii) { 97 if (ii) {
96 for (int i = 0; i < n; ++i) { 98 for (int i = 0; i < n; ++i) {
97 in[i].i = ii[i]; 99 in[i].i = ii[i];
98 } 100 }
99 } 101 }
100 kiss_fft(c, in, out); 102 vamp_kiss_fft(c, in, out);
101 double scale = 1.0 / double(n); 103 double scale = 1.0 / double(n);
102 for (int i = 0; i < n; ++i) { 104 for (int i = 0; i < n; ++i) {
103 ro[i] = out[i].r * scale; 105 ro[i] = out[i].r * scale;
104 io[i] = out[i].i * scale; 106 io[i] = out[i].i * scale;
105 } 107 }
106 Kiss::kiss_fft_free(c); 108 vamp_kiss_fft_free(c);
107 delete[] in; 109 delete[] in;
108 delete[] out; 110 delete[] out;
109 } 111 }
110 112
111 class FFTComplex::D 113 class FFTComplex::D
112 { 114 {
113 public: 115 public:
114 D(int n) : 116 D(int n) :
115 m_n(n), 117 m_n(n),
116 m_fconf(Kiss::kiss_fft_alloc(n, false, 0, 0)), 118 m_fconf(vamp_kiss_fft_alloc(n, false, 0, 0)),
117 m_iconf(Kiss::kiss_fft_alloc(n, true, 0, 0)), 119 m_iconf(vamp_kiss_fft_alloc(n, true, 0, 0)),
118 m_ci(new Kiss::kiss_fft_cpx[m_n]), 120 m_ci(new vamp_kiss_fft_cpx[m_n]),
119 m_co(new Kiss::kiss_fft_cpx[m_n]) { } 121 m_co(new vamp_kiss_fft_cpx[m_n]) { }
120 122
121 ~D() { 123 ~D() {
122 Kiss::kiss_fftr_free(m_fconf); 124 vamp_kiss_fftr_free(m_fconf);
123 Kiss::kiss_fftr_free(m_iconf); 125 vamp_kiss_fftr_free(m_iconf);
124 delete[] m_ci; 126 delete[] m_ci;
125 delete[] m_co; 127 delete[] m_co;
126 } 128 }
127 129
128 void forward(const double *ci, double *co) { 130 void forward(const double *ci, double *co) {
129 for (int i = 0; i < m_n; ++i) { 131 for (int i = 0; i < m_n; ++i) {
130 m_ci[i].r = ci[i*2]; 132 m_ci[i].r = ci[i*2];
131 m_ci[i].i = ci[i*2+1]; 133 m_ci[i].i = ci[i*2+1];
132 } 134 }
133 Kiss::kiss_fft(m_fconf, m_ci, m_co); 135 vamp_kiss_fft(m_fconf, m_ci, m_co);
134 for (int i = 0; i < m_n; ++i) { 136 for (int i = 0; i < m_n; ++i) {
135 co[i*2] = m_co[i].r; 137 co[i*2] = m_co[i].r;
136 co[i*2+1] = m_co[i].i; 138 co[i*2+1] = m_co[i].i;
137 } 139 }
138 } 140 }
140 void inverse(const double *ci, double *co) { 142 void inverse(const double *ci, double *co) {
141 for (int i = 0; i < m_n; ++i) { 143 for (int i = 0; i < m_n; ++i) {
142 m_ci[i].r = ci[i*2]; 144 m_ci[i].r = ci[i*2];
143 m_ci[i].i = ci[i*2+1]; 145 m_ci[i].i = ci[i*2+1];
144 } 146 }
145 Kiss::kiss_fft(m_iconf, m_ci, m_co); 147 vamp_kiss_fft(m_iconf, m_ci, m_co);
146 double scale = 1.0 / double(m_n); 148 double scale = 1.0 / double(m_n);
147 for (int i = 0; i < m_n; ++i) { 149 for (int i = 0; i < m_n; ++i) {
148 co[i*2] = m_co[i].r * scale; 150 co[i*2] = m_co[i].r * scale;
149 co[i*2+1] = m_co[i].i * scale; 151 co[i*2+1] = m_co[i].i * scale;
150 } 152 }
151 } 153 }
152 154
153 private: 155 private:
154 int m_n; 156 int m_n;
155 Kiss::kiss_fft_cfg m_fconf; 157 vamp_kiss_fft_cfg m_fconf;
156 Kiss::kiss_fft_cfg m_iconf; 158 vamp_kiss_fft_cfg m_iconf;
157 Kiss::kiss_fft_cpx *m_ci; 159 vamp_kiss_fft_cpx *m_ci;
158 Kiss::kiss_fft_cpx *m_co; 160 vamp_kiss_fft_cpx *m_co;
159 }; 161 };
160 162
161 FFTComplex::FFTComplex(unsigned int n) : 163 FFTComplex::FFTComplex(unsigned int n) :
162 m_d(new D(n)) 164 m_d(new D(n))
163 { 165 {
183 class FFTReal::D 185 class FFTReal::D
184 { 186 {
185 public: 187 public:
186 D(int n) : 188 D(int n) :
187 m_n(n), 189 m_n(n),
188 m_fconf(Kiss::kiss_fftr_alloc(n, false, 0, 0)), 190 m_fconf(vamp_kiss_fftr_alloc(n, false, 0, 0)),
189 m_iconf(Kiss::kiss_fftr_alloc(n, true, 0, 0)), 191 m_iconf(vamp_kiss_fftr_alloc(n, true, 0, 0)),
190 m_ri(new Kiss::kiss_fft_scalar[m_n]), 192 m_ri(new vamp_kiss_fft_scalar[m_n]),
191 m_ro(new Kiss::kiss_fft_scalar[m_n]), 193 m_ro(new vamp_kiss_fft_scalar[m_n]),
192 m_freq(new Kiss::kiss_fft_cpx[n/2+1]) { } 194 m_freq(new vamp_kiss_fft_cpx[n/2+1]) { }
193 195
194 ~D() { 196 ~D() {
195 Kiss::kiss_fftr_free(m_fconf); 197 vamp_kiss_fftr_free(m_fconf);
196 Kiss::kiss_fftr_free(m_iconf); 198 vamp_kiss_fftr_free(m_iconf);
197 delete[] m_ri; 199 delete[] m_ri;
198 delete[] m_ro; 200 delete[] m_ro;
199 delete[] m_freq; 201 delete[] m_freq;
200 } 202 }
201 203
202 void forward(const double *ri, double *co) { 204 void forward(const double *ri, double *co) {
203 for (int i = 0; i < m_n; ++i) { 205 for (int i = 0; i < m_n; ++i) {
204 // in case kiss_fft_scalar is float 206 // in case vamp_kiss_fft_scalar is float
205 m_ri[i] = ri[i]; 207 m_ri[i] = ri[i];
206 } 208 }
207 Kiss::kiss_fftr(m_fconf, m_ri, m_freq); 209 vamp_kiss_fftr(m_fconf, m_ri, m_freq);
208 int hs = m_n/2 + 1; 210 int hs = m_n/2 + 1;
209 for (int i = 0; i < hs; ++i) { 211 for (int i = 0; i < hs; ++i) {
210 co[i*2] = m_freq[i].r; 212 co[i*2] = m_freq[i].r;
211 co[i*2+1] = m_freq[i].i; 213 co[i*2+1] = m_freq[i].i;
212 } 214 }
216 int hs = m_n/2 + 1; 218 int hs = m_n/2 + 1;
217 for (int i = 0; i < hs; ++i) { 219 for (int i = 0; i < hs; ++i) {
218 m_freq[i].r = ci[i*2]; 220 m_freq[i].r = ci[i*2];
219 m_freq[i].i = ci[i*2+1]; 221 m_freq[i].i = ci[i*2+1];
220 } 222 }
221 Kiss::kiss_fftri(m_iconf, m_freq, m_ro); 223 vamp_kiss_fftri(m_iconf, m_freq, m_ro);
222 double scale = 1.0 / double(m_n); 224 double scale = 1.0 / double(m_n);
223 for (int i = 0; i < m_n; ++i) { 225 for (int i = 0; i < m_n; ++i) {
224 ro[i] = m_ro[i] * scale; 226 ro[i] = m_ro[i] * scale;
225 } 227 }
226 } 228 }
227 229
228 private: 230 private:
229 int m_n; 231 int m_n;
230 Kiss::kiss_fftr_cfg m_fconf; 232 vamp_kiss_fftr_cfg m_fconf;
231 Kiss::kiss_fftr_cfg m_iconf; 233 vamp_kiss_fftr_cfg m_iconf;
232 Kiss::kiss_fft_scalar *m_ri; 234 vamp_kiss_fft_scalar *m_ri;
233 Kiss::kiss_fft_scalar *m_ro; 235 vamp_kiss_fft_scalar *m_ro;
234 Kiss::kiss_fft_cpx *m_freq; 236 vamp_kiss_fft_cpx *m_freq;
235 }; 237 };
236 238
237 FFTReal::FFTReal(unsigned int n) : 239 FFTReal::FFTReal(unsigned int n) :
238 m_d(new D(n)) 240 m_d(new D(n))
239 { 241 {