Algorithms_in_C++ 1.0.0
Set of 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 <iostream>
#include <vector>
Include dependency graph for inverse_fast_fourier_transform.cpp:

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

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
156 {
157 test(); // run self-test implementations
158 // with 2 defined test cases
159 return 0;
160}
static void test()
Self-test implementations.
Definition inverse_fast_fourier_transform.cpp:100
Here is the call graph for this function:

◆ 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

100 {
101 /* descriptions of the following test */
102
103 auto *t1 = new std::complex<double>[2]; /// Test case 1
104 auto *t2 = new std::complex<double>[4]; /// Test case 2
105
106 t1[0] = {3, 0};
107 t1[1] = {-1, 0};
108 t2[0] = {10, 0};
109 t2[1] = {-2, -2};
110 t2[2] = {-2, 0};
111 t2[3] = {-2, 2};
112
113 uint8_t n1 = 2;
114 uint8_t n2 = 4;
116 {1, 0}, {2, 0}}; /// True Answer for test case 1
117
119 {1, 0}, {2, 0}, {3, 0}, {4, 0}}; /// True Answer for test case 2
120
123
126
127 for (uint8_t i = 0; i < n1; i++) {
128 assert((r1[i].real() - o1[i].real() < 0.000000000001) &&
129 (r1[i].imag() - o1[i].imag() <
130 0.000000000001)); /// Comparing for both real and imaginary
131 /// values for test case 1
132 }
133
134 for (uint8_t i = 0; i < n2; i++) {
135 assert((r2[i].real() - o2[i].real() < 0.000000000001) &&
136 (r2[i].imag() - o2[i].imag() <
137 0.000000000001)); /// Comparing for both real and imaginary
138 /// values for test case 2
139 }
140
141 delete[] t1;
142 delete[] t2;
143 delete[] o1;
144 delete[] o2;
145 std::cout << "All tests have successfully passed!\n";
146}
std::complex< double > * InverseFastFourierTransform(std::complex< double > *p, uint8_t n)
InverseFastFourierTransform is a recursive function which returns list of complex numbers.
Definition inverse_fast_fourier_transform.cpp:33
Here is the call graph for this function: