fft_sine_init
Computes the parameters needed for imsl_f_fft_sine.
Synopsis
#include <imsl.h>
float *imsl_f_fft_sine_init (int n)
The type double procedure is imsl_d_fft_sine_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_sine 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_sine_init should be used when many calls must be made to
imsl_f_fft_sine 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_sine_init is based on the routine
SINTI 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_sine_init once, then calling
imsl_f_fft_sine_init three times. The internal parameter initialization in
imsl_f_fft_sine 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_sine_init (n);
/* Different frequencies of the same
wave will be transformed */
for (k=0; k<3; k++)
{
printf("\n");
/* Fill p with a pure sine wave */
for (i=0; i<n; i++)
p[i] = sin((float)((k+1)*(i+1))*pi/(float)(n+1));
/* Compute the transform of p */
imsl_f_fft_sine (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 0.38 8.00
1 0.71 0.00
2 0.92 0.00
3 1.00 0.00
4 0.92 0.00
5 0.71 -0.00
6 0.38 0.00
index p q
0 0.71 -0.00
1 1.00 8.00
2 0.71 0.00
3 -0.00 -0.00
4 -0.71 0.00
5 -1.00 -0.00
6 -0.71 0.00
index p q
0 0.92 0.00
1 0.71 -0.00
2 -0.38 8.00
3 -1.00 0.00
4 -0.38 0.00
5 0.71 0.00
6 0.92 0.00