summaryrefslogtreecommitdiffhomepage
path: root/autocorrelation.cpp
blob: 5c778c12b542b586d0952102cc4d4961e7e3ebc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);
}