cannam@0
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
cannam@0
|
2
|
cannam@0
|
3 /*
|
cannam@0
|
4 QM DSP Library
|
cannam@0
|
5
|
cannam@0
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@84
|
7 This file 2005-2006 Christian Landone.
|
Chris@84
|
8
|
mathieu@96
|
9 Modifications:
|
mathieu@96
|
10
|
mathieu@96
|
11 - delta threshold
|
mathieu@96
|
12 Description: add delta threshold used as offset in the smoothed
|
mathieu@96
|
13 detection function
|
mathieu@96
|
14 Author: Mathieu Barthet
|
mathieu@96
|
15 Date: June 2010
|
mathieu@96
|
16
|
Chris@84
|
17 This program is free software; you can redistribute it and/or
|
Chris@84
|
18 modify it under the terms of the GNU General Public License as
|
Chris@84
|
19 published by the Free Software Foundation; either version 2 of the
|
Chris@84
|
20 License, or (at your option) any later version. See the file
|
Chris@84
|
21 COPYING included with this distribution for more information.
|
cannam@0
|
22 */
|
cannam@0
|
23
|
cannam@0
|
24 // PeakPicking.h: interface for the PeakPicking class.
|
cannam@0
|
25 //
|
cannam@0
|
26 //////////////////////////////////////////////////////////////////////
|
cannam@0
|
27
|
cannam@0
|
28 #ifndef PEAKPICKING_H
|
cannam@0
|
29 #define PEAKPICKING_H
|
cannam@0
|
30
|
cannam@16
|
31 #include "maths/MathUtilities.h"
|
cannam@16
|
32 #include "maths/MathAliases.h"
|
cannam@0
|
33 #include "dsp/signalconditioning/DFProcess.h"
|
cannam@0
|
34
|
cannam@0
|
35
|
cannam@12
|
36 struct PPWinThresh
|
cannam@0
|
37 {
|
cannam@0
|
38 unsigned int pre;
|
cannam@0
|
39 unsigned int post;
|
mathieu@96
|
40
|
mathieu@96
|
41 PPWinThresh(unsigned int x, unsigned int y) :
|
mathieu@96
|
42 pre(x),
|
mathieu@96
|
43 post(y)
|
mathieu@96
|
44 {
|
mathieu@96
|
45 }
|
cannam@0
|
46 };
|
cannam@0
|
47
|
cannam@0
|
48 struct QFitThresh
|
cannam@0
|
49 {
|
cannam@0
|
50 double a;
|
cannam@0
|
51 double b;
|
cannam@0
|
52 double c;
|
mathieu@96
|
53
|
mathieu@96
|
54 QFitThresh(double x, double y, double z) :
|
mathieu@96
|
55 a(x),
|
mathieu@96
|
56 b(y),
|
mathieu@96
|
57 c(z)
|
mathieu@96
|
58 {
|
mathieu@96
|
59 }
|
cannam@0
|
60 };
|
cannam@0
|
61
|
cannam@0
|
62 struct PPickParams
|
cannam@0
|
63 {
|
cannam@0
|
64 unsigned int length; //Detection FunctionLength
|
mathieu@96
|
65 double tau; // time resolution of the detection function
|
cannam@0
|
66 unsigned int alpha; //alpha-norm parameter
|
cannam@0
|
67 double cutoff;//low-pass Filter cutoff freq
|
cannam@0
|
68 unsigned int LPOrd; // low-pass Filter order
|
cannam@0
|
69 double* LPACoeffs; //low pass Filter den coefficients
|
cannam@0
|
70 double* LPBCoeffs; //low pass Filter num coefficients
|
cannam@12
|
71 PPWinThresh WinT;//window size in frames for adaptive thresholding [pre post]:
|
cannam@0
|
72 QFitThresh QuadThresh;
|
mathieu@96
|
73 float delta; //delta threshold used as an offset when computing the smoothed detection function
|
mathieu@96
|
74
|
mathieu@96
|
75 PPickParams() :
|
mathieu@96
|
76 length(0),
|
mathieu@96
|
77 tau(0),
|
mathieu@96
|
78 alpha(0),
|
mathieu@96
|
79 cutoff(0),
|
mathieu@96
|
80 LPOrd(0),
|
mathieu@96
|
81 LPACoeffs(NULL),
|
mathieu@96
|
82 LPBCoeffs(NULL),
|
mathieu@96
|
83 WinT(0,0),
|
mathieu@96
|
84 QuadThresh(0,0,0),
|
mathieu@96
|
85 delta(0)
|
mathieu@96
|
86 {
|
mathieu@96
|
87 }
|
cannam@0
|
88 };
|
cannam@0
|
89
|
cannam@0
|
90 class PeakPicking
|
cannam@0
|
91 {
|
cannam@0
|
92 public:
|
cannam@0
|
93 PeakPicking( PPickParams Config );
|
cannam@0
|
94 virtual ~PeakPicking();
|
cannam@0
|
95
|
cannam@0
|
96 void process( double* src, unsigned int len, vector<int> &onsets );
|
cannam@0
|
97
|
cannam@0
|
98
|
cannam@0
|
99 private:
|
cannam@0
|
100 void initialise( PPickParams Config );
|
cannam@0
|
101 void deInitialise();
|
cannam@0
|
102 int quadEval( vector<double> &src, vector<int> &idx );
|
cannam@0
|
103
|
cannam@0
|
104 DFProcConfig m_DFProcessingParams;
|
cannam@0
|
105
|
cannam@0
|
106 unsigned int m_DFLength ;
|
cannam@0
|
107 double Qfilta ;
|
cannam@0
|
108 double Qfiltb;
|
cannam@0
|
109 double Qfiltc;
|
cannam@0
|
110
|
cannam@0
|
111
|
cannam@0
|
112 double* m_workBuffer;
|
cannam@0
|
113
|
cannam@0
|
114 DFProcess* m_DFSmoothing;
|
cannam@0
|
115 };
|
cannam@0
|
116
|
cannam@0
|
117 #endif
|