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

◆ extract_high_spectral()

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

Definition at line 115 of file ExtractionHelper.cpp.

120{
121 std::vector<std::vector<double>> result;
122 result.reserve(channels.size());
123 for (const auto& ch : channels) {
124 if (ch.empty()) {
125 result.emplace_back();
126 continue;
127 }
128 const uint32_t w = std::min(window_size, static_cast<uint32_t>(ch.size()));
129 const uint32_t h = std::max(1U, std::min(hop_size, w / 2));
130 const auto energy = D::spectral_energy(ch, D::num_windows(ch.size(), w, h), h, w);
131
132 std::vector<size_t> starts;
133 for (size_t i = 0; i < energy.size(); ++i) {
134 if (energy[i] > spectral_threshold)
135 starts.push_back(i * h);
136 }
137
138 result.push_back(D::slice_intervals(ch,
139 D::merge_intervals(D::intervals_from_window_starts(starts, w, ch.size()))));
140 }
141 return result;
142}

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

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: