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

◆ compute_zscore_statistic()

std::vector< double > MayaFlux::Yantra::compute_zscore_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 z-score statistic using zero-copy processing.

Definition at line 843 of file AnalysisHelper.cpp.

844{
845 std::vector<double> zscore_values(num_windows);
846
847 std::vector<size_t> indices(num_windows);
848 std::iota(indices.begin(), indices.end(), 0);
849
850 std::for_each(std::execution::par_unseq, indices.begin(), indices.end(),
851 [&](size_t i) {
852 const size_t start_idx = i * hop_size;
853 const size_t end_idx = std::min(start_idx + window_size, data.size());
854 auto window = data.subspan(start_idx, end_idx - start_idx);
855
856 if (window.empty()) {
857 zscore_values[i] = 0.0;
858 return;
859 }
860
861 double sum = 0.0;
862 for (double sample : window) {
863 sum += sample;
864 }
865 double mean = sum / static_cast<double>(window.size());
866
867 double sum_sq_diff = 0.0;
868 for (double sample : window) {
869 double diff = sample - mean;
870 sum_sq_diff += diff * diff;
871 }
872
873 double divisor = sample_variance ? static_cast<double>(window.size() - 1) : static_cast<double>(window.size());
874
875 double variance = sum_sq_diff / divisor;
876 double std_dev = std::sqrt(variance);
877
878 if (std_dev > 0.0) {
879 double sum_zscore = 0.0;
880 for (double val : window) {
881 sum_zscore += (val - mean) / std_dev;
882 }
883 zscore_values[i] = sum_zscore / static_cast<double>(window.size());
884 } else {
885 zscore_values[i] = 0.0;
886 }
887 });
888
889 return zscore_values;
890}
double mean(const std::vector< double > &data)
Calculate mean of single-channel data.
Definition Yantra.cpp:39

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

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

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