MayaFlux 0.3.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 76 of file ConvolutionTransformer.hpp.

77 {
78 switch (m_operation) {
79
81 const auto ir = get_parameter_or<std::vector<double>>(
82 "impulse_response", std::vector<double> { 1.0 });
83 return apply_per_channel(input, [&ir](std::span<const double> ch) {
84 return D::convolve(ch, ir);
85 });
86 }
87
89 const auto tmpl = get_parameter_or<std::vector<double>>(
90 "template_signal", std::vector<double> { 1.0 });
91 const auto norm = get_parameter_or<bool>("normalize", true);
92 return apply_per_channel(input, [&tmpl, norm](std::span<const double> ch) {
93 return D::cross_correlate(ch, tmpl, norm);
94 });
95 }
96
98 const auto ref = get_parameter_or<std::vector<double>>(
99 "reference_signal", std::vector<double> { 1.0 });
100 return apply_per_channel(input, [&ref](std::span<const double> ch) {
101 return D::matched_filter(ch, ref);
102 });
103 }
104
106 const auto ir = get_parameter_or<std::vector<double>>(
107 "impulse_response", std::vector<double> { 1.0 });
108 const auto reg = get_parameter_or<double>("regularization", 1e-6);
109 return apply_per_channel(input, [&ir, reg](std::span<const double> ch) {
110 return D::deconvolve(ch, ir, reg);
111 });
112 }
113
115 const auto norm = get_parameter_or<bool>("normalize", true);
116 return apply_per_channel(input, [norm](std::span<const double> ch) {
117 return D::auto_correlate(ch, norm);
118 });
119 }
120
121 default:
122 return create_output(input);
123 }
124 }
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 > cross_correlate(std::span< const double > src, std::span< const double > tmpl, bool normalize)
Cross-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 > auto_correlate(std::span< const double > src, bool normalize)
Auto-correlation via FFT.
std::vector< double > convolve(std::span< const double > src, std::span< const double > ir)
Linear FFT convolution.
std::vector< double > matched_filter(std::span< const double > src, std::span< const double > reference)
Matched filter (normalised cross-correlation)
@ DIRECT_CONVOLUTION
Standard convolution.