<< Chapter < Page | Chapter >> Page > |
A major application of the FFT is fast convolution or fast filtering where the DFT of the signal is multiplied term-by-term by the DFT ofthe impulse (helps to be doing finite impulse response (FIR) filtering) and the time-domain output is obtained by taking the inverse DFT ofthat product. What is less well-known is the DFT can be calculated by convolution. There are several different approaches to this,each with different application.
In this section a method quite different from the index mapping or polynomial evaluation is developed. Rather than dealingwith the DFT directly, it is converted into a cyclic convolution which must then be carried out by some efficient means. Those meanswill be covered later, but here the conversion will be explained. This method requires use of some number theory, which can befound in an accessible form in [link] or [link] and is easy enough to verify on one's own. A good general reference on numbertheory is [link] .
The DFT and cyclic convolution are defined by
For both, the indices are evaluated modulo . In order to convert the DFT in [link] into the cyclic convolution of [link] , the product must be changed to the difference. With real numbers, this can be done with logarithms, but it is more complicated when working in a finite set of integersmodulo . From number theory [link] , [link] , [link] , [link] , it can be shown that if the modulus is a prime number, a base (called aprimitive root) exists such that a form of integer logarithm can be defined. This is stated in the following way. If is a prime number, a number called a primitive roots exists such that the integer equation
creates a unique, one-to-one map of the member set and the member set . This is because the multiplicative group of integers modulo a prime, , is isomorphic to the additive group of integers modulo and is illustrated for below.
r | m= | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
2 | 1 | 2 | 4 | 3 | 1 | 2 | 4 | 3 | |
3 | 1 | 3 | 4 | 2 | 1 | 3 | 4 | 2 | |
4 | 1 | 4 | 1 | 4 | 1 | 4 | 1 | 4 | |
5 | * | 0 | 0 | 0 | * | 0 | 0 | 0 | |
6 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
[link] is an array of values of modulo and it is easy to see that there are two primitiveroots, 2 and 3, and [link] defines a permutation of the integers from the integers (except for zero). [link] and a primitive root (usually chosen to be the smallest of those that exist) can be used to convert the DFT in [link] to the convolution in [link] . Since [link] cannot give a zero, a new length-(N-1) data sequence is defined from by removing the term with index zero. Let
and
where the term with the negative exponent (the inverse) is defined as the integer that satisfies
If is a prime number, always exists. For example, . [link] now becomes
for , and
New functions are defined, which are simply a permutation in the order of the original functions, as
[link] then becomes
which is cyclic convolution of length N-1 (plus ) and is denoted as
Applying this change of variables (use of logarithms) to the DFT can best be illustrated from the matrix formulation of the DFT. [link] is written for a length-5 DFT as
Notification Switch
Would you like to follow the 'Fast fourier transforms' conversation and receive update notifications?