Revision 4:c74846514b09

View differences:

CepstrumPitchTracker.cpp
271 271
    double *io = new double[bs];
272 272
    double *logmag = new double[bs];
273 273

  
274
    // The "forward difference" method
274
    // The "inverse symmetric" method. Seems to be the most reliable
275 275
        
276 276
    for (int i = 0; i < hs; ++i) {
277 277

  
......
282 282
	
283 283
	double lm = log(mag + 0.00000001);
284 284
	
285
	logmag[bs/2 + i - 1] = lm;
286
	if (i < hs-1) {
287
	    logmag[bs/2 - i - 1] = lm;
288
	}
285
	logmag[i] = lm;
286
	if (i > 0) logmag[bs - i] = lm;
289 287
    }
290 288

  
291
    fft(bs, false, logmag, 0, rawcep, io);
292

  
293
    for (int i = 0; i < hs; ++i) {
294
	rawcep[i] = fabs(io[i]) - fabs(rawcep[i]);
295
    }
289
    fft(bs, true, logmag, 0, rawcep, io);
296 290
    
297 291
    delete[] logmag;
298 292
    delete[] io;
......
333 327

  
334 328
//    std::cerr << "peakProportion = " << peakProportion << std::endl;
335 329
//    std::cerr << "peak = " << m_inputSampleRate / (maxbin + m_binFrom) << std::endl;
330
//    std::cerr << "bins = " << m_bins << std::endl;
336 331

  
337
    if (peakProportion >= 0.03) {
332
    if (peakProportion >= (0.00006 * m_bins)) {
338 333
	Feature f;
339 334
	f.hasTimestamp = true;
340 335
	f.timestamp = timestamp;

Also available in: Unified diff