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

◆ compute_median_statistic()

std::vector< double > MayaFlux::Yantra::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.

This function computes the median (50th percentile) for a given data span. It finds the middle value in each window.

Parameters
dataInput data span
num_windowsNumber of windows to process
hop_sizeHop size for windowing
window_sizeSize of each window
Returns
Vector of median values

Definition at line 505 of file AnalysisHelper.cpp.

506{
507 std::vector<double> median_values(num_windows);
508
509 std::vector<size_t> indices(num_windows);
510 std::iota(indices.begin(), indices.end(), 0);
511
512 std::for_each(std::execution::par_unseq, indices.begin(), indices.end(),
513 [&](size_t i) {
514 const size_t start_idx = i * hop_size;
515 const size_t end_idx = std::min(start_idx + window_size, data.size());
516 auto window = data.subspan(start_idx, end_idx - start_idx);
517
518 if (window.empty()) {
519 median_values[i] = 0.0;
520 return;
521 }
522
523 std::vector<double> sorted_window(window.begin(), window.end());
524 std::ranges::sort(sorted_window);
525
526 size_t n = sorted_window.size();
527 if (n % 2 == 0) {
528 median_values[i] = (sorted_window[n / 2 - 1] + sorted_window[n / 2]) / 2.0;
529 } else {
530 median_values[i] = sorted_window[n / 2];
531 }
532 });
533
534 return median_values;
535}

References compute_median_statistic().

Referenced by compute_median_statistic(), MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::compute_statistical_values(), and MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::create_analysis_result().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: