legla.h
1 #ifndef NOSYSTEMHEADERS
2 #include "ltfat.h"
3 #ifndef _phaseret_dgtrealwrapper_h_included
4 #define _phaseret_dgtrealwrapper_h_included
5 #include "dgtrealwrapper.h"
6 #endif
7 #endif
8 
9 #include "ltfat/types.h"
10 #include "phaseret/types.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #ifndef _phaseret_legla_h
17 #define _phaseret_legla_h
18 typedef struct phaseret_legla_params phaseret_legla_params;
19 
20 
21 typedef enum
22 {
23  EXT_BOTH = (1 << 20), // << DEFAULT
24  EXT_UPDOWN = (1 << 21)
25 } leglaupdate_ext;
26 
27 typedef enum
28 {
29  ORDER_FWD = (1 << 10), // << DEFAULT
30  ORDER_REV = (1 << 11)
31 } leglaupdate_frameorder;
32 
36 typedef struct
37 {
38  ltfat_int height;
39  ltfat_int width;
41 
42 // typedef struct
43 // {
44 // ltfat_int y;
45 // ltfat_int x;
46 // } phaseret_point;
47 
48 typedef enum
49 {
50  MOD_STEPWISE = (1 << 0), // << DEFAULT
51  MOD_FRAMEWISE = (1 << 1),
52  MOD_COEFFICIENTWISE = (1 << 2),
53  MOD_COEFFICIENTWISE_SORTED = (1 << 3),
54  MOD_MODIFIEDUPDATE = (1 << 4),
55 } leglaupdate_mod;
56 
64 PHASERET_API phaseret_legla_params*
66 
75 PHASERET_API int
76 phaseret_legla_params_set_relthr(phaseret_legla_params* params, double relthr);
77 
86 PHASERET_API int
87 phaseret_legla_params_set_kernelsize(phaseret_legla_params* params, phaseret_size ksize);
88 
97 PHASERET_API int
98 phaseret_legla_params_set_leglaflags(phaseret_legla_params* params, unsigned leglaflags);
99 
109 PHASERET_API phaseret_dgtreal_params*
110 phaseret_legla_params_get_dgtreal_params(phaseret_legla_params* params);
111 
120 PHASERET_API int
121 phaseret_legla_params_free(phaseret_legla_params* params);
122 
125 // This function is not part of API
126 int
127 phaseret_legla_params_defaults(phaseret_legla_params* params);
128 #endif
129 
130 typedef struct PHASERET_NAME(legla_plan) PHASERET_NAME(legla_plan);
131 typedef struct PHASERET_NAME(leglaupdate_plan) PHASERET_NAME(leglaupdate_plan);
132 typedef struct PHASERET_NAME(leglaupdate_plan_col) PHASERET_NAME(leglaupdate_plan_col);
133 
134 
164 typedef int
165 PHASERET_NAME(legla_callback_cmod)(void* userdata, LTFAT_COMPLEX c[], ltfat_int L, ltfat_int W, ltfat_int a, ltfat_int M);
166 
205 typedef int
206 PHASERET_NAME(legla_callback_status)(PHASERET_NAME(dgtreal_plan)* p, void* userdata, LTFAT_COMPLEX c[],
207  ltfat_int L, ltfat_int W, ltfat_int a, ltfat_int M, double* alpha, ltfat_int iter);
208 
241 PHASERET_API int
242 PHASERET_NAME(legla)(const LTFAT_COMPLEX cinit[], const LTFAT_REAL g[], ltfat_int L, ltfat_int gl,
243  ltfat_int W, ltfat_int a, ltfat_int M, ltfat_int iter, LTFAT_COMPLEX c[]);
244 
285 PHASERET_API int
286 PHASERET_NAME(legla_init)(const LTFAT_COMPLEX cinit[], const LTFAT_REAL g[], ltfat_int L,
287  ltfat_int gl, ltfat_int W, ltfat_int a, ltfat_int M,
288  const double alpha, LTFAT_COMPLEX c[],
289  phaseret_legla_params* params, PHASERET_NAME(legla_plan)** p);
290 
291 
292 
314 PHASERET_API int
315 PHASERET_NAME(legla_execute)(PHASERET_NAME(legla_plan)* p, ltfat_int iter);
316 
346 PHASERET_API int
347 PHASERET_NAME(legla_execute_newarray)(PHASERET_NAME(legla_plan)* p,
348  const LTFAT_COMPLEX cinit[],
349  ltfat_int iter, LTFAT_COMPLEX c[]);
350 
367 PHASERET_API int
368 PHASERET_NAME(legla_done)(PHASERET_NAME(legla_plan)** p);
369 
392 PHASERET_API int
393 PHASERET_NAME(legla_set_status_callback)(PHASERET_NAME(legla_plan)* p,
394  PHASERET_NAME(legla_callback_status)* callback, void* userdata);
395 
418 PHASERET_API int
419 PHASERET_NAME(legla_set_cmod_callback)(PHASERET_NAME(legla_plan)* p,
420  PHASERET_NAME(legla_callback_cmod)* callback,
421  void* userdata);
422 
425 /* Single iteration */
426 int
427 PHASERET_NAME(leglaupdate_init)(const LTFAT_COMPLEX kern[], phaseret_size ksize,
428  ltfat_int L, ltfat_int W, ltfat_int a, ltfat_int M, ltfat_int flags,
429  PHASERET_NAME(leglaupdate_plan)** pout);
430 
431 extern void
432 PHASERET_NAME(leglaupdate_execute)(PHASERET_NAME(leglaupdate_plan)* plan,
433  const LTFAT_REAL s[], LTFAT_COMPLEX c[],
434  LTFAT_COMPLEX cout[]);
435 
436 void
437 PHASERET_NAME(leglaupdate_done)(PHASERET_NAME(leglaupdate_plan)** plan);
438 
439 /* Single col update */
440 int
441 PHASERET_NAME(leglaupdate_col_init)(ltfat_int M, phaseret_size ksize, int flags,
442  PHASERET_NAME(leglaupdate_plan_col)** pout);
443 
444 int
445 PHASERET_NAME(leglaupdate_col_done)( PHASERET_NAME(leglaupdate_plan_col)** p);
446 
447 void
448 PHASERET_NAME(leglaupdate_col_execute)(
449  PHASERET_NAME(leglaupdate_plan_col)* plan,
450  const LTFAT_REAL sCol[],
451  const LTFAT_COMPLEX actK[],
452  LTFAT_COMPLEX cColFirst[],
453  LTFAT_COMPLEX coutrCol[]);
454 
455 /* Utils */
456 void
457 PHASERET_NAME(extendborders)(PHASERET_NAME(leglaupdate_plan_col)* plan,
458  const LTFAT_COMPLEX c[], ltfat_int N, LTFAT_COMPLEX buf[]);
459 
460 int
461 PHASERET_NAME(legla_big2small_kernel)(LTFAT_COMPLEX* bigc, phaseret_size bigsize,
462  phaseret_size smallsize, LTFAT_COMPLEX* smallc);
463 
464 int
465 PHASERET_NAME(legla_findkernelsize)(LTFAT_COMPLEX* bigc, phaseret_size bigsize,
466  double relthr, phaseret_size* ksize);
467 
468 /* Modulate kernel */
469 void
470 PHASERET_NAME(kernphasefi)(const LTFAT_COMPLEX kern[], phaseret_size ksize,
471  ltfat_int n, ltfat_int a, ltfat_int M, LTFAT_COMPLEX kernmod[]);
472 
473 /* Format kernel */
474 void
475 PHASERET_NAME(formatkernel)(LTFAT_REAL* kernr, LTFAT_REAL* kerni,
476  ltfat_int kernh, ltfat_int kernw,
477  ltfat_int kernwskip, LTFAT_REAL* kernmodr, LTFAT_REAL* kernmodi);
478 
479 
480 
481 #ifdef __cplusplus
482 }
483 #endif
int legla_set_status_callback(legla_plan *p, legla_callback_status *callback, void *userdata)
int legla_callback_status(dgtreal_plan *p, void *userdata, LTFAT_COMPLEX c[], ltfat_int L, ltfat_int W, ltfat_int a, ltfat_int M, double *alpha, ltfat_int iter)
Definition: legla.h:206
int legla_execute(legla_plan *p, ltfat_int iter)
int legla_callback_cmod(void *userdata, LTFAT_COMPLEX c[], ltfat_int L, ltfat_int W, ltfat_int a, ltfat_int M)
Definition: legla.h:165
int legla_execute_newarray(legla_plan *p, const LTFAT_COMPLEX cinit[], ltfat_int iter, LTFAT_COMPLEX c[])
Definition: legla.h:36
int phaseret_legla_params_free(phaseret_legla_params *params)
phaseret_dgtreal_params * phaseret_legla_params_get_dgtreal_params(phaseret_legla_params *params)
int legla_set_cmod_callback(legla_plan *p, legla_callback_cmod *callback, void *userdata)
int phaseret_legla_params_set_kernelsize(phaseret_legla_params *params, phaseret_size ksize)
int legla_done(legla_plan **p)
phaseret_legla_params * phaseret_legla_params_allocdef()
int legla_init(const LTFAT_COMPLEX cinit[], const LTFAT_REAL g[], ltfat_int L, ltfat_int gl, ltfat_int W, ltfat_int a, ltfat_int M, const double alpha, LTFAT_COMPLEX c[], phaseret_legla_params *params, legla_plan **p)
int phaseret_legla_params_set_relthr(phaseret_legla_params *params, double relthr)
int legla(const LTFAT_COMPLEX cinit[], const LTFAT_REAL g[], ltfat_int L, ltfat_int gl, ltfat_int W, ltfat_int a, ltfat_int M, ltfat_int iter, LTFAT_COMPLEX c[])
int phaseret_legla_params_set_leglaflags(phaseret_legla_params *params, unsigned leglaflags)