Mercurial > hg > qm-dsp
comparison dsp/onsets/DetectionFunction.cpp @ 12:da277e8b5244
* Some fixes to peak picker
* Add broadband energy rise detection function (same as the percussive
onset detector in the Vamp example plugins)
author | cannam |
---|---|
date | Fri, 18 May 2007 16:43:17 +0000 |
parents | c539af5259da |
children | f2b5c4251bf3 |
comparison
equal
deleted
inserted
replaced
11:8837aaa2a0e6 | 12:da277e8b5244 |
---|---|
107 break; | 107 break; |
108 | 108 |
109 case DF_COMPLEXSD: | 109 case DF_COMPLEXSD: |
110 retVal = complexSD( m_halfLength, m_magnitude, m_thetaAngle); | 110 retVal = complexSD( m_halfLength, m_magnitude, m_thetaAngle); |
111 break; | 111 break; |
112 | |
113 case DF_BROADBAND: | |
114 retVal = broadband( m_halfLength, m_magnitude, m_thetaAngle); | |
112 } | 115 } |
113 | 116 |
114 return retVal; | 117 return retVal; |
115 } | 118 } |
116 | 119 |
210 } | 213 } |
211 | 214 |
212 return val; | 215 return val; |
213 } | 216 } |
214 | 217 |
218 double DetectionFunction::broadband(unsigned int length, double *srcMagnitude, double *srcPhase) | |
219 { | |
220 double val = 0; | |
221 for (unsigned int i = 0; i < length; ++i) { | |
222 double sqrmag = srcMagnitude[i] * srcMagnitude[i]; | |
223 if (m_magHistory[i] > 0.0) { | |
224 double diff = 10.0 * log10(sqrmag / m_magHistory[i]); | |
225 if (diff > m_dbRise) val = val + 1; | |
226 } | |
227 m_magHistory[i] = sqrmag; | |
228 } | |
229 return val; | |
230 } | |
231 | |
215 double* DetectionFunction::getSpectrumMagnitude() | 232 double* DetectionFunction::getSpectrumMagnitude() |
216 { | 233 { |
217 return m_magnitude; | 234 return m_magnitude; |
218 } | 235 } |
219 | 236 |