Revision 25:9aee1a0e6223 CepstrumPitchTracker.cpp

View differences:

CepstrumPitchTracker.cpp
77 77
    }
78 78
    meanConfidence /= m_pending.size();
79 79

  
80
    int lengthRequired = int(2.0 / meanConfidence + 0.5);
80
    int lengthRequired = 10000;
81
    if (meanConfidence > 0.0) {
82
        lengthRequired = int(2.0 / meanConfidence + 0.5);
83
    }
81 84
    std::cerr << "meanConfidence = " << meanConfidence << ", lengthRequired = " << lengthRequired << ", length = " << m_pending.size() << std::endl;
82 85

  
83 86
    return (m_pending.size() > lengthRequired);
......
219 222
    m_stepSize(256),
220 223
    m_blockSize(1024),
221 224
    m_fmin(50),
222
    m_fmax(1000),
225
    m_fmax(900),
223 226
    m_vflen(1),
224 227
    m_binFrom(0),
225 228
    m_binTo(0),
......
507 510

  
508 511
    // The "inverse symmetric" method. Seems to be the most reliable
509 512
        
513
    double magmean = 0.0;
514

  
510 515
    for (int i = 0; i < hs; ++i) {
511 516

  
512 517
	double power =
513 518
	    inputBuffers[0][i*2  ] * inputBuffers[0][i*2  ] +
514 519
	    inputBuffers[0][i*2+1] * inputBuffers[0][i*2+1];
515 520
	double mag = sqrt(power);
516
	
521

  
522
        magmean += mag;
523

  
517 524
	double lm = log(mag + 0.00000001);
518 525
	
519 526
	logmag[i] = lm;
520 527
	if (i > 0) logmag[bs - i] = lm;
521 528
    }
522 529

  
530
    magmean /= hs;
531
    double threshold = 0.1; // for magmean
532
    
523 533
    fft(bs, true, logmag, 0, rawcep, io);
524 534
    
525 535
    delete[] logmag;
526 536
    delete[] io;
527 537

  
528
    double cep1 = rawcep[1];
529

  
530 538
    int n = m_bins;
531 539
    double *data = new double[n];
532 540
    filter(rawcep, data);
......
562 570

  
563 571
    double confidence = 0.0;
564 572
    if (nextPeakVal != 0.0) {
565
        std::cerr << "maxval = " << maxval << ", cep1 = " << cep1 << std::endl;
566
        double conf0 = (maxval - nextPeakVal) / 80.0;
567
        double conf1 = (cep1 / bs) / 2;
568
        if (conf0 > 1.0) conf0 = 1.0;
569
        if (conf1 > 1.0) conf1 = 1.0;
570
        confidence = conf0 * conf1;
571
        std::cerr << "conf0 = " << conf0 << ", conf1 = " << conf1 << ", confidence = " << confidence << std::endl;
573
        confidence = (maxval - nextPeakVal) / 100.0;
574
        if (magmean < threshold) confidence = 0.0;
575
        std::cerr << "magmean = " << magmean << ", confidence = " << confidence << std::endl;
572 576
    }
573 577

  
574 578
    Hypothesis::Estimate e;

Also available in: Unified diff