<< Chapter < Page | Chapter >> Page > |
The source code has a few subtle differences that are not revealed in the pseudocode. The pseudocode in [link] requires an array of complex numbers for input, but the source code requires a reference to an array of complex numbers with a stride A stride of would indicate that only every term is being referred to. – this avoids copying into three separate arrays, viz. , and , with every invocation of [link] . The subtle complication arises due to the cyclic shifting of the term; the negative shifting results in pointers that reference data before the start of the array. Rather than immediately wrapping the references around to end of the array such that they always point to validdata, the recursion proceeds until the base cases are reached before any adjustment is performed. Once at the leaves of the recursion, any pointers that reference data lying before the start of the input array are incremented by elements, In this case, refers to the size of the outer most transform rather than the size of the sub-transform. so as to point to the correct data.
IF
RETURN
ELSIF
ELSE
FOR
to
END FOR
ENDIF RETURN
IF
RETURN
ELSIF
ELSIF
ELSE
FOR
to
END FOR
ENDIF RETURN
The tangent FFT is divided into two functions, described with pseudocode in [link] and [link] . If the tangent FFT is computed prior to convolution in the frequency domain, theconvolution kernel can absorb the final scaling and only [link] is required. Otherwise [link] is used as a wrapper around [link] to perform the rescaling, and the result is in the correct basis.
[link] is similar to [link] , except that and are computed with [link] , and thus scaled by . Because and are respectively multiplied by the coefficients and , the results are scaled into the correct basis by absorbing into the coefficients.
Notification Switch
Would you like to follow the 'Computing the fast fourier transform on simd microprocessors' conversation and receive update notifications?