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

◆ transform_implementation()

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
output_type MayaFlux::Yantra::ConvolutionTransformer< InputType, OutputType >::transform_implementation ( input_type &  input)
inlineoverrideprotectedvirtual

Applies the configured convolution operation.

Parameters
inputInput data
Returns
Transformed output

Extracts per-channel double spans, calls the corresponding Kinesis::Discrete::Convolution primitive on each channel, then reconstructs the typed output via OperationHelper.

Implements MayaFlux::Yantra::UniversalTransformer< InputType, OutputType >.

Definition at line 100 of file ConvolutionTransformer.hpp.

101 {
102 switch (m_operation) {
103
105 const auto ir = get_parameter_or<std::vector<double>>(
106 "impulse_response", std::vector<double> { 1.0 });
107 return apply_per_channel(input, [&ir](std::span<const double> ch) {
108 return D::convolve(ch, ir);
109 });
110 }
111
113 const auto tmpl = get_parameter_or<std::vector<double>>(
114 "template_signal", std::vector<double> { 1.0 });
115 const auto norm = get_parameter_or<bool>("normalize", true);
116 return apply_per_channel(input, [&tmpl, norm](std::span<const double> ch) {
117 return D::cross_correlate(ch, tmpl, norm);
118 });
119 }
120
122 const auto ref = get_parameter_or<std::vector<double>>(
123 "reference_signal", std::vector<double> { 1.0 });
124 return apply_per_channel(input, [&ref](std::span<const double> ch) {
125 return D::matched_filter(ch, ref);
126 });
127 }
128
130 const auto ir = get_parameter_or<std::vector<double>>(
131 "impulse_response", std::vector<double> { 1.0 });
132 const auto reg = get_parameter_or<double>("regularization", 1e-6);
133 return apply_per_channel(input, [&ir, reg](std::span<const double> ch) {
134 return D::deconvolve(ch, ir, reg);
135 });
136 }
137
139 const auto norm = get_parameter_or<bool>("normalize", true);
140 return apply_per_channel(input, [norm](std::span<const double> ch) {
141 return D::auto_correlate(ch, norm);
142 });
143 }
144
145 default:
146 return create_output(input);
147 }
148 }
Core::GlobalInputConfig input
Definition Config.cpp:42
ConvolutionOperation m_operation
Current convolution operation.
output_type apply_per_channel(input_type &input, Func &&func)
Extracts per-channel spans, applies func to each, and reconstructs.
output_type create_output(const input_type &input)
Creates output with proper type conversion.
std::vector< double > convolve(std::span< const double > src, std::span< const double > ir)
Linear FFT convolution.
std::vector< double > cross_correlate(std::span< const double > src, std::span< const double > tmpl, bool normalize)
Cross-correlation via FFT.
std::vector< double > auto_correlate(std::span< const double > src, bool normalize)
Auto-correlation via FFT.
std::vector< double > deconvolve(std::span< const double > src, std::span< const double > ir, double regularization)
Frequency-domain deconvolution with Tikhonov regularisation.
std::vector< double > matched_filter(std::span< const double > src, std::span< const double > reference)
Matched filter (normalised cross-correlation)
@ DIRECT_CONVOLUTION
Standard convolution.

References MayaFlux::Yantra::ConvolutionTransformer< InputType, OutputType >::apply_per_channel(), MayaFlux::Kinesis::Discrete::auto_correlate(), MayaFlux::Yantra::AUTO_CORRELATION, MayaFlux::Kinesis::Discrete::convolve(), MayaFlux::Yantra::ConvolutionTransformer< InputType, OutputType >::create_output(), MayaFlux::Kinesis::Discrete::cross_correlate(), MayaFlux::Yantra::CROSS_CORRELATION, MayaFlux::Yantra::DECONVOLUTION, MayaFlux::Kinesis::Discrete::deconvolve(), MayaFlux::Yantra::DIRECT_CONVOLUTION, input, MayaFlux::Yantra::ConvolutionTransformer< InputType, OutputType >::m_operation, MayaFlux::Kinesis::Discrete::matched_filter(), and MayaFlux::Yantra::MATCHED_FILTER.

+ Here is the call graph for this function: