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

◆ kurtosis()

std::vector< double > MayaFlux::Kinesis::Discrete::kurtosis ( std::span< const double >  data,
size_t  n_windows,
uint32_t  hop_size,
uint32_t  window_size 
)

Excess kurtosis (fourth central moment - 3) per window.

Normal distribution yields 0. Returns 0 when variance is below epsilon.

Definition at line 292 of file Analysis.cpp.

293{
294 std::vector<double> out(n_windows);
295 std::vector<size_t> idx(n_windows);
296 std::iota(idx.begin(), idx.end(), 0);
297
298 Parallel::for_each(Parallel::par_unseq, idx.begin(), idx.end(),
299 [&](size_t i) {
300 const size_t start = i * hop_size;
301 auto w = data.subspan(start, std::min<size_t>(window_size, data.size() - start));
302 if (w.size() < 2) {
303 out[i] = 0.0;
304 return;
305 }
306 double s = 0.0;
307 for (double v : w)
308 s += v;
309 const double m = s / static_cast<double>(w.size());
310 double sq = 0.0, fo = 0.0;
311 for (double v : w) {
312 const double d = v - m;
313 const double d2 = d * d;
314 sq += d2;
315 fo += d2 * d2;
316 }
317 const double var = sq / static_cast<double>(w.size());
318 const double var2 = std::max(var * var, k_epsilon);
319 out[i] = (fo / static_cast<double>(w.size())) / var2 - 3.0;
320 });
321
322 return out;
323}

References kurtosis().

Referenced by kurtosis().

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