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

◆ deconvolve()

std::vector< double > MayaFlux::Kinesis::Discrete::deconvolve ( std::span< const double >  src,
std::span< const double >  ir,
double  regularization = 1e-6 
)

Frequency-domain deconvolution with Tikhonov regularisation.

Parameters
srcInput signal
irImpulse response to invert
regularizationRegularisation factor for numerical stability
Returns
Deconvolved output, same length as src

Definition at line 124 of file Convolution.cpp.

128{
129 return apply_convolution(src, ir,
130 [regularization](const auto& s, const auto& k, auto& r) {
131 P::transform(P::par_unseq, s.begin(), s.end(), k.begin(), r.begin(),
132 [regularization](const std::complex<double>& sig, const std::complex<double>& ker) {
133 const double mag_sq = std::norm(ker);
134 if (mag_sq < regularization)
135 return std::complex<double> {};
136 return sig * std::conj(ker) / (mag_sq + regularization);
137 });
138 });
139}
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.

References apply_convolution().

+ Here is the call graph for this function: