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

◆ compute_variance_statistic()

std::vector< double > MayaFlux::Yantra::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 = true 
)

Compute variance statistic using zero-copy processing.

This function computes the variance for a given data span. It calculates the sample or population variance in each window.

Parameters
dataInput data span
num_windowsNumber of windows to process
hop_sizeHop size for windowing
window_sizeSize of each window
sample_varianceIf true, use sample variance (N-1), else population (N)
Returns
Vector of variance values

Definition at line 361 of file AnalysisHelper.cpp.

362{
363 std::vector<double> variance_values(num_windows);
364
365 std::vector<size_t> indices(num_windows);
366 std::iota(indices.begin(), indices.end(), 0);
367
368 std::for_each(std::execution::par_unseq, indices.begin(), indices.end(),
369 [&](size_t i) {
370 const size_t start_idx = i * hop_size;
371 const size_t end_idx = std::min(start_idx + window_size, data.size());
372 auto window = data.subspan(start_idx, end_idx - start_idx);
373
374 if (window.size() <= 1) {
375 variance_values[i] = 0.0;
376 return;
377 }
378
379 double sum = 0.0;
380 for (double sample : window) {
381 sum += sample;
382 }
383 double mean = sum / static_cast<double>(window.size());
384
385 double sum_sq_diff = 0.0;
386 for (double sample : window) {
387 double diff = sample - mean;
388 sum_sq_diff += diff * diff;
389 }
390
391 double divisor = sample_variance ? static_cast<double>(window.size() - 1) : static_cast<double>(window.size());
392
393 variance_values[i] = sum_sq_diff / divisor;
394 });
395
396 return variance_values;
397}
double mean(const std::vector< double > &data)
Calculate mean of single-channel data.
Definition Yantra.cpp:39

References compute_variance_statistic(), and MayaFlux::mean().

Referenced by MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::compute_statistical_values(), compute_std_dev_statistic(), compute_variance_statistic(), 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: