JUK1
fft.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <chrono>
3 #include <vector>
4 #include <complex.h>
5 #include <cmath>
6 #include <numbers>
7 #include <iomanip>
8 #include "Maths/dft.hpp"
9 
10 double
11 myFunctionToSample(double t) {
12  constexpr double freqSine = 1;
13  return std::sin(2 * std::numbers::pi * freqSine * t);
14 }
15 
16 
17 [[clang::optnone]] int
18 main() {
19  // generate data
20  constexpr double T = 2;
21  constexpr double f_s = 8;
22  constexpr size_t numPoints = T * f_s;
23 
24 
25  std::vector<double> inputData; // = { 0, 1, 0, -1, 0, 1, 0, -1 };
26  for (int i = 0; i < numPoints; i++) {
27  inputData.push_back(myFunctionToSample(static_cast<double>(i) / f_s));
28  }
29 
30  // print data as csv
31  for (const auto & num : inputData) {
32  std::cout << std::setprecision(5) << num << ", ";
33  }
34  std::cout << std::endl;
35  std::cout << std::endl;
36  std::cout << std::endl;
37 
38  auto dftres = dft(inputData);
39  auto fftres = fft(inputData);
40 
41  for (const auto & num : dftres) {
42  std::cout << std::setprecision(5) << std::abs(num) << ", ";
43  }
44  std::cout << std::endl;
45  std::cout << std::endl;
46  std::cout << std::endl;
47 
48  for (const auto & num : fftres) {
49  std::cout << std::setprecision(5) << std::abs(num) << ", ";
50  }
51  std::cout << std::endl;
52  std::cout << std::endl;
53  std::cout << std::endl;
54 
55 
56  auto idftres = idft(dftres);
57  for (const auto & num : idftres) {
58  std::cout << std::setprecision(5) << std::real(num) << ", ";
59  }
60  std::cout << std::endl;
61  std::cout << std::endl;
62  std::cout << std::endl;
63 
64  auto ifftres = ifft(dftres);
65  for (const auto & num : ifftres) {
66  std::cout << std::setprecision(5) << std::real(num) << ", ";
67  }
68  std::cout << std::endl;
69  std::cout << std::endl;
70  std::cout << std::endl;
71  return 0;
72 }
pi
Definition: Freq.m:24
f_s
Definition: Freq.m:11
std::vector< std::complex< T > > ifft(const std::vector< std::complex< T > > &inputData)
Definition: dft.hpp:63
std::vector< std::complex< T > > fft(const std::vector< T > &inputData)
Definition: dft.hpp:54
std::vector< std::complex< T > > dft(const std::vector< T > &inputData)
Definition: dft.hpp:24
std::vector< std::complex< T > > idft(const std::vector< std::complex< T > > &inputData)
Definition: dft.hpp:37
double myFunctionToSample(double t)
Definition: fft.cpp:11
int main()
Definition: fft.cpp:18
for i
end if abs(real(dotprod))>rstoerst rstoerst
ang(col sin()