Mercurial > hg > qm-dsp
comparison dsp/onsets/DetectionFunction.cpp @ 499:af5b7ef02aa7
Style fixes: avoid unsigned, fix formatting
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Mon, 03 Jun 2019 14:20:39 +0100 |
parents | fdaa63607c15 |
children |
comparison
equal
deleted
inserted
replaced
498:8b92623e81c9 | 499:af5b7ef02aa7 |
---|---|
18 | 18 |
19 ////////////////////////////////////////////////////////////////////// | 19 ////////////////////////////////////////////////////////////////////// |
20 // Construction/Destruction | 20 // Construction/Destruction |
21 ////////////////////////////////////////////////////////////////////// | 21 ////////////////////////////////////////////////////////////////////// |
22 | 22 |
23 DetectionFunction::DetectionFunction( DFConfig Config ) : | 23 DetectionFunction::DetectionFunction( DFConfig config ) : |
24 m_window(0) | 24 m_window(0) |
25 { | 25 { |
26 m_magHistory = NULL; | 26 m_magHistory = NULL; |
27 m_phaseHistory = NULL; | 27 m_phaseHistory = NULL; |
28 m_phaseHistoryOld = NULL; | 28 m_phaseHistoryOld = NULL; |
29 m_magPeaks = NULL; | 29 m_magPeaks = NULL; |
30 | 30 |
31 initialise( Config ); | 31 initialise( config ); |
32 } | 32 } |
33 | 33 |
34 DetectionFunction::~DetectionFunction() | 34 DetectionFunction::~DetectionFunction() |
35 { | 35 { |
36 deInitialise(); | 36 deInitialise(); |
114 return runDF(); | 114 return runDF(); |
115 } | 115 } |
116 | 116 |
117 void DetectionFunction::whiten() | 117 void DetectionFunction::whiten() |
118 { | 118 { |
119 for (unsigned int i = 0; i < m_halfLength; ++i) { | 119 for (int i = 0; i < m_halfLength; ++i) { |
120 double m = m_magnitude[i]; | 120 double m = m_magnitude[i]; |
121 if (m < m_magPeaks[i]) { | 121 if (m < m_magPeaks[i]) { |
122 m = m + (m_magPeaks[i] - m) * m_whitenRelaxCoeff; | 122 m = m + (m_magPeaks[i] - m) * m_whitenRelaxCoeff; |
123 } | 123 } |
124 if (m < m_whitenFloor) m = m_whitenFloor; | 124 if (m < m_whitenFloor) m = m_whitenFloor; |
159 } | 159 } |
160 | 160 |
161 return retVal; | 161 return retVal; |
162 } | 162 } |
163 | 163 |
164 double DetectionFunction::HFC(unsigned int length, double *src) | 164 double DetectionFunction::HFC(int length, double *src) |
165 { | 165 { |
166 unsigned int i; | 166 double val = 0; |
167 double val = 0; | 167 for (int i = 0; i < length; i++) { |
168 | |
169 for( i = 0; i < length; i++) { | |
170 val += src[ i ] * ( i + 1); | 168 val += src[ i ] * ( i + 1); |
171 } | 169 } |
172 return val; | 170 return val; |
173 } | 171 } |
174 | 172 |
175 double DetectionFunction::specDiff(unsigned int length, double *src) | 173 double DetectionFunction::specDiff(int length, double *src) |
176 { | 174 { |
177 unsigned int i; | |
178 double val = 0.0; | 175 double val = 0.0; |
179 double temp = 0.0; | 176 double temp = 0.0; |
180 double diff = 0.0; | 177 double diff = 0.0; |
181 | 178 |
182 for( i = 0; i < length; i++) { | 179 for (int i = 0; i < length; i++) { |
183 | 180 |
184 temp = fabs( (src[ i ] * src[ i ]) - (m_magHistory[ i ] * m_magHistory[ i ]) ); | 181 temp = fabs( (src[ i ] * src[ i ]) - (m_magHistory[ i ] * m_magHistory[ i ]) ); |
185 | 182 |
186 diff= sqrt(temp); | 183 diff= sqrt(temp); |
187 | 184 |
194 | 191 |
195 return val; | 192 return val; |
196 } | 193 } |
197 | 194 |
198 | 195 |
199 double DetectionFunction::phaseDev(unsigned int length, double *srcPhase) | 196 double DetectionFunction::phaseDev(int length, double *srcPhase) |
200 { | 197 { |
201 unsigned int i; | |
202 double tmpPhase = 0; | 198 double tmpPhase = 0; |
203 double tmpVal = 0; | 199 double tmpVal = 0; |
204 double val = 0; | 200 double val = 0; |
205 | 201 |
206 double dev = 0; | 202 double dev = 0; |
207 | 203 |
208 for( i = 0; i < length; i++) { | 204 for (int i = 0; i < length; i++) { |
209 tmpPhase = (srcPhase[ i ]- 2*m_phaseHistory[ i ]+m_phaseHistoryOld[ i ]); | 205 tmpPhase = (srcPhase[ i ]- 2*m_phaseHistory[ i ]+m_phaseHistoryOld[ i ]); |
210 dev = MathUtilities::princarg( tmpPhase ); | 206 dev = MathUtilities::princarg( tmpPhase ); |
211 | 207 |
212 // A previous version of this code only counted the value here | 208 // A previous version of this code only counted the value here |
213 // if the magnitude exceeded 0.1. My impression is that | 209 // if the magnitude exceeded 0.1. My impression is that |
226 | 222 |
227 return val; | 223 return val; |
228 } | 224 } |
229 | 225 |
230 | 226 |
231 double DetectionFunction::complexSD(unsigned int length, double *srcMagnitude, double *srcPhase) | 227 double DetectionFunction::complexSD(int length, double *srcMagnitude, double *srcPhase) |
232 { | 228 { |
233 unsigned int i; | |
234 double val = 0; | 229 double val = 0; |
235 double tmpPhase = 0; | 230 double tmpPhase = 0; |
236 double tmpReal = 0; | 231 double tmpReal = 0; |
237 double tmpImag = 0; | 232 double tmpImag = 0; |
238 | 233 |
239 double dev = 0; | 234 double dev = 0; |
240 ComplexData meas = ComplexData( 0, 0 ); | 235 ComplexData meas = ComplexData( 0, 0 ); |
241 ComplexData j = ComplexData( 0, 1 ); | 236 ComplexData j = ComplexData( 0, 1 ); |
242 | 237 |
243 for( i = 0; i < length; i++) { | 238 for (int i = 0; i < length; i++) { |
244 | 239 |
245 tmpPhase = (srcPhase[ i ]- 2*m_phaseHistory[ i ]+m_phaseHistoryOld[ i ]); | 240 tmpPhase = (srcPhase[ i ]- 2*m_phaseHistory[ i ]+m_phaseHistoryOld[ i ]); |
246 dev= MathUtilities::princarg( tmpPhase ); | 241 dev= MathUtilities::princarg( tmpPhase ); |
247 | 242 |
248 meas = m_magHistory[i] - ( srcMagnitude[ i ] * exp( j * dev) ); | 243 meas = m_magHistory[i] - ( srcMagnitude[ i ] * exp( j * dev) ); |
258 } | 253 } |
259 | 254 |
260 return val; | 255 return val; |
261 } | 256 } |
262 | 257 |
263 double DetectionFunction::broadband(unsigned int length, double *src) | 258 double DetectionFunction::broadband(int length, double *src) |
264 { | 259 { |
265 double val = 0; | 260 double val = 0; |
266 for (unsigned int i = 0; i < length; ++i) { | 261 for (int i = 0; i < length; ++i) { |
267 double sqrmag = src[i] * src[i]; | 262 double sqrmag = src[i] * src[i]; |
268 if (m_magHistory[i] > 0.0) { | 263 if (m_magHistory[i] > 0.0) { |
269 double diff = 10.0 * log10(sqrmag / m_magHistory[i]); | 264 double diff = 10.0 * log10(sqrmag / m_magHistory[i]); |
270 if (diff > m_dbRise) val = val + 1; | 265 if (diff > m_dbRise) val = val + 1; |
271 } | 266 } |