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

◆ compute_skewness_statistic()

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

This function computes the skewness (third moment) for a given data span. It measures the asymmetry 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 skewness values

Definition at line 410 of file AnalysisHelper.cpp.

411{
412 std::vector<double> skewness_values(num_windows);
413
414 std::vector<size_t> indices(num_windows);
415 std::iota(indices.begin(), indices.end(), 0);
416
417 std::for_each(std::execution::par_unseq, indices.begin(), indices.end(),
418 [&](size_t i) {
419 const size_t start_idx = i * hop_size;
420 const size_t end_idx = std::min(start_idx + window_size, data.size());
421 auto window = data.subspan(start_idx, end_idx - start_idx);
422
423 if (window.size() < 2) {
424 skewness_values[i] = 0.0;
425 return;
426 }
427
428 double sum = 0.0;
429 for (double sample : window) {
430 sum += sample;
431 }
432 double mean = sum / static_cast<double>(window.size());
433
434 double sum_sq_diff = 0.0;
435 double sum_cube_diff = 0.0;
436 for (double sample : window) {
437 double diff = sample - mean;
438 double sq_diff = diff * diff;
439 sum_sq_diff += sq_diff;
440 sum_cube_diff += sq_diff * diff;
441 }
442
443 double variance = sum_sq_diff / static_cast<double>(window.size());
444 if (variance <= 0.0) {
445 skewness_values[i] = 0.0;
446 return;
447 }
448
449 double std_dev = std::sqrt(variance);
450 double third_moment = sum_cube_diff / static_cast<double>(window.size());
451
452 skewness_values[i] = third_moment / (std_dev * std_dev * std_dev);
453 });
454
455 return skewness_values;
456}
double std_dev(const std::vector< double > &data)
Calculate standard deviation of single-channel data.
Definition Yantra.cpp:126
double mean(const std::vector< double > &data)
Calculate mean of single-channel data.
Definition Yantra.cpp:39

References compute_skewness_statistic(), MayaFlux::mean(), and MayaFlux::std_dev().

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