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

◆ extract_high_energy()

std::vector< std::vector< double > > MayaFlux::Yantra::extract_high_energy ( const std::vector< std::span< const double > > &  channels,
double  energy_threshold,
uint32_t  window_size,
uint32_t  hop_size 
)

Definition at line 10 of file ExtractionHelper.cpp.

15{
16 std::vector<std::vector<double>> result;
17 result.reserve(channels.size());
18 for (const auto& ch : channels) {
19 if (ch.empty()) {
20 result.emplace_back();
21 continue;
22 }
23 const uint32_t w = std::min(window_size, static_cast<uint32_t>(ch.size()));
24 const uint32_t h = std::max(1U, std::min(hop_size, w / 2));
25 const auto energy = D::rms(ch, D::num_windows(ch.size(), w, h), h, w);
26 std::vector<size_t> starts;
27 for (size_t i = 0; i < energy.size(); ++i) {
28 if (energy[i] > energy_threshold)
29 starts.push_back(i * h);
30 }
31 result.push_back(D::slice_intervals(ch,
32 D::merge_intervals(D::intervals_from_window_starts(starts, w, ch.size()))));
33 }
34 return result;
35}

References MayaFlux::Kinesis::Discrete::intervals_from_window_starts(), MayaFlux::Kinesis::Discrete::merge_intervals(), MayaFlux::Kinesis::Discrete::num_windows(), MayaFlux::Kinesis::Discrete::rms(), and MayaFlux::Kinesis::Discrete::slice_intervals().

Referenced by MayaFlux::Yantra::FeatureExtractor< InputType, OutputType >::extract_implementation().

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