1 #ifndef SIGNAL_PROCESSING 2 #define SIGNAL_PROCESSING 10 const int num_points = 1024,
11 const double f1 = 50.25,
12 const double f2 = 80.5,
13 const double a1 = 1.0,
14 const double a2 = 0.5)
31 signal.resize(num_points);
33 for (i = 0; i < num_points; ++i)
35 double theta = (double)i / (
double)fs;
36 signal[i] = a1 * sin(f1 * 2.0 * M_PI * theta) +
37 a2 * sin(f2 * 2.0 * M_PI * theta);
42 void fft(
const std::vector<double> &signal,
43 std::vector<double> &frequencies,
44 std::vector<double> &litudes,
61 const int num_points = signal.size();
62 amplitudes.resize(num_points / 2);
63 frequencies.resize(num_points / 2) ;
64 double *signalArray =
new double[num_points];
67 fftw_complex result[num_points / 2 + 1];
68 fftw_plan plan = fftw_plan_dft_r2c_1d(num_points,
72 for (
int i = 0; i < num_points; i++)
73 signalArray[i] = signal[i];
76 for (
int i = 0; i < (0.5 * num_points); i++)
78 amplitudes[i] = 2.0 / (double)(num_points)*sqrt(result[i][REAL] * result[i][REAL] + result[i][IMAG] * result[i][IMAG]);
79 frequencies[i] = i / double(num_points) * fs;
82 fftw_destroy_plan(plan);
88 #endif // !SIGNAL_PROCESSING
void fft(const std::vector< double > &signal, std::vector< double > &frequencies, std::vector< double > &litudes, const double fs)
Definition: signal_processing.hpp:42
void make_signal(std::vector< double > &signal, const int fs, const int num_points=1024, const double f1=50.25, const double f2=80.5, const double a1=1.0, const double a2=0.5)
Definition: signal_processing.hpp:8