<< Chapter < Page Chapter >> Page >

The sum over x 4 n 4 is now substituted with U k (where k = 0 , , N / 4 - 1 ), while the sums over x 8 n 8 + 2 and x 8 n n - 2 are respectively substituted with Y k and Y k ' (where k = 0 , , N / 8 - 1 ) and the sums over x 4 n 4 + 1 and x 4 n 4 - 1 respectively substituted with Z k and Z k ' (where k = 0 , , N / 4 - 1 ), simplifying [link] thus:

X k = U k + ω N 2 k Y k + ω N - 2 k Y k ' + ω N k Z k + ω N - k Z k '

As with earlier examples, computation is factored out of [link] by exploiting periodicity in the sub-transforms and symmetries in the twiddle factors. [link] is first expressed as a parametric equation of eight parts:

X k + p N = U k + p N + ω N 2 ( k + p N ) Y k + p N + ω N - 2 ( k + p N ) Y k + p N ' + ω N k + p N Z k + p N + ω N - ( k + p N ) Z k + p N '

where k = 0 , , N / 8 - 1 and p 0 , 1 2 , 1 4 , 3 4 , 1 8 , 3 8 , 5 8 , 7 8 . By exploiting periodicity in the sub-transforms:

U k = U k + N / 4 Y k = Y k + N / 8 Y k ' = Y k + N / 8 ' Z k = Z k + N / 4 Z k ' = Z k + N / 4 '

and the following symmetries in the twiddle factors:

ω N 2 k = ω N 2 ( k + N / 2 ) = - ω N 2 ( k + N / 4 ) = - ω N 2 ( k + 3 N / 4 ) = - i ω N 2 ( k + N / 8 ) = i ω N 2 ( k + 3 N / 8 ) = - i ω N 2 ( k + 5 N / 8 ) = i ω N 2 ( k + 7 N / 8 ) ω N - 2 k = ω N - 2 ( k + N / 2 ) = - ω N - 2 ( k + N / 4 ) = - ω N - 2 ( k + 3 N / 4 ) = i ω N - 2 ( k + N / 8 ) = - i ω N - 2 ( k + 3 N / 8 ) = i ω N - 2 ( k + 5 N / 8 ) = - i ω N - 2 ( k + 7 N / 8 ) ω N k = - ω N k + N / 2 = - i ω N k + N / 4 = i ω N k + 3 N / 4 ω N - k = - ω N - ( k + N / 2 ) = i ω N - ( k + N / 4 ) = - i ω N - ( k + 3 N / 4 ) ω N k + N / 8 = - i ω N k + 3 N / 8 = - ω N k + 5 N / 8 = i ω N k + 7 N / 8 ω N - ( k + N / 8 ) = i ω N - ( k + 3 N / 8 ) = - ω N - ( k + 5 N / 8 ) = - i ω N - ( k + 7 N / 8 )

[link] is rewritten thus:

