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

◆ deconvolve()

MAYAFLUX_API 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 122 of file Convolution.cpp.

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

Referenced by MayaFlux::Yantra::ConvolutionTransformer< InputType, OutputType >::transform_implementation().

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