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);
}
|