fft_cosine_init
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 developed 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