Median absolute deviation of a span.
230{
231 if (samples.empty())
232 return 0.0;
233
234 std::vector<double> sorted(samples.begin(), samples.end());
235 std::ranges::sort(sorted);
236 const double median = sorted[sorted.size() / 2];
237
238 std::vector<double> deviations;
239 deviations.reserve(sorted.size());
240 for (double v : sorted)
241 deviations.push_back(
std::abs(v -
median));
242 std::ranges::sort(deviations);
243
244 return deviations[deviations.size() / 2] * 1.4826;
245}
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.