View Course Path

# Computing Inverse DFT (IDFT) using DIF FFT algorithm – IFFT

Contents

## What is FFT?

• We use N-point DFT to convert an N-point time-domain sequence x(n) to an N-point frequency domain sequence x(k).
• The purpose of performing a DFT operation is so that we get a discrete-time signal to perform other processing like filtering and spectral analysis on it.
• However, the process of calculating DFT is quite complex.
• It requires NxN complex multiplications and N(N+1) complex additions.
• Cooley and Turkey were two mathematicians who came up with FFT – Fast Fourier Transforms. This is a method of calculating DFT a bit faster.
• To be precise, the FFT took down the complexity of complex multiplications from ${ N }^{ 2 }$ to N$log _{ 2 }{ N }$.
• Thus, the FFT (Fast Fourier Transform) is nothing but a more efficient way of calculating the DFT (Discrete Fourier Transform).
• The FFT is basically two algorithms that we can use to compute DFT.
• Decimation in Time algorithm (DIT).
• Decimation in Frequency algorithm (DIF).
• The gist of these two algorithms is that we break up the signal in either time and frequency domains and calculate the DFTs for each and then add the results up.
• We have taken an in-depth look into both of these algorithms in this Digital Signal Processing course.

## How can we use the FFT algorithm to calculate inverse DFT (IDFT)?

Check out the formulae for calculating DFT and inverse DFT below.

DFT: x(k) = $\sum _{ n=0 }^{ N-1 }{ x(n){ e }^{ \frac { -j2\pi nk }{ N } } }$

IDFT: x(n) = $\frac { 1 }{ N } \sum _{ n=0 }^{ N-1 }{ x(k){ e }^{ \frac { j2\pi nk }{ N } } }$

As you can see, there are only three main differences between the formulae.

• In DFT we calculate discrete signal x(k) using a continuous signal x(n). Whereas in the IDFT, it’s the opposite.
• In the IDFT formula, we have two different multiplying factors.
• The factor 1/N
• The factor ${ W }_{ N }^{ -nk }$ which is the complex conjugate of the twiddle factor ${ W }_{ N }^{ nk }$.
• Thus if we multiply with a factor of 1/N and replace the twiddle factor with its complex conjugate in the DIF algorithm’s butterfly structure, we can get the IDFT using the same method as the one we used to calculate FFT.
• In this case, DIF and DIT algorithms are the same.
• We’ll see the modified butterfly structure for the DIF FFT algorithm being used to calculate IDFT.
• From the above butterfly diagram, we can notice the changes that we have incorporated. The inputs are multiplied by a factor of 1/N, and the twiddle factors are replaced by their complex conjugates.

## How to calculate values of conjugate twiddle factor?

Calculating the complex conjugates of the twiddle factor is easy. Just invert the sign of the complex part of the non-conjugate values. The table below will help you understand it better.

 ${ W }_{ 8 }^{ 0 }$${ W }_{ 8 }^{ 0 }$ = 1 ${ W }_{ 8 }^{ 0 }$${ W }_{ 8 }^{ 0 }$ = 1 ${ W }_{ 8 }^{ 1 }$${ W }_{ 8 }^{ 1 }$ = 0.707-0.707j ${ W }_{ 8 }^{- 1 }$${ W }_{ 8 }^{- 1 }$ = 0.707+0.707j ${ W }_{ 8 }^{ 2 }$${ W }_{ 8 }^{ 2 }$ = -j ${ W }_{ 8 }^{ -2 }$${ W }_{ 8 }^{ -2 }$ = j ${ W }_{ 8 }^{ 3 }$${ W }_{ 8 }^{ 3 }$ = -0.707-0.707j ${ W }_{ 8 }^{ -3 }$${ W }_{ 8 }^{ -3 }$ = -0.707+0.707j ${ W }_{ 8 }^{ 4 }$${ W }_{ 8 }^{ 4 }$ = -1 ${ W }_{ 8 }^{ -4 }$${ W }_{ 8 }^{ -4 }$ = -1 ${ W }_{ 8 }^{ 5 }$${ W }_{ 8 }^{ 5 }$ = -0.707+0.707j ${ W }_{ 8 }^{ -5 }$${ W }_{ 8 }^{ -5 }$ = -0.707-0.707j ${ W }_{ 8 }^{ 6 }$${ W }_{ 8 }^{ 6 }$ = j ${ W }_{ 8 }^{ -6 }$${ W }_{ 8 }^{ -6 }$ = -j ${ W }_{ 8 }^{ 7 }$${ W }_{ 8 }^{ 7 }$ = 0.707+0.707j ${ W }_{ 8 }^{-7 }$${ W }_{ 8 }^{-7 }$ = 0.707-0.707j ${ W }_{ 8 }^{ 8 }$${ W }_{ 8 }^{ 8 }$ = 1 ${ W }_{ 8 }^{-8 }$${ W }_{ 8 }^{-8 }$ = 1

## What is Inverse Fast Fourier Transform (IFFT)?

This method of using the FFT algorithms to calculate Inverse Discrete Fourier Transform (IDFT) is known as IFFT (Inverse Fast Fourier Transform).

## 2 thoughts on “Computing Inverse DFT (IDFT) using DIF FFT algorithm – IFFT”

1. Tej says:

the FFT took down the complexity of complex multiplications from { N }^{ 2 }to \frac { N }{ 2 } \log _{ 2 }{ N } this is actually wrong instead of n/2logn you should write nlogn

1. Umair Hussaini says:

Good catch! It has been fixed! Thank you Tej!

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Top
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 48, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "math_score": 0.9542320370674133, "perplexity": 1991.7381060463945}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "warc_path": "s3://commoncrawl/crawl-data/CC-MAIN-2021-39/segments/1631780057366.40/warc/CC-MAIN-20210922132653-20210922162653-00172.warc.gz"}