To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / Peaks.h
History | View | Annotate | Download (3.03 KB)
| 1 | 4:c06cf6f7cb04 | Chris | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
|---|---|---|---|
| 2 | |||
| 3 | /*
|
||
| 4 | Vamp feature extraction plugin for the BeatRoot beat tracker.
|
||
| 5 | |||
| 6 | Centre for Digital Music, Queen Mary, University of London.
|
||
| 7 | This file copyright 2011 Simon Dixon, Chris Cannam and QMUL.
|
||
| 8 | |||
| 9 | This program is free software; you can redistribute it and/or
|
||
| 10 | modify it under the terms of the GNU General Public License as
|
||
| 11 | published by the Free Software Foundation; either version 2 of the
|
||
| 12 | License, or (at your option) any later version. See the file
|
||
| 13 | COPYING included with this distribution for more information.
|
||
| 14 | */
|
||
| 15 | |||
| 16 | #ifndef _BEATROOT_PEAKS_H_
|
||
| 17 | #define _BEATROOT_PEAKS_H_
|
||
| 18 | |||
| 19 | #include <vector> |
||
| 20 | #include <cmath> |
||
| 21 | |||
| 22 | using std::vector; |
||
| 23 | |||
| 24 | class Peaks |
||
| 25 | {
|
||
| 26 | protected:
|
||
| 27 | static int pre; |
||
| 28 | static int post; |
||
| 29 | |||
| 30 | public:
|
||
| 31 | /** General peak picking method for finding n local maxima in an array
|
||
| 32 | * @param data input data
|
||
| 33 | * @param peaks list of peak indexes
|
||
| 34 | * @param width minimum distance between peaks
|
||
| 35 | */
|
||
| 36 | 15:887c629502a9 | Chris | static int findPeaks(const vector<double> &data, vector<int> peaks, int width); |
| 37 | 4:c06cf6f7cb04 | Chris | |
| 38 | /** General peak picking method for finding local maxima in an array
|
||
| 39 | * @param data input data
|
||
| 40 | * @param width minimum distance between peaks
|
||
| 41 | * @param threshold minimum value of peaks
|
||
| 42 | * @return list of peak indexes
|
||
| 43 | */
|
||
| 44 | static vector<int> findPeaks(const vector<double> &data, int width, |
||
| 45 | double threshold) {
|
||
| 46 | return findPeaks(data, width, threshold, 0, false); |
||
| 47 | } // findPeaks()
|
||
| 48 | |||
| 49 | /** General peak picking method for finding local maxima in an array
|
||
| 50 | * @param data input data
|
||
| 51 | * @param width minimum distance between peaks
|
||
| 52 | * @param threshold minimum value of peaks
|
||
| 53 | * @param decayRate how quickly previous peaks are forgotten
|
||
| 54 | * @param isRelative minimum value of peaks is relative to local average
|
||
| 55 | * @return list of peak indexes
|
||
| 56 | */
|
||
| 57 | static vector<int> findPeaks(const vector<double> &data, int width, |
||
| 58 | 15:887c629502a9 | Chris | double threshold, double decayRate, bool isRelative); |
| 59 | 4:c06cf6f7cb04 | Chris | |
| 60 | static double expDecayWithHold(double av, double decayRate, |
||
| 61 | 15:887c629502a9 | Chris | const vector<double> &data, int start, int stop); |
| 62 | 4:c06cf6f7cb04 | Chris | |
| 63 | static bool overThreshold(const vector<double> &data, int index, int width, |
||
| 64 | 15:887c629502a9 | Chris | double threshold, bool isRelative, |
| 65 | double av);
|
||
| 66 | 4:c06cf6f7cb04 | Chris | |
| 67 | 15:887c629502a9 | Chris | static void normalise(vector<double> &data); |
| 68 | 4:c06cf6f7cb04 | Chris | |
| 69 | /** Uses an n-point linear regression to estimate the slope of data.
|
||
| 70 | * @param data input data
|
||
| 71 | * @param hop spacing of data points
|
||
| 72 | * @param n length of linear regression
|
||
| 73 | * @param slope output data
|
||
| 74 | */
|
||
| 75 | static void getSlope(const vector<double> &data, double hop, int n, |
||
| 76 | 15:887c629502a9 | Chris | vector<double> &slope);
|
| 77 | 4:c06cf6f7cb04 | Chris | |
| 78 | 18:55969570044e | Chris | static double min(const vector<double> &arr) { |
| 79 | if (arr.empty()) return 0; |
||
| 80 | return arr[imin(arr)];
|
||
| 81 | } |
||
| 82 | static double max(const vector<double> &arr) { |
||
| 83 | if (arr.empty()) return 0; |
||
| 84 | return arr[imax(arr)];
|
||
| 85 | } |
||
| 86 | 4:c06cf6f7cb04 | Chris | |
| 87 | 15:887c629502a9 | Chris | static int imin(const vector<double> &arr); |
| 88 | static int imax(const vector<double> &arr); |
||
| 89 | 4:c06cf6f7cb04 | Chris | |
| 90 | }; // class Peaks
|
||
| 91 | |||
| 92 | #endif |