Create comprehensive analysis result.
547 {
548 StatisticalAnalysis result;
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
573 channel_result.mean_stat = mean_result.empty() ? 0.0 : mean_result[0];
574
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
580 channel_result.skewness = skew_result.empty() ? 0.0 : skew_result[0];
581
583 channel_result.kurtosis = kurt_result.empty() ? 0.0 : kurt_result[0];
584
586 channel_result.median = median_result.empty() ? 0.0 : median_result[0];
587
590 channel_result.percentiles = {
591 q25_result.empty() ? 0.0 : q25_result[0],
592 channel_result.median,
593 q75_result.empty() ? 0.0 : q75_result[0]
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) {
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) {
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 }
StatisticalMethod m_method
StatisticalLevel classify_statistical_level(double value) const
Classify statistical value qualitatively.
bool m_classification_enabled
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.