35template <ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
63 for (
const auto& key : config.
keys) {
105 const auto ir = get_parameter_or<std::vector<double>>(
106 "impulse_response", std::vector<double> { 1.0 });
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);
122 const auto ref = get_parameter_or<std::vector<double>>(
123 "reference_signal", std::vector<double> { 1.0 });
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);
139 const auto norm = get_parameter_or<bool>(
"normalize",
true);
167 if (
name ==
"operation") {
168 if (
auto r = safe_any_cast<ConvolutionOperation>(
value)) {
172 if (
auto r = safe_any_cast<std::string>(
value)) {
173 if (
auto e = Reflect::string_to_enum_case_insensitive<ConvolutionOperation>(*r.value)) {
195 template <
typename Func>
200 for (
size_t i = 0; i <
channels.size(); ++i) {
201 if constexpr (std::is_void_v<std::invoke_result_t<Func, std::span<double>>>) {
209 for (
size_t i = 0; i <
channels.size(); ++i)
212 OperationHelper::reconstruct_from_double<InputType>(
m_working_buffer, structure_info));
224 this->
set_parameter(
"impulse_response", std::vector<double> { 1.0 });
225 this->
set_parameter(
"template_signal", std::vector<double> { 1.0 });
226 this->
set_parameter(
"reference_signal", std::vector<double> { 1.0 });
238 template <
typename T>
242 if (!param.has_value())
243 return default_value;
245 auto result = safe_any_cast<T>(param);
246 return result.value_or(default_value);
260 if constexpr (std::is_same_v<InputType, OutputType>) {
Core::GlobalInputConfig input
std::unordered_map< std::string, std::string > metadata
output_type convert_result(std::vector< std::vector< double > > &result_data, DataStructureInfo &metadata)
Convert processed double data back to OutputType using metadata and optional callback.
static std::tuple< std::vector< std::span< double > >, DataStructureInfo > extract_structured_double(T &compute_data)
Extract structured double data from Datum container or direct ComputeData with automatic container ha...
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)
constexpr std::string_view enum_to_string(EnumType value) noexcept
Universal enum to string converter using magic_enum (original case)
ConvolutionOperation
Specific convolution operations supported.
@ DECONVOLUTION
Deconvolution.
@ DIRECT_CONVOLUTION
Standard convolution.
@ AUTO_CORRELATION
Auto-correlation.
@ CROSS_CORRELATION
Cross-correlation.
@ MATCHED_FILTER
Matched filtering.
TransformationType
Categories of transformation operations for discovery and organization.
@ CONVOLUTION
Convolution-based transformations (impulse response, filters)
Input/Output container for computation pipeline data flow with structure preservation.