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

◆ create_analysis_result()

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = Eigen::VectorXd>
StatisticalAnalysis MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::create_analysis_result ( const std::vector< std::vector< double > > &  stat_values,
std::vector< std::span< const double > >  original_data,
const auto &   
) const
inlineprivate

Create comprehensive analysis result.

Definition at line 545 of file StatisticalAnalyzer.hpp.

547 {
548 StatisticalAnalysis result;
549 result.method_used = m_method;
550 result.window_size = m_window_size;
551 result.hop_size = m_hop_size;
552
553 if (stat_values.empty()) {
554 return result;
555 }
556
557 result.channel_statistics.resize(stat_values.size());
558
559 for (size_t ch = 0; ch < stat_values.size(); ++ch) {
560 auto& channel_result = result.channel_statistics[ch];
561 const auto& ch_stats = stat_values[ch];
562
563 channel_result.statistical_values = ch_stats;
564
565 if (ch_stats.empty())
566 continue;
567
568 const auto [min_it, max_it] = std::ranges::minmax_element(ch_stats);
569 channel_result.min_stat = *min_it;
570 channel_result.max_stat = *max_it;
571
572 auto mean_result = compute_mean_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size());
573 channel_result.mean_stat = mean_result.empty() ? 0.0 : mean_result[0];
574
575 auto variance_result = compute_variance_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size(), m_sample_variance);
576 channel_result.stat_variance = variance_result.empty() ? 0.0 : variance_result[0];
577 channel_result.stat_std_dev = std::sqrt(channel_result.stat_variance);
578
579 auto skew_result = compute_skewness_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size());
580 channel_result.skewness = skew_result.empty() ? 0.0 : skew_result[0];
581
582 auto kurt_result = compute_kurtosis_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size());
583 channel_result.kurtosis = kurt_result.empty() ? 0.0 : kurt_result[0];
584
585 auto median_result = compute_median_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size());
586 channel_result.median = median_result.empty() ? 0.0 : median_result[0];
587
588 auto q25_result = compute_percentile_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size(), 25.0);
589 auto q75_result = compute_percentile_statistic(std::span<const double>(ch_stats), 1, 0, ch_stats.size(), 75.0);
590 channel_result.percentiles = {
591 q25_result.empty() ? 0.0 : q25_result[0], // Q1
592 channel_result.median, // Q2
593 q75_result.empty() ? 0.0 : q75_result[0] // Q3
594 };
595
596 const size_t data_size = (ch < original_data.size()) ? original_data[ch].size() : 0;
597 channel_result.window_positions.reserve(ch_stats.size());
598 for (size_t i = 0; i < ch_stats.size(); ++i) {
599 const size_t start = i * m_hop_size;
600 const size_t end = std::min(start + m_window_size, data_size);
601 channel_result.window_positions.emplace_back(start, end);
602 }
603
605 channel_result.stat_classifications.reserve(ch_stats.size());
606 channel_result.level_counts.fill(0);
607
608 for (double value : ch_stats) {
609 const StatisticalLevel level = classify_statistical_level(value);
610 channel_result.stat_classifications.push_back(level);
611 channel_result.level_counts[static_cast<size_t>(level)]++;
612 }
613 }
614 }
615
616 return result;
617 }
StatisticalLevel classify_statistical_level(double value) const
Classify statistical value qualitatively.
std::vector< double > compute_skewness_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size)
Compute skewness statistic using zero-copy processing.
std::vector< double > compute_variance_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size, bool sample_variance)
Compute variance statistic using zero-copy processing.
std::vector< double > compute_percentile_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size, double percentile)
Compute percentile statistic using zero-copy processing.
std::vector< double > compute_mean_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size)
Compute mean statistic using zero-copy processing.
StatisticalLevel
Qualitative classification of statistical values.
std::vector< double > compute_median_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size)
Compute median statistic using zero-copy processing.
std::vector< double > compute_kurtosis_statistic(std::span< const double > data, const size_t num_windows, const uint32_t hop_size, const uint32_t window_size)
Compute kurtosis statistic using zero-copy processing.

References MayaFlux::Yantra::StatisticalAnalysis::channel_statistics, MayaFlux::Yantra::compute_kurtosis_statistic(), MayaFlux::Yantra::compute_mean_statistic(), MayaFlux::Yantra::compute_median_statistic(), MayaFlux::Yantra::compute_percentile_statistic(), MayaFlux::Yantra::compute_skewness_statistic(), MayaFlux::Yantra::compute_variance_statistic(), MayaFlux::Yantra::StatisticalAnalysis::hop_size, MayaFlux::Yantra::StatisticalAnalysis::method_used, and MayaFlux::Yantra::StatisticalAnalysis::window_size.

+ Here is the call graph for this function: