#include "autocorrelation.h" #include "fft.h" struct RIT::AutoCorrelation::Impl { public: Impl(int size): mFft(std::make_shared(size)), mIfft(mFft) {} std::shared_ptr mFft; RIT::IFFT mIfft; }; RIT::AutoCorrelation::AutoCorrelation(int size): mImpl(std::make_unique(size)) { } RIT::AutoCorrelation::~AutoCorrelation() { } std::vector> RIT::AutoCorrelation::operator()(const std::vector> &v) const { auto result = (*mImpl->mFft)(v); std::transform(std::begin(result), std::end(result), std::begin(result), [=](const auto& x){return x * std::conj(x);}); return mImpl->mIfft(result); }