summaryrefslogtreecommitdiff
path: root/fourier.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'fourier.hpp')
-rw-r--r--fourier.hpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/fourier.hpp b/fourier.hpp
new file mode 100644
index 0000000..86335f7
--- /dev/null
+++ b/fourier.hpp
@@ -0,0 +1,32 @@
+#pragma once
+#include <cmath>
+#include <fftw3.h>
+#include <complex>
+#include <vector>
+
+using Real = double;
+using Complex = std::complex<Real>;
+using namespace std::complex_literals;
+
+Real f(Real λ, unsigned p, unsigned s, Real q);
+Real df(Real λ, unsigned p, unsigned s, Real q);
+Real ddf(Real λ, unsigned p, unsigned s, Real q);
+
+class FourierTransform {
+private:
+ std::vector<Real> a;
+ std::vector<Complex> â;
+ fftw_plan plan_r2c;
+ fftw_plan plan_c2r;
+ Real Δω;
+ Real Δτ;
+public:
+ FourierTransform(unsigned n, Real Δω, Real Δτ, unsigned flags = 0);
+ ~FourierTransform();
+ std::vector<Complex> fourier(const std::vector<Real>& c);
+ std::vector<Real> inverse(const std::vector<Complex>& ĉ);
+};
+
+std::string fourierFile(std::string prefix, unsigned p, unsigned s, Real λ, Real τ₀, Real y, unsigned log2n, Real τₘₐₓ);
+Real energy(const std::vector<Real>& C, const std::vector<Real>& R, unsigned p, unsigned s, Real λ, Real y, Real Δτ);
+std::tuple<std::vector<Complex>, std::vector<Complex>> RddfCtdfCt(FourierTransform& fft, const std::vector<Real>& C, const std::vector<Real>& R, unsigned p, unsigned s, Real λ);