#pragma once #include #include #include #include using Real = double; using Complex = std::complex; 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 a; std::vector â; fftw_plan plan_r2c; fftw_plan plan_c2r; Real Δω; Real Δτ; public: FourierTransform(unsigned n, Real Δω, Real Δτ, unsigned flags = 0); ~FourierTransform(); std::vector fourier(const std::vector& c); std::vector inverse(const std::vector& ĉ); }; std::string fourierFile(std::string prefix, unsigned p, unsigned s, Real λ, Real τ₀, Real y, unsigned log2n, Real τₘₐₓ); Real energy(const std::vector& C, const std::vector& R, unsigned p, unsigned s, Real λ, Real y, Real Δτ); std::tuple, std::vector> RddfCtdfCt(FourierTransform& fft, const std::vector& C, const std::vector& R, unsigned p, unsigned s, Real λ); Real estimateZ(FourierTransform& fft, const std::vector& C, const std::vector& Ct, const std::vector& R, const std::vector& Rt, unsigned p, unsigned s, Real λ, Real y);