PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_sum_withdraw_fft_complex_1d_multi_rfmt (c06fr)
Purpose
nag_sum_fft_complex_1d_multi_rfmt (c06fr) computes the discrete Fourier transforms of sequences, each containing complex data values. This function is designed to be particularly efficient on vector processors.
Note: this function is scheduled to be withdrawn, please see
c06fr in
Advice on Replacement Calls for Withdrawn/Superseded Routines..
Syntax
Description
Given
sequences of
complex data values
, for
and
,
nag_sum_fft_complex_1d_multi_rfmt (c06fr) simultaneously calculates the Fourier transforms of all the sequences defined by
(Note the scale factor
in this definition.)
The discrete Fourier transform is sometimes defined using a positive sign in the exponential term
To compute this form, this function should be preceded and followed by a call of
nag_sum_conjugate_complex_sep (c06gc) to form the complex conjugates of the
and the
.
The function uses a variant of the fast Fourier transform (FFT) algorithm (see
Brigham (1974)) known as the Stockham self-sorting algorithm, which is described in
Temperton (1983). Special code is provided for the factors
,
,
,
and
. This function is designed to be particularly efficient on vector processors, and it becomes especially fast as
, the number of transforms to be computed in parallel, increases.
References
Brigham E O (1974) The Fast Fourier Transform Prentice–Hall
Temperton C (1983) Self-sorting mixed-radix fast Fourier transforms J. Comput. Phys. 52 1–23
Parameters
Compulsory Input Parameters
- 1:
– int64int32nag_int scalar
-
, the number of sequences to be transformed.
Constraint:
.
- 2:
– int64int32nag_int scalar
-
, the number of complex values in each sequence.
Constraint:
.
- 3:
– double array
- 4:
– double array
-
The real and imaginary parts of the complex data must be stored in
x and
y respectively as if in a two-dimensional array of dimension
; each of the
sequences is stored in a
row of each array. In other words, if the real parts of the
th sequence to be transformed are denoted by
, for
, then the
elements of the array
x must contain the values
- 5:
– string (length ≥ 1)
-
Indicates whether trigonometric coefficients are to be calculated.
- Calculate the required trigonometric coefficients for the given value of , and store in the array trig.
- or
- The required trigonometric coefficients are assumed to have been calculated and stored in the array trig in a prior call to one of nag_sum_fft_real_1d_multi_rfmt (c06fp), nag_sum_fft_hermitian_1d_multi_rfmt (c06fq) or nag_sum_fft_complex_1d_multi_rfmt (c06fr). The function performs a simple check that the current value of is consistent with the values stored in trig.
Constraint:
, or .
- 6:
– double array
-
If
or
,
trig must contain the required trigonometric coefficients that have been previously calculated. Otherwise
trig need not be set.
Optional Input Parameters
None.
Output Parameters
- 1:
– double array
- 2:
– double array
-
x and
y store the real and imaginary parts of the complex transforms.
- 3:
– double array
-
Contains the required coefficients (computed by the function if ).
- 4:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
-
-
-
-
-
-
On entry, | , or . |
-
-
Not used at this Mark.
-
-
On entry, | or , but the array trig and the current value of n are inconsistent. |
-
-
An unexpected error has occurred in an internal call. Check all function calls and array dimensions. Seek expert help.
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
Some indication of accuracy can be obtained by performing a subsequent inverse transform and comparing the results with the original sequence (in exact arithmetic they would be identical).
Further Comments
The time taken by nag_sum_fft_complex_1d_multi_rfmt (c06fr) is approximately proportional to , but also depends on the factors of . nag_sum_fft_complex_1d_multi_rfmt (c06fr) is fastest if the only prime factors of are , and , and is particularly slow if is a large prime, or has large prime factors.
Example
This example reads in sequences of complex data values and prints their discrete Fourier transforms (as computed by
nag_sum_fft_complex_1d_multi_rfmt (c06fr)). Inverse transforms are then calculated using
nag_sum_fft_complex_1d_multi_rfmt (c06fr) and
nag_sum_conjugate_complex_sep (c06gc) and printed out, showing that the original sequences are restored.
Open in the MATLAB editor:
c06fr_example
function c06fr_example
fprintf('c06fr example results\n\n');
m = int64(3);
n = int64(6);
zr = [0.3854 0.6772 0.1138 0.6751 0.6362 0.1424;
0.9172 0.0644 0.6037 0.6430 0.0428 0.4815;
0.1156 0.0685 0.2060 0.8630 0.6967 0.2792];
zi = [0.5417 0.2983 0.1181 0.7255 0.8638 0.8723;
0.9089 0.3118 0.3465 0.6198 0.2668 0.1614;
0.6214 0.8681 0.7060 0.8652 0.9190 0.3355];
z = zr + i*zi;
title = 'Original sequences:';
[ifail] = x04da('General','Non-unit', z, title);
init = 'Initial';
trig = zeros(2*n,1);
[ztr, zti, trig, ifail] = c06fr(m, n, zr, zi, init, trig);
zt = ztr + i*zti;
disp(' ');
title = 'Discrete Fourier Transforms:';
[ifail] = x04da('General','Non-unit', zt, title);
zti = -zti;
init = 'Subsequent';
[zrr, zri, trig, ifail] = c06fr(m, n, ztr, zti, init, trig);
zr = zrr - i*zri;
disp(' ');
title = 'Original data as restored by inverse transform';
[ifail] = x04da('General','Non-unit', zr, title);
c06fr example results
Original sequences:
1 2 3 4 5 6
1 0.3854 0.6772 0.1138 0.6751 0.6362 0.1424
0.5417 0.2983 0.1181 0.7255 0.8638 0.8723
2 0.9172 0.0644 0.6037 0.6430 0.0428 0.4815
0.9089 0.3118 0.3465 0.6198 0.2668 0.1614
3 0.1156 0.0685 0.2060 0.8630 0.6967 0.2792
0.6214 0.8681 0.7060 0.8652 0.9190 0.3355
Discrete Fourier Transforms:
1 2 3 4 5 6
1 1.0737 -0.5706 0.1733 -0.1467 0.0518 0.3625
1.3961 -0.0409 -0.2958 -0.1521 0.4517 -0.0321
2 1.1237 0.1728 0.4185 0.1530 0.3686 0.0101
1.0677 0.0386 0.7481 0.1752 0.0565 0.1403
3 0.9100 -0.3054 0.4079 -0.0785 -0.1193 -0.5314
1.7617 0.0624 -0.0695 0.0725 0.1285 -0.4335
Original data as restored by inverse transform
1 2 3 4 5 6
1 0.3854 0.6772 0.1138 0.6751 0.6362 0.1424
0.5417 0.2983 0.1181 0.7255 0.8638 0.8723
2 0.9172 0.0644 0.6037 0.6430 0.0428 0.4815
0.9089 0.3118 0.3465 0.6198 0.2668 0.1614
3 0.1156 0.0685 0.2060 0.8630 0.6967 0.2792
0.6214 0.8681 0.7060 0.8652 0.9190 0.3355
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015