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

◆ compute_kurtosis_statistic()

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

This function computes the kurtosis (fourth moment) for a given data span. It measures the tail heaviness of the distribution 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 kurtosis values (excess kurtosis, normal = 0)

Definition at line 458 of file AnalysisHelper.cpp.

459{
460 std::vector<double> kurtosis_values(num_windows);
461
462 std::vector<size_t> indices(num_windows);
463 std::iota(indices.begin(), indices.end(), 0);
464
465 std::for_each(std::execution::par_unseq, indices.begin(), indices.end(),
466 [&](size_t i) {
467 const size_t start_idx = i * hop_size;
468 const size_t end_idx = std::min(start_idx + window_size, data.size());
469 auto window = data.subspan(start_idx, end_idx - start_idx);
470
471 if (window.size() < 2) {
472 kurtosis_values[i] = 0.0;
473 return;
474 }
475
476 double sum = 0.0;
477 for (double sample : window) {
478 sum += sample;
479 }
480 double mean = sum / static_cast<double>(window.size());
481
482 double sum_sq_diff = 0.0;
483 double sum_fourth_diff = 0.0;
484 for (double sample : window) {
485 double diff = sample - mean;
486 double sq_diff = diff * diff;
487 sum_sq_diff += sq_diff;
488 sum_fourth_diff += sq_diff * sq_diff;
489 }
490
491 double variance = sum_sq_diff / static_cast<double>(window.size());
492 if (variance <= 0.0) {
493 kurtosis_values[i] = 0.0;
494 return;
495 }
496
497 double fourth_moment = sum_fourth_diff / static_cast<double>(window.size());
498
499 kurtosis_values[i] = (fourth_moment / (variance * variance)) - 3.0;
500 });
501
502 return kurtosis_values;
503}
double mean(const std::vector< double > &data)
Calculate mean of single-channel data.
Definition Yantra.cpp:39

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

Referenced by compute_kurtosis_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: