summaryrefslogtreecommitdiffhomepage
path: root/autocorrelation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'autocorrelation.cpp')
-rw-r--r--autocorrelation.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/autocorrelation.cpp b/autocorrelation.cpp
new file mode 100644
index 0000000..5c778c1
--- /dev/null
+++ b/autocorrelation.cpp
@@ -0,0 +1,29 @@
+#include "autocorrelation.h"
+
+#include "fft.h"
+
+struct RIT::AutoCorrelation::Impl {
+public:
+ Impl(int size): mFft(std::make_shared<RIT::FFT>(size)), mIfft(mFft) {}
+ std::shared_ptr<RIT::FFT> mFft;
+ RIT::IFFT mIfft;
+};
+
+RIT::AutoCorrelation::AutoCorrelation(int size): mImpl(std::make_unique<RIT::AutoCorrelation::Impl>(size))
+{
+}
+
+RIT::AutoCorrelation::~AutoCorrelation()
+{
+}
+
+std::vector<std::complex<double>> RIT::AutoCorrelation::operator()(const std::vector<std::complex<double>> &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);
+}
+