X k = U k + ( ω N 2 k Y k + ω N - 2 k Y k ' ) + ( ω N k Z k + ω N - k Z k ' ) X k + N / 2 = U k + ( ω N 2 k Y k + ω N - 2 k Y k ' ) - ( ω N k Z k + ω N - k Z k ' ) X k + N / 4 = U k - ( ω N 2 k Y k + ω N - 2 k Y k ' ) - i ( ω N k Z k - ω N - k Z k ' ) X k + 3 N / 4 = U k - ( ω N 2 k Y k + ω N - 2 k Y k ' ) + i ( ω N k Z k - ω N - k Z k ' ) X k + N / 8 = U k + N / 8 - i ( ω N 2 k Y k - ω N - 2 k Y k ' ) + ( ω N k + N / 8 Z k + N / 8 + ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 3 N / 8 = U k + N / 8 + i ( ω N 2 k Y k - ω N - 2 k Y k ' ) - i ( ω N k + N / 8 Z k + N / 8 - ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 5 N / 8 = U k + N / 8 - i ( ω N 2 k Y k - ω N - 2 k Y k ' ) - ( ω N k + N / 8 Z k + N / 8 + ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 7 N / 8 = U k + N / 8 + i ( ω N 2 k Y k - ω N - 2 k Y k ' ) + i ( ω N k + N / 8 Z k + N / 8 - ω N - ( k + N / 8 ) Z k + N / 8 ' )

By applying terms with the appropriate scaling, viz. α N , k = s N / 4 , k / s N , k , β N , k = s N / 8 , k / s N / 2 , k , γ N , k = s N / 4 , k + N / 8 / s N , k + N / 8 , δ N , k = s N / 2 , k / s N , k and ϵ N , k = s N / 2 , k + N / 8 / s N , k + N / 8 , [link] now becomes:

X k / s N , k = U k α N , k + ( β N , k ω N 2 k Y k + β N , k ω N - 2 k Y k ' ) δ N , k + ( α N , k ω N k Z k + α N , k ω N - k Z k ' ) X k + N / 2 / s N , k = U k α N , k + ( β N , k ω N 2 k Y k + β N , k ω N - 2 k Y k ' ) δ N , k - ( α N , k ω N k Z k + α N , k ω N - k Z k ' ) X k + N / 4 / s N , k = U k α N , k - ( β N , k ω N 2 k Y k + β N , k ω N - 2 k Y k ' ) δ N , k - i ( α N , k ω N k Z k - α N , k ω N - k Z k ' ) X k + 3 N / 4 / s N , k = U k α N , k - ( β N , k ω N 2 k Y k + β N , k ω N - 2 k Y k ' ) δ N , k + i ( α N , k ω N k Z k - α N , k ω N - k Z k ' ) X k + N / 8 / s N , k = U k + N / 8 γ N , k - i ( β N , k ω N 2 k Y k - β N , k ω N - 2 k Y k ' ) ϵ N , k + ( γ N , k ω N k + N / 8 Z k + N / 8 + γ N , k ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 3 N / 8 / s N , k = U k + N / 8 γ N , k + i ( β N , k ω N 2 k Y k - β N , k ω N - 2 k Y k ' ) ϵ N , k - i ( γ N , k ω N k + N / 8 Z k + N / 8 - γ N , k ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 5 N / 8 / s N , k = U k + N / 8 γ N , k - i ( β N , k ω N 2 k Y k - β N , k ω N - 2 k Y k ' ) ϵ N , k - ( γ N , k ω N k + N / 8 Z k + N / 8 + γ N , k ω N - ( k + N / 8 ) Z k + N / 8 ' ) X k + 7 N / 8 / s N , k = U k + N / 8 γ N , k + i ( β N , k ω N 2 k Y k - β N , k ω N - 2 k Y k ' ) ϵ N , k + i ( γ N , k ω N k + N / 8 Z k + N / 8 - γ N , k ω N - ( k + N / 8 ) Z k + N / 8 ' )

Assuming that the scaling factors are absorbed into precomputed twiddle factors where possible (e.g., α N , k ω N k is a single precomputed constant), computing [link] requires about ( 68 / 8 ) N real operations, in contrast to ( 72 / 8 ) N operations for [link] . Further assuming that operations are skipped in the cases where precomputed constants are of the form ± 1 or ± i , a further 28 real operations are saved in [link] . Thus the arithmetic cost of [link] can be expressed with the following recurrence relation:

T ( n ) = 3 T ( n / 4 ) + 2 T ( n / 8 ) + max { n - 12 , 0 } + 7 . 5 n - 16 for n 8 16 for n = 4 4 for n = 2 0 for n = 1

Bernstein gives the exact solution of [link] as  [link] :

T ( n ) = ( 34 / 9 ) n log 2 n - ( 142 / 27 ) n - ( 2 / 9 ) ( - 1 ) log 2 n log 2 n + ( 7 / 27 ) ( - 1 ) log 2 n + 7

for n 2 .

[link] is scaled by s N , k , but if the application is convolution in frequency, the scaling could beabsorbed into the filter, and the cost of scaling the results back to X k avoided. Otherwise, a split-radix FFT can be used to change basis, absorbing the scaling into the twiddle factors of the x 4 n 4 + 1 and x 4 n 4 - 1 terms:

X k = U k + ( s N , k ω N k Z k + s N , k ω N - k Z k ' ) X k + N / 2 = U k - ( s N , k ω N k Z k + s N , k ω N - k Z k ' ) X k + N / 4 = U k + N / 4 - i ( s N , k ω N k Z k - s N , k ω N - k Z k ' ) X k + 3 N / 4 = U k + N / 4 + i ( s N , k ω N k Z k - s N , k ω N - k Z k ' )

where Z k and Z k ' are now recursively computed with the tangent FFT of [link] , and the U k terms are themselves computed with [link] . The arithmetic cost of computing the tangent FFT in the traditional basis is thus expressed:

T ' ( n ) = T ' ( n / 2 ) + 2 T ( n / 4 ) + 3 n + max { 3 n - 16 , 0 } for n 4 4 for n = 2 0 for n = 1

giving rise to Van Buskirk's exact operation count of  [link] :

T ' ( n ) = ( 34 / 9 ) n log 2 n - ( 124 / 27 ) n - 2 log 2 n - ( 2 / 9 ) ( - 1 ) log 2 n log 2 n + ( 16 / 27 ) ( - 1 ) log 2 n + 8

for n 2 .

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Computing the fast fourier transform on simd microprocessors. OpenStax CNX. Jul 15, 2012 Download for free at http://cnx.org/content/col11438/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Computing the fast fourier transform on simd microprocessors' conversation and receive update notifications?

Ask