39[[nodiscard]]
inline size_t num_windows(
size_t data_size, uint32_t window_size, uint32_t hop_size)
noexcept
41 if (data_size < window_size)
43 return (data_size - window_size) / hop_size + 1;
58[[nodiscard]] std::vector<double>
rms(
59 std::span<const double> data,
62 uint32_t window_size);
72[[nodiscard]] std::vector<double>
peak(
73 std::span<const double> data,
76 uint32_t window_size);
86[[nodiscard]] std::vector<double>
power(
87 std::span<const double> data,
90 uint32_t window_size);
104 std::span<const double> data,
107 uint32_t window_size);
121 std::span<const double> data,
124 uint32_t window_size);
138 std::span<const double> data,
141 uint32_t window_size);
159 std::span<const double> data,
162 uint32_t window_size,
163 double low_bin_fraction = 0.125);
172[[nodiscard]] std::vector<double>
mean(
173 std::span<const double> data,
176 uint32_t window_size);
182[[nodiscard]] std::vector<double>
variance(
183 std::span<const double> data,
186 uint32_t window_size,
187 bool sample_variance =
true);
193[[nodiscard]] std::vector<double>
std_dev(
194 std::span<const double> data,
197 uint32_t window_size,
198 bool sample_variance =
true);
205[[nodiscard]] std::vector<double>
skewness(
206 std::span<const double> data,
209 uint32_t window_size);
216[[nodiscard]] std::vector<double>
kurtosis(
217 std::span<const double> data,
220 uint32_t window_size);
225[[nodiscard]] std::vector<double>
median(
226 std::span<const double> data,
229 uint32_t window_size);
236 std::span<const double> data,
239 uint32_t window_size,
240 double percentile_value);
246[[nodiscard]] std::vector<double>
entropy(
247 std::span<const double> data,
250 uint32_t window_size,
251 size_t num_bins = 0);
256[[nodiscard]] std::vector<double>
min(
257 std::span<const double> data,
260 uint32_t window_size);
265[[nodiscard]] std::vector<double>
max(
266 std::span<const double> data,
269 uint32_t window_size);
274[[nodiscard]] std::vector<double>
range(
275 std::span<const double> data,
278 uint32_t window_size);
283[[nodiscard]] std::vector<double>
sum(
284 std::span<const double> data,
287 uint32_t window_size);
295[[nodiscard]] std::vector<double>
count(
296 std::span<const double> data,
299 uint32_t window_size);
304[[nodiscard]] std::vector<double>
mad(
305 std::span<const double> data,
308 uint32_t window_size);
318 std::span<const double> data,
321 uint32_t window_size,
322 bool sample_variance =
true);
330[[nodiscard]] std::vector<double>
mode(
331 std::span<const double> data,
334 uint32_t window_size);
345 std::span<const double> data,
348 uint32_t window_size,
349 bool sample_variance =
true);
365 std::span<const double> data,
366 double threshold = 0.0);
383 std::span<const double> data,
384 double threshold = 0.0,
385 size_t min_distance = 1);
404 std::span<const double> data,
405 uint32_t window_size,
407 double threshold = 0.1);
std::vector< double > dynamic_range(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Dynamic range in dB per window.
std::vector< double > mean(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Arithmetic mean per window.
std::vector< double > spectral_energy(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Spectral energy per window using Hann-windowed FFT.
std::vector< double > peak(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Peak amplitude per window.
std::vector< double > range(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Value range (max - min) per window.
std::vector< size_t > zero_crossing_positions(std::span< const double > data, double threshold)
Sample indices of zero crossings in the full span.
std::vector< double > entropy(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, size_t num_bins)
Shannon entropy per window using Sturges-rule histogram.
std::vector< double > median(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Median per window via nth_element partial sort.
std::vector< double > variance(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, bool sample_variance)
Variance per window.
std::vector< double > 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.
std::vector< size_t > peak_positions(std::span< const double > data, double threshold, size_t min_distance)
Sample indices of local peak maxima in the full span.
std::vector< double > min(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Minimum value per window.
std::vector< double > std_dev(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, bool sample_variance)
Standard deviation per window.
std::vector< size_t > onset_positions(std::span< const double > data, uint32_t window_size, uint32_t hop_size, double threshold)
Sample indices of onsets detected via spectral flux.
std::vector< double > max(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Maximum value per window.
std::vector< double > skewness(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Skewness (standardised third central moment) per window.
std::vector< double > mad(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Median absolute deviation per window.
std::vector< double > mean_zscore(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, bool sample_variance)
Mean z-score per window.
std::vector< double > low_frequency_energy(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, double low_bin_fraction)
Low-frequency spectral energy per window.
std::vector< double > sum(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Sum per window.
size_t num_windows(size_t data_size, uint32_t window_size, uint32_t hop_size) noexcept
Compute the number of analysis windows for a given data size.
std::vector< double > coefficient_of_variation(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, bool sample_variance)
Coefficient of variation (std_dev / mean) per window.
std::vector< double > mode(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Mode per window via tolerance-bucketed frequency count.
std::vector< double > 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.
std::vector< double > rms(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
RMS energy per window.
std::vector< double > power(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Power (sum of squares) per window.
std::vector< double > percentile(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, double percentile_value)
Arbitrary percentile per window via linear interpolation.