优化自相关以进行音调检测

时间:2018-01-05 17:50:18

标签: java signals signal-processing

我正在编写一个java程序,该程序将从1024个样本块中的吉他中读取音频,并应用自动相关来查找音高。我有自动相关的代码,它工作正常,但对于1024个样本输入,它需要524800次迭代!有没有办法优化它,因为最终目标是几乎实时地使系统检测音高(现在它需要16毫秒来完成)。

我可能会将外环更改为600个循环,因为最低音符E(82Hz)在一个完整周期内需要大约537个样本,但即便如此,这总体上也是180300个环路。

代码:

    public double[] autoCorrelate(double[] audioIn) 
{

    double sum = 0;
    double[] output = new double[audioIn.length];
    int n = 0;
    long startTime = System.currentTimeMillis();


    for (n = 0; n < audioIn.length; n++) //shift sample to left after each inner loop
    {

        for (int i = n; i < audioIn.length; i++) 
        {

            sum = sum + (audioIn[i] * audioIn[i - n]); //computes product of signal and n shifted copy

        }

        output[n] = sum;
        sum = 0; //reset for next output value
    }

    long stopTime = System.currentTimeMillis();
    long totalTime = stopTime-startTime;
    System.out.println(totalTime);

    return output;

}

0 个答案:

没有答案