Chapter 6: Transforms > fft_cosine_init

fft_cosine_init

TextonSpedometerHPClogo.gif

Computes the parameters needed for imsl_f_fft_cosine.

Synopsis

#include <imsl.h>

float *imsl_f_fft_cosine_init (int n)

The type double procedure is imsl_d_fft_cosine_init.

Required Arguments

int n   (Input)
Length of the sequence to be transformed. It must be greater than 1.

Return Value

A pointer to the internal parameter vector that can then be used by imsl_f_fft_cosine when the optional argument IMSL_PARAMS is specified. To release this space, use imsl_free. If no solution was computed, then NULL is returned.

Description

The function imsl_f_fft_cosine_init should be used when many calls must be made to imsl_f_fft_cosine without changing the sequence length n.  It uses the system’s high performance library for the computation, if available.  Otherwise, the function imsl_f_fft_cosine_init is based on the routine COSTI in FFTPACK. The package FFTPACK was devel­oped by Paul Swarztrauber at the National Center for Atmospheric Research.

Example

This example computes three distinct sine FFTs by calling imsl_f_fft_cosine_init once, then calling imsl_f_fft_cosine  three times. The internal parameter initialization in imsl_f_fft_cosine  is now skipped.

#include <imsl.h>

#include <math.h>

#include <stdio.h>

 

int main()

{

        int            n = 7;

        int            i, k;

        float          p[7];

        float          q[7];

        float          pi;

        float         *params;

 

        pi = imsl_f_constant("pi", 0);

 

                                /* Compute parameters for transform of

                                   length n */

 

        params = imsl_f_fft_cosine_init (n);

 

                                /* Different frequencies of the same

                                   wave will be transformed */

        for (k=0; k<3; k++) {

                printf("\n");

 

                                /* Fill p with a pure cosine wave */

 

                for (i=0; i<n; i++)

                        p[i] = cos((float)((k+1)*i)*pi/(float)(n-1));

 

                                /* Compute the transform of p */

 

                imsl_f_fft_cosine (n, p,

                        IMSL_PARAMS, params,

                        IMSL_RETURN_USER, q,

                        0);

 

                printf ("      index\t   p\t   q\n");

                for (i=0; i<n; i++)

                        printf("\t%1d\t%5.2f\t%5.2f\n", i, p[i], q[i]);

 

        }

}

Output

   index  p     q

   0      1.00  -0.00

   1      0.87  6.00

   2      0.50  0.00

   3      -0.00  0.00

   4      -0.50  -0.00

   5      -0.87  -0.00

   6      -1.00  -0.00

 

   index  p     q

   0      1.00  0.00

   1      0.50  -0.00

   2      -0.50  6.00

   3      -1.00  0.00

   4      -0.50  0.00

   5      0.50  0.00

   6      1.00  -0.00

 

   index  p     q

   0      1.00  -0.00

   1      -0.00  0.00

   2      -1.00  -0.00

   3      0.00  6.00

   4      1.00  0.00

   5      -0.00  -0.00

   6      -1.00  0.00


RW_logo.jpg
Contact Support