<< Chapter < Page Chapter >> Page >

Discrete fourier transform

The Discrete Fourier Transform, from now on DFT, of a finite length sequence ( x 0 , ... , x K - 1 ) is defined as

k = n = 0 K - 1 x n e - 2 π j k n K ( k = 0 , ... , K - 1 )

To motivate this transform think of x n as equally spaced samples of a T -periodic signal x ( t ) over a period, e.g., x n = x ( n T / K ) . Then, using the Riemann Sum as an approximation of an integral, i.e.,

n = 0 K - 1 f ( n T K ) T K 0 T f ( t ) d t

we find

x ˆ k = n = 0 K - 1 x ( n T K ) e - 2 π j n T K k / T K T 0 T x ( t ) e - 2 π j t k / T d t = K X k

Note that the approximation is better, the larger the sample size K is.

Remark on why the factor K in [link] : recall that X k is an average while x ^ k is a sum. Take for instance k = 0 : X 0 is the average of the signal while x ^ 0 is the sum of the samples.

From the above we may hope that a development similar to the Fourier series [link] should also exist in the discrete case. To this end, we note first that the DFT is a linear transform and can berepresented by a matrix multiplication (the “exponent” T means transpose):

( x ˆ 0 , ... , x ˆ K - 1 ) T = D F T K · ( x 0 , ... , x K - 1 ) T .

The matrix D F T K possesses K lines and K rows; the entry in line k row n is e - 2 π j k n / K . A few examples are

D F T 1 = 1 D F T 2 = 1 1 1 - 1 D F T 4 = 1 1 1 1 1 - j - 1 j 1 - 1 1 - 1 1 j - 1 - j

The rows are orthogonal The scalar product for complex vectors x = ( x 1 , x 2 , ... , x K ) and y = ( y 1 , y 2 , ... , y K ) is computed as

x · y = x 1 y 1 * + x 2 y 2 * + ... + x K y K * ,
where a * is the conjugate complex of a . Orthogonal means x · y = 0 .
to each other. Also, all rows have length Length is computed as | | x | | = x · x = x 1 x 1 * + x 2 x 2 * + ... + x K x K * = | x 1 | 2 + | x 2 | 2 + ... + | x K | 2 . K . Finally, the matrices are symmetric (exchanging lines for rows does not change the matrix). So, the multiplying DFT with its conjugate complex matrix ( D F T K ) * we get K times the unit matrix (diagonal matrix with all diagonal elements equal to K ).

Inverse DFT

From all this we conclude that the inverse matrix of D F T K is I D F T K = ( 1 / K ) · ( D F T K ) * . Since ( e - α ) * = e α we find

x n = 1 K k = 0 K - 1 x ˆ k e 2 π j k n K ( n = 0 , ... , K - 1 )

Spectral interpretation, symmetries, periodicity

Combining [link] and [link] we may now interpret x ˆ k as the coefficient of the complex harmonic with frequency k / T in a decomposition of the discrete signal x n ; its absolute value provides the amplitude of the harmonic and its argument the phase difference.

If x is even, x ˆ k is real for all k and all harmonics are in phase.

Using the periodicity of e 2 π j t we obtain x n = x n + K when evaluating [link] for arbitrary n . Short, we can consider x n as equally-spaced samples of the T -periodic signal x ( t ) over any interval of length T :

x ˆ k = n = - K / 2 K / 2 - 1 x n e - 2 π j k n K .

Similarly, x ˆ k is periodic: x ˆ k = x ˆ k + K . Thus, it makes sense to evaluate x ˆ k for any k . For instance, we can rewrite [link] as

x n = 1 K n = - K / 2 K / 2 - 1 x ˆ k e 2 π j k n K

Since x ˆ k corresponds to the frequency k / T , the period K of x ˆ k corresponds to a period of K / T in actual frequency. This is exactly the sampling frequency (or sampling rate) of the original signal( K samples per T time units). Compare to the spectral repetitions.

However, the period T of the original signal x is nowhere present in the formulas of the DFT (cpre. [link] and [link] ). Thus, if nothing is known about T , it is assumed that the sampling rate is 1 (1 sample per time unit), meaning that K = T .

FFT

The Fast Fourier Transform (FFT) is a clever algorithm which implements the DFT in only K log ( K ) operations. Note that the matrix multiplication would require K 2 operations.

Matlab implements the FFT with the command fft(x) where x is the input vector. Note that in Matlab the indices start always with 1! This means that the first entry ofthe Matlab vector x , i.e. x ( 1 ) is the sample point x 0 = x ( 0 ) . Similar, the last entry of the Matlab vector x is, i.e. x ( K ) is the sample point x K - 1 = x ( ( K - 1 ) T / K ) = x ( T - T / K ) .

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Sampling rate conversion. OpenStax CNX. Sep 05, 2013 Download for free at http://legacy.cnx.org/content/col11529/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Sampling rate conversion' conversation and receive update notifications?

Ask