
cfftb
Performs a backward complex discrete fourier transform [Fourier Synthesis].
Prototype
function cfftb ( cf : numeric, cfopt : integer ) return_val : typeof(x)
Arguments
cfAn array, possibly modified, returned by cfftf. The array should be unnormalized.
cfoptSpecifies how the reconstructed array will be returned,
- cfopt=0, return the reconstructed 'complex' periodic sequence.
- cfopt=1, return only the real portion of the synthesized array.
- cfopt=2, return only imaginary portion of the synthesized array.
Return value
The returned array will be a real or 'complex' periodic sequence depending upon the value of cfopt. A double array is returned if cf is double, otherwise a float array is returned.
Description
Given a sequence of unnormalized real and imaginary Fourier coefficients, cf, as generated by cfftf, the cfftb function performs a backward complex Fourier transform. This is often called Fourier Synthesis. It will normalize the results before returning the complex sequence.
If any missing values [_FillValue] are encountered in one of the input arrays, then no calculations will be performed on that array, and the corresponding output array will be filled with missing values.
See Also
cfftf, cfftf_frq_reorder, ezfftf, ezfftb, fft2df, fft2db, taper, dtrend, specx_anal, specxy_anal
Examples
Example 1
Perform a complex forward transform (fourier analysis: cfftf) of a real periodic sequence. Then perform complex backward transform (fourier synthesis: cfftb) to reconstruct the original series.
x = (/ 1002, 1017, 1018, 1020, 1018, 1027, \ 1028, 1030, 1012, 1012, 982, 1012, \ 1001, 996, 995, 1011, 1027, 1025, \ 1030, 1016, 996, 1006, 1002, 982 /) N = dimsizes(x) cf = cfftf (x, 0.0, 0) ; will construct a complex array ; carr = complex( x, 0.0) printVarSummary(cf) xNew = cfftb (cf, 1) ; return only the real portion maxDiff = max(abs(xNew-x)) print("cfft{f/b}: maxDiff="+maxDiff)The maxDiff is at machine accuracy (~1e-6 for x of type real).
Example 2
Perform a complex forward transform (fourier analysis: cfftf) of a real periodic sequence. Then perform complex backward transform (fourier synthesis: cfftb) to reconstruct the original series. Demonstrate the options
xr = (/ 1002, 1017, 1018, 1020, 1018, 1027, \ 1028, 1030, 1012, 1012, 982, 1012, \ 1001, 996, 995, 1011, 1027, 1025, \ 1030, 1016, 996, 1006, 1002, 982 /) xi = xr(::-1) cf = cfftf (xr, xi, 0) ; will construct a complex array ; carr = complex( x, 0.0) x0 = cfftb (cf, 0) ; return complex (2,...) x1 = cfftb (cf, 1) ; return only the real portion x2 = cfftb (cf, 2) ; return only the imaginary portion print(cf) print(x0) print(x1) print(x2)Edited [reformatted] output:
Variable: cf Type: float Total Size: 192 bytes 48 values Number of Dimensions: 2 Dimensions and sizes: [2] x [24] <== complex Coordinates: Number Of Attributes: 2 npts : 24 frq :(0) FRQ real imag (0) 0.00000 24265.000 24265.000 (1) 0.04167 -31.392 -40.911 (2) 0.08333 -152.488 -264.117 (3) 0.12500 -20.920 -50.506 (4) 0.16667 3.127 11.670 (5) 0.20833 -11.586 -88.001 (6) 0.25000 0.000 -24.000 (7) 0.29167 11.661 -88.573 (8) 0.33333 13.447 -50.187 (9) 0.37500 29.080 -70.205 (10) 0.41667 -29.512 51.117 (11) 0.45833 58.801 -76.631 (12) 0.50000 -43.000 43.000 (13) -0.45833 12.033 -9.233 (14) -0.41667 21.129 -12.199 (15) -0.37500 22.920 -9.494 (16) -0.33333 51.553 -13.813 (17) -0.29167 -77.055 10.145 (18) -0.25000 2.000 0.000 (19) -0.20833 -117.976 -15.532 (20) -0.16667 75.873 20.330 (21) -0.12500 72.920 30.205 (22) -0.08333 -171.129 -98.801 (23) -0.04167 63.514 48.736 Variable: x0 Type: float Total Size: 192 bytes 48 values Number of Dimensions: 2 Dimensions and sizes: [2] x [24] Coordinates: REAL (0,0) 1002 (0,1) 1017 (0,2) 1018 (0,3) 1020 (0,4) 1018 (0,5) 1027 (0,6) 1028 (0,7) 1030 (0,8) 1012 (0,9) 1012 (0,10) 982 (0,11) 1012 (0,12) 1001 (0,13) 996 (0,14) 995 (0,15) 1011 (0,16) 1027 (0,17) 1025 (0,18) 1030 (0,19) 1016 (0,20) 996 (0,21) 1006 (0,22) 1002 (0,23) 982 IMAG (1,0) 982 (1,1) 1002 (1,2) 1006 (1,3) 996 (1,4) 1016 (1,5) 1030 (1,6) 1025 (1,7) 1027 (1,8) 1011 (1,9) 995 (1,10) 996 (1,11) 1001 (1,12) 1012 (1,13) 982 (1,14) 1012 (1,15) 1012 (1,16) 1030 (1,17) 1028 (1,18) 1027 (1,19) 1018 (1,20) 1020 (1,21) 1018 (1,22) 1017 (1,23) 1002 Variable: x1 Type: float Total Size: 96 bytes 24 values Number of Dimensions: 1 Dimensions and sizes: [24] Coordinates: (0) 1002 (1) 1017 (2) 1018 (3) 1020 (4) 1018 (5) 1027 (6) 1028 (7) 1030 (8) 1012 (9) 1012 (10) 982 (11) 1012 (12) 1001 (13) 996 (14) 995 (15) 1011 (16) 1027 (17) 1025 (18) 1030 (19) 1016 (20) 996 (21) 1006 (22) 1002 (23) 982 Variable: x2 Type: float Total Size: 96 bytes 24 values Number of Dimensions: 1 Dimensions and sizes: [24] Coordinates: (0) 982 (1) 1002 (2) 1006 (3) 996 (4) 1016 (5) 1030 (6) 1025 (7) 1027 (8) 1011 (9) 995 (10) 996 (11) 1001 (12) 1012 (13) 982 (14) 1012 (15) 1012 (16) 1030 (17) 1028 (18) 1027 (19) 1018 (20) 1020 (21) 1018 (22) 1017 (23) 1002