|
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
33 #ifdef DOXYGEN_ENGLISH
96 #ifdef DOXYGEN_RUSSIAN
162 int n1, n2, addr, s, k, m, nw, err;
173 if(s%4096 == 0) { n2 = 4096;
goto label_size; }
174 if(s%2048 == 0) { n2 = 2048;
goto label_size; }
175 if(s%1024 == 0) { n2 = 1024;
goto label_size; }
176 if(s%512 == 0) { n2 = 512;
goto label_size; }
177 if(s%256 == 0) { n2 = 256;
goto label_size; }
178 if(s%128 == 0) { n2 = 128;
goto label_size; }
179 if(s% 64 == 0) { n2 = 64;
goto label_size; }
180 if(s% 32 == 0) { n2 = 32;
goto label_size; }
181 if(s% 16 == 0) { n2 = 16;
goto label_size; }
182 if(s% 7 == 0) { n2 = 7;
goto label_size; }
183 if(s% 8 == 0) { n2 = 8;
goto label_size; }
184 if(s% 5 == 0) { n2 = 5;
goto label_size; }
185 if(s% 4 == 0) { n2 = 4;
goto label_size; }
186 if(s% 3 == 0) { n2 = 3;
goto label_size; }
187 if(s% 2 == 0) { n2 = 2;
goto label_size; }
193 if(s > FFT_COMPOSITE_MAX)
203 for(k = 0; k < s; k++)
205 phi = - M_2PI * (double)k / (
double)s;
206 RE(pfft->
w[addr]) = cos(phi);
207 IM(pfft->
w[addr]) = sin(phi);
220 for(k = 0; k < n1; k++)
222 for(m = 0; m < n2; m++)
224 phi = - M_2PI * (double)(k*m) / (double)s;
225 RE(pfft->
w[addr]) = cos(phi);
226 IM(pfft->
w[addr]) = sin(phi);
243 for(k = 0; k < 4; k++)
245 for(m = 0; m < 8; m++)
247 phi = - M_2PI * (double)(k*m) / 32.0;
248 RE(pfft->
w32[addr]) = cos(phi);
249 IM(pfft->
w32[addr]) = sin(phi);
257 for(k = 0; k < 8; k++)
259 for(m = 0; m < 8; m++)
261 phi = - M_2PI * (double)(k*m) / 64.0;
262 RE(pfft->
w64[addr]) = cos(phi);
263 IM(pfft->
w64[addr]) = sin(phi);
270 for(k = 0; k < 8; k++)
272 for(m = 0; m < 16; m++)
274 phi = - M_2PI * (double)(k*m) / 128.0;
275 RE(pfft->
w128[addr]) = cos(phi);
276 IM(pfft->
w128[addr]) = sin(phi);
283 for(k = 0; k < 16; k++)
285 for(m = 0; m < 16; m++)
287 phi = - M_2PI * (double)(k*m) / 256.0;
288 RE(pfft->
w256[addr]) = cos(phi);
289 IM(pfft->
w256[addr]) = sin(phi);
296 for(k = 0; k < 16; k++)
298 for(m = 0; m < 32; m++)
300 phi = - M_2PI * (double)(k*m) / 512.0;
301 RE(pfft->
w512[addr]) = cos(phi);
302 IM(pfft->
w512[addr]) = sin(phi);
308 if(pfft->
w1024 == NULL)
312 for(k = 0; k < 32; k++)
314 for(m = 0; m < 32; m++)
316 phi = - M_2PI * (double)(k*m) / 1024.0;
317 RE(pfft->
w1024[addr]) = cos(phi);
318 IM(pfft->
w1024[addr]) = sin(phi);
325 if(pfft->
w2048 == NULL)
329 for(k = 0; k < 32; k++)
331 for(m = 0; m < 64; m++)
333 phi = - M_2PI * (double)(k*m) / 2048.0;
334 RE(pfft->
w2048[addr]) = cos(phi);
335 IM(pfft->
w2048[addr]) = sin(phi);
342 if(pfft->
w4096 == NULL)
346 for(k = 0; k < 16; k++)
348 for(m = 0; m < 256; m++)
350 phi = - M_2PI * (double)(k*m) / 4096.0;
351 RE(pfft->
w4096[addr]) = cos(phi);
352 IM(pfft->
w4096[addr]) = sin(phi);
360 if(pfft->
t0) free(pfft->
t0);
361 if(pfft->
t1) free(pfft->
t1);
362 if(pfft->
w) free(pfft->
w);
#define RE(x)
Макрос определяющий реальную часть комплексного числа.
int fft_create(fft_t *pfft, int n)
Заполнение структуры fft_t для алгоритма БПФ
Структура данных объекта быстрого преобразования Фурье
double complex_t[2]
Описание комплексного типа данных.
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.
#define ERROR_FFT_SIZE
Неверно задан размер БПФ. Размер БПФ может быть составным вида , где , а – произвольный простой множ...
#define IM(x)
Макрос определяющий мнимую часть комплексного числа.