home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / lib / mathlib / libfft / fft2 / fft.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  10.2 KB  |  231 lines

  1. /*****************************************************************************
  2. *
  3. * Copyright 1993, 1994, Silicon Graphics, Inc.
  4. * All Rights Reserved.
  5. *
  6. * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  7. * the contents of this file may not be disclosed to third parties, copied or
  8. * duplicated in any form, in whole or in part, without the prior written
  9. * permission of Silicon Graphics, Inc.
  10. *
  11. * RESTRICTED RIGHTS LEGEND:
  12. * Use, duplication or disclosure by the Government is subject to restrictions
  13. * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  14. * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  15. * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  16. * rights reserved under the Copyright Laws of the United States.
  17. *
  18. ******************************************************************************/
  19. #include <math.h>
  20. #include <sys/types.h>
  21. #include <malloc.h>
  22. #include <stdlib.h>
  23.  
  24. #ifndef _SGI_FFT_
  25. #define    _SGI_FFT_
  26.  
  27. #define        FACTOR_SPACE    15
  28.  
  29. /* *******************************************************
  30.     Complex structures definitions
  31. ******************************************************* */
  32.  
  33. typedef struct {
  34.     float re;
  35.     float im;
  36. } complex;
  37.  
  38. typedef struct {
  39.     double re;
  40.     double im;
  41. } zomplex;
  42.  
  43.  
  44. /* *******************************************************
  45.     C Functions prototypes
  46. ******************************************************* */
  47. /* *******************************************************
  48.     complex <---> complex FFTs
  49. ******************************************************* */
  50. complex *cfft1di( int n, complex *save);
  51. int cfft1d( int job, int n, complex *array, int inc, complex *save);
  52.  
  53. complex *cfft2di( int n1, int n2, complex *save);
  54. int cfft2d( int job, int n1, int n2, complex *array, int ld, complex *save);
  55.  
  56. complex *cfft3di( int n1, int n2, int n3, complex *save);
  57. int cfft3d( int job, int n1, int n2, int n3, complex *array, int ld1, int ld2, complex *save);
  58.  
  59.  
  60. /* *******************************************************
  61.     zomplex <---> zomplex FFTs
  62. ******************************************************* */
  63. zomplex *zfft1di( int n, zomplex *save);
  64. int zfft1d( int job, int n, zomplex *array, int inc, zomplex *save);
  65.  
  66. zomplex *zfft2di( int n1, int n2, zomplex *save);
  67. int zfft2d( int job, int n1, int n2, zomplex *array, int ld, zomplex *save);
  68.  
  69. zomplex *zfft3di( int n1, int n2, int n3, zomplex *save);
  70. int zfft3d( int job, int n1, int n2, int n3, zomplex *array, int ld1, int ld2, zomplex *save);
  71.  
  72.  
  73. /* *******************************************************
  74.     real <---> complex FFTs
  75. ******************************************************* */
  76. float *sfft1di( int n, float *save);
  77. #define sfft1dui    sfft1di
  78. int sfft1d( int job, int n, float *array, int inc, float *save);
  79. int sfft1du( int job, int n, float *array, int inc, float *save);
  80.  
  81. float *sfft2di( int n1, int n2, float *save);
  82. float *sfft2dui( int n1, int n2, float *save);
  83. int sfft2d( int job, int n1, int n2, float *array, int ld, float *save);
  84. int sfft2du( int job, int n1, int n2, float *array, int ld, float *save);
  85.  
  86. float *sfft3di( int n1, int n2, int n3, float *save);
  87. float *sfft3dui( int n1, int n2, int n3, float *save);
  88. int sfft3d( int job, int n1, int n2, int n3, float *array, int ld1, int ld2, float *save);
  89. int sfft3du( int job, int n1, int n2, int n3, float *array, int ld1, int ld2, float *save);
  90.  
  91.  
  92. /* *******************************************************
  93.     double <---> zomplex FFTs
  94. ******************************************************* */
  95. double *dfft1di( int n, double *save);
  96. #define dfft1dui    dfft1di
  97. int dfft1d( int job, int n, double *array, int inc, double *save);
  98. int dfft1du( int job, int n, double *array, int inc, double *save);
  99.  
  100. double *dfft2di( int n1, int n2, double *save);
  101. double *dfft2dui( int n1, int n2, double *save);
  102. int dfft2d( int job, int n1, int n2, double *array, int ld, double *save);
  103. int dfft2du( int job, int n1, int n2, double *array, int ld, double *save);
  104.  
  105. double *dfft3di( int n1, int n2, int n3, double *save);
  106. double *dfft3dui( int n1, int n2, int n3, double *save);
  107. int dfft3d( int job, int n1, int n2, int n3, double *array, int ld1, int ld2, double *save);
  108. int dfft3du( int job, int n1, int n2, int n3, double *array, int ld1, int ld2, double *save);
  109.  
  110.  
  111. /* *******************************************************
  112.     Fortran Subroutines prototypes
  113. ******************************************************* */
  114. /* *******************************************************
  115.     complex <---> complex FFTs
  116. ******************************************************* */
  117. void cfft1di_( int *n, complex *save);
  118. int cfft1d_( int *job, int *n, complex *array, int *inc, complex *save);
  119.  
  120. void cfft2di_( int *n1, int *n2, complex *save);
  121. void cfft2d_( int *job, int *n1, int *n2, complex *array, int *ld, complex *save);
  122.  
  123. void cfft3di_( int *n1, int *n2, int *n3, complex *save);
  124. void cfft3d_( int *job, int *n1, int *n2, int *n3, complex *array, int *ld1, int *ld2, complex *save);
  125.  
  126. /* ****************************
  127.     zomplex <---> zomplex FFTs
  128. **************************** */
  129. void zfft1di_( int *n, zomplex *save);
  130. void zfft1d_( int *job, int *n, zomplex *array, int *inc, zomplex *save);
  131.  
  132. void zfft2di_( int *n1, int *n2, zomplex *save);
  133. void zfft2d_( int *job, int *n1, int *n2, zomplex *array, int *ld, zomplex *save);
  134.  
  135. void zfft3di_( int *n1, int *n2, int *n3, zomplex *save);
  136. void zfft3d_( int *job, int *n1, int *n2, int *n3, zomplex *array, int *ld1, int *ld2, zomplex *save);
  137.  
  138. /* ********************************************************
  139.     real <---> complex FFTs
  140. ******************************************************** */
  141. void *sfft1di_( int *n, float *save);
  142. #define sfft1dui_ sfft1di_
  143. int *sfft1d_( int *job, int *n, float *array, int *inc, float *save);
  144. int *sfft1du_( int *job, int *n, float *array, int *inc, float *save);
  145.  
  146. void *sfft2di_( int *n1, int *n2, void *save);
  147. void *sfft2dui_( int *n1, int *n2, void *save);
  148. int *sfft2d_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  149. int *sfft2du_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  150.  
  151. void *sfft3di_( int *n1, int *n2, int *n3, void *save);
  152. void *sfft3dui_( int *n1, int *n2, int *n3, void *save);
  153. int *sfft3d_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  154. int *sfft3du_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  155.  
  156. /* ********************************************************
  157.     double <---> zomplex FFTs
  158. ******************************************************** */
  159. void *dfft1di_( int *n, double *save);
  160. #define dfft1dui_ dfft1di_
  161. int *dfft1d_( int *job, int *n, double *array, int *inc, double *save);
  162. int *dfft1du_( int *job, int *n, double *array, int *inc, double *save);
  163.  
  164. void *dfft2di_( int *n1, int *n2, void *save);
  165. void *dfft2dui_( int *n1, int *n2, void *save);
  166. int *dfft2d_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  167. int *dfft2du_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  168.  
  169. void *dfft3di_( int *n1, int *n2, int *n3, void *save);
  170. void *dfft3dui_( int *n1, int *n2, int *n3, void *save);
  171. int *dfft3d_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  172. int *dfft3du_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  173.  
  174. /************************************************************************
  175.     Product modules ... 
  176.         Performs convolution in 1 Domain by Product in the other
  177. ********************************************************************** */
  178.  
  179. void cprod1d( int n, complex *y, int incy, complex *filter, int incx);
  180. void zprod1d( int n, complex *y, int incy, complex *filter, int incx);
  181. void sprod1du( int n, complex *y, int incy, complex *filter, int incx);
  182. void dprod1du( int n, complex *y, int incy, complex *filter, int incx);
  183. void sprod1d( int n, complex *y, int incy, complex *filter, int incx);
  184. void dprod1d( int n, complex *y, int incy, complex *filter, int incx);
  185. void csprod1d( int n, complex *y, int iry, int incy, complex *filter, 
  186.         int irx, int incx);
  187. void zdprod1d( int n, complex *y, int iry, int incy, complex *filter, 
  188.         int irx, int incx);
  189.         
  190. void cprod2d( int n1, int n2, complex *y, int ldy, complex *filter, int ldx);
  191. void zprod2d( int n1, int n2, zomplex *y, int ldy, zomplex *filter, int ldx);
  192. void sprod2du( int n1, int n2, float *y, int ldy, float *filter, int ldx);
  193. void dprod2du( int n1, int n2, double *y, int ldy, double *filter, int ldx);
  194. void sprod2d( int n1, int n2, float *y, int ldy, float *filter, int ldx);
  195. void dprod2d( int n1, int n2, double *y, int ldy, double *filter, int ldx);
  196.  
  197. void cprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  198.         complex *filter, int ldx1, int ldx2);
  199. void zprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  200.         complex *filter, int ldx1, int ldx2);
  201. void sprod3du( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  202.         complex *filter, int ldx1, int ldx2);
  203. void dprod3du( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  204.         complex *filter, int ldx1, int ldx2);
  205. void sprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  206.         complex *filter, int ldx1, int ldx2);
  207. void dprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  208.         complex *filter, int ldx1, int ldx2);
  209. /************************************************************************
  210.     Scaling modules ... 
  211.         Scale the sequence by value APLHA ... 
  212.         to keep absolute values after Direct+Inverse transform.
  213. ********************************************************************** */
  214.  
  215. void cscal1d( int n, float alpha, complex *y, int inc);
  216. void zscal1d( int n, double alpha, zomplex *y, int inc);
  217. void sscal1d( int n, float alpha, float *y, int inc);
  218. void dscal1d( int n, double alpha, double *y, int inc);
  219.  
  220. void cscal2d( int nx, int ny, float alpha, complex *y, int ld);
  221. void zscal2d( int nx, int ny, double alpha, zomplex *y, int ld);
  222. void sscal2d( int nx, int ny, float alpha, float *y, int ld);
  223. void dscal2d( int nx, int ny, double alpha, double *y, int ld);
  224.  
  225. void cscal3d( int nx, int ny, int nz, float alpha, complex *y, int ld1,int ld2);
  226. void zscal3d( int nx, int ny, int nz, double alpha, zomplex *y,int ld1,int ld2);
  227. void sscal3d( int nx, int ny, int nz, float alpha, float *y, int ld1,int ld2);
  228. void dscal3d( int nx, int ny, int nz, double alpha, double *y, int ld1,int ld2);
  229.  
  230. #endif
  231.