39 const int n =
static_cast<int>(data.size());
40 VectorXd proms(peakIndices.size());
42 for (
int p = 0; p < peakIndices.size(); ++p) {
43 int idx = peakIndices[p];
44 double peakVal = data(idx);
47 double leftMin = peakVal;
48 for (
int i = idx - 1; i >= 0; --i) {
49 if (data(i) > peakVal)
break;
50 leftMin = std::min(leftMin, data(i));
54 double rightMin = peakVal;
55 for (
int i = idx + 1; i < n; ++i) {
56 if (data(i) > peakVal)
break;
57 rightMin = std::min(rightMin, data(i));
61 double highestValley = std::max(leftMin, rightMin);
62 proms(p) = peakVal - highestValley;
73 const int n =
static_cast<int>(data.size());
74 QList<QPair<int,double>> peaks;
82 for (
int i = 1; i < n - 1; ++i) {
83 if (data(i) > data(i - 1) && data(i) > data(i + 1)) {
91 if (params.
dProminence > 0.0 && !peakIdx.isEmpty()) {
94 for (
int i = 0; i < peakIdx.size(); ++i) {
96 filtered.append(peakIdx[i]);
105 std::vector<int> sortedIdx(peakIdx.begin(), peakIdx.end());
106 std::sort(sortedIdx.begin(), sortedIdx.end(),
107 [&data](
int a,
int b) { return data(a) > data(b); });
110 std::vector<bool> suppressed(
static_cast<size_t>(n),
false);
112 for (
int idx : sortedIdx) {
113 if (suppressed[
static_cast<size_t>(idx)])
continue;
119 for (
int s = lo; s <= hi; ++s) {
121 suppressed[
static_cast<size_t>(s)] =
true;
127 std::sort(kept.begin(), kept.end());
132 for (
int idx : peakIdx) {
133 peaks.append(qMakePair(idx, data(idx)));
Local-maxima peak detection in 1-D signals with prominence filtering.
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
DSPSHARED_EXPORT QList< QPair< int, double > > peakFinder(const Eigen::VectorXd &data, const PeakFinderParams ¶ms=PeakFinderParams())
Find peaks in a 1D signal.
DSPSHARED_EXPORT Eigen::VectorXd peakProminences(const Eigen::VectorXd &data, const QList< int > &peakIndices)
Compute prominence of each peak.