TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
inverse_fast_fourier_transform.cpp File Reference

An inverse fast Fourier transform (IFFT) is an algorithm that computes the inverse fourier transform. More...

#include <cassert>
#include <cmath>
#include <complex>
#include <cstdint>
#include <iostream>
#include <vector>
Include dependency graph for inverse_fast_fourier_transform.cpp:

Go to the source code of this file.

Namespaces

namespace  numerical_methods
 for assert
 

Functions

std::complex< double > * numerical_methods::InverseFastFourierTransform (std::complex< double > *p, uint8_t n)
 InverseFastFourierTransform is a recursive function which returns list of complex numbers.
 
static void test ()
 Self-test implementations.
 
int main (int argc, char const *argv[])
 Main function.
 

Detailed Description

An inverse fast Fourier transform (IFFT) is an algorithm that computes the inverse fourier transform.

This algorithm has an application in use case scenario where a user wants find coefficients of a function in a short time by just using points generated by DFT. Time complexity this algorithm computes the IDFT in O(nlogn) time in comparison to traditional O(n^2).

Author
Ameya Chawla

Definition in file inverse_fast_fourier_transform.cpp.

Function Documentation

◆ main()

int main ( int argc,
char const * argv[] )

Main function.

Parameters
argccommandline argument count (ignored)
argvcommandline array of arguments (ignored) calls automated test function to test the working of fast fourier transform.
Returns
0 on exit

Definition at line 157 of file inverse_fast_fourier_transform.cpp.

157 {
158 test(); // run self-test implementations
159 // with 2 defined test cases
160 return 0;
161}
static void test()
Self-test implementations.

◆ test()

static void test ( )
static

Self-test implementations.

Declaring two test cases and checking for the error in predicted and true value is less than 0.000000000001.

Returns
void

Test case 1

Test case 2

True Answer for test case 1

True Answer for test case 2

Comparing for both real and imaginary values for test case 1

Comparing for both real and imaginary values for test case 2

Definition at line 101 of file inverse_fast_fourier_transform.cpp.

101 {
102 /* descriptions of the following test */
103
104 auto *t1 = new std::complex<double>[2];
105 auto *t2 = new std::complex<double>[4];
106
107 t1[0] = {3, 0};
108 t1[1] = {-1, 0};
109 t2[0] = {10, 0};
110 t2[1] = {-2, -2};
111 t2[2] = {-2, 0};
112 t2[3] = {-2, 2};
113
114 uint8_t n1 = 2;
115 uint8_t n2 = 4;
116 std::vector<std::complex<double>> r1 = {
117 {1, 0}, {2, 0}};
118
119 std::vector<std::complex<double>> r2 = {
120 {1, 0}, {2, 0}, {3, 0}, {4, 0}};
121
122 std::complex<double> *o1 =
124
125 std::complex<double> *o2 =
127
128 for (uint8_t i = 0; i < n1; i++) {
129 assert((r1[i].real() - o1[i].real() < 0.000000000001) &&
130 (r1[i].imag() - o1[i].imag() <
131 0.000000000001));
133 }
134
135 for (uint8_t i = 0; i < n2; i++) {
136 assert((r2[i].real() - o2[i].real() < 0.000000000001) &&
137 (r2[i].imag() - o2[i].imag() <
138 0.000000000001));
140 }
141
142 delete[] t1;
143 delete[] t2;
144 delete[] o1;
145 delete[] o2;
146 std::cout << "All tests have successfully passed!\n";
147}
std::complex< double > * InverseFastFourierTransform(std::complex< double > *p, uint8_t n)
InverseFastFourierTransform is a recursive function which returns list of complex numbers.