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

◆ zero_crossing_rate()

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

Zero-crossing rate per window.

Normalised by (window_size - 1), giving crossings per sample.

Parameters
dataInput span
n_windowsPre-computed window count from num_windows()
hop_sizeSamples between window starts
window_sizeSamples per window
Returns
Per-window ZCR values

Definition at line 112 of file Analysis.cpp.

113{
114 std::vector<double> out(n_windows);
115 std::vector<size_t> idx(n_windows);
116 std::iota(idx.begin(), idx.end(), 0);
117
118 Parallel::for_each(Parallel::par_unseq, idx.begin(), idx.end(),
119 [&](size_t i) {
120 const size_t start = i * hop_size;
121 auto w = data.subspan(start, std::min<size_t>(window_size, data.size() - start));
122 int zc = 0;
123 for (size_t j = 1; j < w.size(); ++j) {
124 if ((w[j] >= 0.0) != (w[j - 1] >= 0.0))
125 ++zc;
126 }
127 out[i] = static_cast<double>(zc) / static_cast<double>(w.size() - 1);
128 });
129
130 return out;
131}

References MayaFlux::zero_crossing_rate().

+ Here is the call graph for this function: