home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 05 / bittman / ddj_mp87.c < prev    next >
Text File  |  1991-02-10  |  2KB  |  67 lines

  1.  
  2. /***********************************************************************/
  3. /*   file ddj_mp87.c                                                   */
  4. /***********************************************************************/
  5. /*                                                                     */
  6. /*   MathPak 87 FFT Function Group Execution Source File               */
  7. /*                                                                     */
  8. /***********************************************************************/
  9.  
  10. #include <hq_ci_.h>                     /* include function prototypes */
  11. #include <mpak87.h>                     /* include math pak header */
  12.  
  13. #define BAD_BLOCK_SIZE        -1        /* user defined error codes */
  14. #define BAD_FUNC_NUM          -2
  15.  
  16. /*** function prototypes ***********************************************/
  17. int fft_stages(long fft_size);
  18.  
  19. /*** function implementations ******************************************/
  20.  
  21. void main(int argc, char *argv[])
  22. {
  23.    int         m;                                     /* number of fft stages */
  24.    far_array_of_double o1;                                    /* data pointer */
  25.  
  26.    init_intfc(argc, argv);   /* MUST do this before other interface functions */
  27.    o1 = get_data_out_ptr(1);                           /* get address of data */
  28.    if ((m = fft_stages(get_block_size())) == 0)
  29.       set_err_return(BAD_BLOCK_SIZE);    /* won't happen if .fnc file correct */
  30.    else
  31.    switch(get_func_num())
  32.    {
  33.       case 1: rvfft(o1, m); break;       /* real fft from MathPak library     */
  34.       case 2: irvfft(o1, m); break;      /* inverse real fft from MathPak     */
  35.       default:                           
  36.         set_err_return(BAD_FUNC_NUM);    /* won't happen if .fnc file correct */
  37.       break;
  38.    }
  39. }  /* IT'S THAT EASY !!! */
  40.  
  41. /* RETURN THE LOG(BASE 2) OF THE INPUT, OR 0 IF INPUT IS NOT A POWER OF 2 */
  42. int fft_stages(long fft_size)
  43. {
  44.    int rtn;
  45.    int sw_fft;
  46.  
  47.    sw_fft = fft_size;
  48.    switch(sw_fft)
  49.    {
  50.       case 8  : rtn = 3; break;
  51.       case 16  : rtn = 4; break;
  52.       case 32  : rtn = 5; break;
  53.       case 64  : rtn = 6; break;
  54.       case 128 : rtn = 7; break;
  55.       case 256 : rtn = 8; break;
  56.       case 512 : rtn = 9; break;
  57.       case 1024 : rtn = 10; break;
  58.       case 2048 : rtn = 11; break;
  59.       case 4096 : rtn = 12; break;
  60.       case 8192 : rtn = 13; break;
  61.       default  : rtn = 0; break;
  62.    }
  63.    return(rtn);
  64. }
  65.  
  66. 
  67.