MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ auto_correlate()

std::vector< double > MayaFlux::Kinesis::Discrete::auto_correlate ( std::span< const double >  src,
bool  normalize = true 
)

Auto-correlation via FFT.

Parameters
srcInput signal
normalizeNormalise result to zero-lag peak
Returns
Auto-correlation, same length as src

Definition at line 141 of file Convolution.cpp.

142{
143 auto out = apply_convolution(src, src,
144 [](const auto& s, const auto&, auto& r) {
145 P::transform(P::par_unseq, s.begin(), s.end(), s.begin(), r.begin(),
146 [](const std::complex<double>& a, const std::complex<double>& b) {
147 return a * std::conj(b);
148 });
149 });
150
151 if (normalize && !out.empty()) {
152 const double peak = *std::max_element(out.begin(), out.end());
153 if (peak > 0.0) {
154 P::transform(P::par_unseq, out.begin(), out.end(), out.begin(),
155 [peak](double v) { return v / peak; });
156 }
157 }
158
159 return out;
160}
size_t a
size_t b
std::vector< double > apply_convolution(std::span< const double > src, std::span< const double > kernel, const ConvolutionProcessor &processor, bool full_size)
Core FFT convolution engine.
double peak(const std::vector< double > &data)
Find peak amplitude in single-channel data.
Definition Yantra.cpp:216

References a, apply_convolution(), auto_correlate(), b, MayaFlux::normalize(), and MayaFlux::peak().

Referenced by auto_correlate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: