<< Chapter < Page Chapter >> Page >
R 9 R 5 = ( R 9 I 5 ) ( I 9 R 5 )

and

R 9 R 25 R 7 = ( R 9 I 175 ) ( I 9 R 25 I 7 ) ( I 225 R 7 )

When this factored form of R n i or any of the variations alluded to above, is used, the number of additions incurred is given by

i = 1 k N p i e i A ( R p i e i ) = i = 1 k N p i e i 2 ( p i e i - 1 ) = 2 N i = 1 k 1 - 1 p i e i = 2 N k - i = 1 k 1 p i e i

where N = p 1 e 1 p k e k .

Although the use of operations of the form R p 1 e 1 R p k e k is simple, it does not exactly separate the circular convolution into smaller disjoint convolutions.In other words, its use does not give rise in [link] and [link] to block diagonal matrices whose diagonalblocks are the form i C Φ p i . However, by reorganizing the arrangement of theoperations we can obtain the block diagonal form we seek.

First, suppose A , B and C are matrices of sizes a × a , b × b and c × c respectively. If

T B T - 1 = B 1 B 2

where B 1 and B 2 are matrices of sizes b 1 × b 1 and b 2 × b 2 , then

Q ( A B C ) Q - 1 = A B 1 C A B 2 C

where

Q = I a T ( 1 : b 1 , : ) I c I a T ( b 1 + 1 : b , : ) I c .

Here T ( 1 : b 1 , : ) denotes the first b 1 rows and all the columns of T and similarly for T ( b 1 + 1 : b , : ) . Note that

A B 1 C A B 2 C A B 1 B 2 C .

That these two expressions are not equal explains why the arrangement of operations must be reorganizedin order to obtain the desired block diagonal form. The appropriate reorganization is described by theexpression in [link] . Therefore, we must modify the transformation of [link] appropriately. It should be noted that this reorganization ofoperations does not change their computational cost. It is still given by [link] .

For example, we can use this observation and the expression in [link] to arrive at the following similarity transformation:

Q S p 1 S p 2 Q - 1 = 1 C Φ p 1 C Φ p 2 C Φ p 1 C Φ p 2

where

Q = I p 1 1 -p 2 t I p 1 G p 2 R p 1 I p 2

1 -p is a column vector of p 1's

1 -p = 1 1 1 t

and G p is the ( p - 1 ) × p matrix:

G p = 1 - 1 1 - 1 1 - 1 = I p - 1 - 1 ̲ p - 1 .

In general we have

R S p 1 e 1 S p k e k R - 1 = d | n Ψ ( d )

where R = R p 1 e 1 , , p k e k is given by

R p 1 e 1 , , p k e k = i = k 1 Q ( m i , p i e i , n i )

with m i = j = 1 i - 1 p j e j , n i = j = i + 1 k p j e j and

Q ( a , p e , c ) = j = 0 e - 1 I a 1 - p t I c p j I a G p I c p j I a c ( p e - p j + 1 ) .

1 -p and G p are as given in [link] and [link] .

R S 9 S 5 R - 1 = 1 C Φ 3 C Φ 9 C Φ 5 C Φ 3 C Φ 5 C Φ 9 C Φ 5
where
R = R 9 , 5 = Q ( 9 , 5 , 1 ) Q ( 1 , 9 , 5 )
and R can be implemented with 152 additions.

Notice the distinction between this example and example "Reduction Operations" . In example "Reduction Operations" we obtained from S 9 S 5 a Kronecker product of two block diagonal matrices, but here we obtaineda block diagonal matrix whose diagonal blocks are the Kronecker product of cyclotomic companionmatrices. Each block in [link] represents a multi-dimensional cyclotomic convolution.

A Matlab program that carries out the operation R p 1 e 1 , , p k e k in [link] is KRED() .

function x = KRED(P,E,K,x) % x = KRED(P,E,K,x);% P : P = [P(1),...,P(K)];% E : E = [E(K),...,E(K)];for i = 1:K a = prod(P(1:i-1).^E(1:i-1));c = prod(P(i+1:K).^E(i+1:K)); p = P(i);e = E(i); for j = e-1:-1:0x(1:a*c*(p^(j+1))) = RED(p,a,c*(p^j),x(1:a*c*(p^(j+1)))); endend

It calls the Matlab program RED() .

function y = RED(p,a,c,x) % y = RED(p,a,c,x);y = zeros(a*c*p,1); for i = 0:c:(a-1)*cfor j = 0:c-1 y(i+j+1) = x(i*p+j+1);for k = 0:c:c*(p-2) y(i+j+1) = y(i+j+1) + x(i*p+j+k+c+1);y(i*(p-1)+j+k+a*c+1) = x(i*p+j+k+1) - x(i*p+j+c*(p-1)+1); endend end

These two Matlab programs are not written to run as fast as they could be.They are a `naive' coding of R p 1 e 1 , , p k e k and are meant to serve as a basis for more efficient programs. In particular, the indexing and the loop counters canbe modified to improve the efficiency. However, the modifications that minimize the overheadincurred by indexing operations depends on the programming language, the compiler and the computer used.These two programs are written with simple loop counters and complicated indexing operationsso that appropriate modifications can be easily made.

Inverses

The inverse of R p has the form

R p - 1 = 1 p 1 p - 1 - 1 - 1 - 1 1 - 1 p - 1 - 1 - 1 1 - 1 - 1 p - 1 - 1 1 - 1 - 1 - 1 p - 1 1 - 1 - 1 - 1 - 1

and

R p e - 1 = k = 0 e - 1 ( ( R p - 1 I p e - 1 - k ) I p e - p e - k ) .

Because the inverse of Q in [link] is given by

Q - 1 = I a T - 1 ( : , 1 : b 1 ) I c I a T - 1 ( : , b 1 + 1 : b ) I c

the inverse of the matrix R described by eqs [link] , [link] and [link] is given by

R - 1 = i = 1 k Q ( m i , p i e i , n i ) - 1

with m i = j = 1 i - 1 p j e j , n i = j = i + 1 k p j e j and

Q ( a , p e , c ) - 1 = j = e - 1 0 I a 1 -p t I c p j I a V p I c p j I a c ( p e - p j + 1 )

where V p denotes the matrix in [link] without the first column. A Matlab program for R t is tKRED() , it calls the Matlab program tRED() . A Matlab program for R - t is itKRED() , it calls the Matlab program itRED() . These programs all appear in one of the appendices.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Automatic generation of prime length fft programs. OpenStax CNX. Sep 09, 2009 Download for free at http://cnx.org/content/col10596/1.4
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Automatic generation of prime length fft programs' conversation and receive update notifications?

Ask