Учебник по автокорреляции?

Недавно я рассматривал возможность использования автокорреляции для определения высоты тона. Тем не менее, мне трудно найти хорошие источники, где можно изучить автокорреляцию, и я имею в виду источники, которые позволяют легко понять автокорреляцию шаг за шагом.

Я не очень хороший программист, но и не очень большой по формулам, поэтому источники, которые я нахожу, действительно трудно понять.

В принципе, что я знаю сейчас, понятие автокорреляции похоже на сравнительный и контрастный метод сигнала? Но я был бы очень признателен, если бы мог лучше понять алгоритм автокорреляции.

Большое спасибо!

UPDATE: Вот пример кода, который я получил с сайта. Возможно, вы можете использовать его как ссылку. Ive проверил этот код, и он правильно вернул правильную высоту (хотя здесь и есть некоторые неправильные)

maxOffset = sampleRate / minFreq;
minOffset = sampleRate / maxFreq;

for (int lag = maxOffset; lag >= minOffset; lag--)
{
   float corr = 0; // this is calculated as the sum of squares
   for (int i = 0; i < framesize; i++)
   {
      int oldIndex = i - lag;
      float sample = ((oldIndex < 0) ? prevBuffer[frames + oldIndex] : buffer[oldIndex]);
      corr += (sample * buffer[i]);
   }

   if (corr > maxCorr)
   {
      maxCorr = corr;
      maxLag = lag;
   }
}

return sampleRate / maxLag;

Ответы

Ответ 1

Здесь я надеюсь, это простое объяснение.

Во-первых, рассмотрите, как работает сонар - вы отправляете известный сигнал, а затем сравниваете полученный сигнал с оригиналом - сигналы сравниваются по диапазону возможных задержек, а наилучшее соответствие соответствует времени прохождения в оба конца отраженного сигнала.

ОК - теперь подумайте о периодическом сигнале, например, о продолжительной средней ноте C на фортепиано. Если вы сравните записку с самим собой при различных задержках, вы получите соответствие для любой задержки, которая соответствует периоду основного тона примечания. По сути, это автокорреляция: сравнение сигнала с самим собой в диапазоне возможных задержек и получение пика везде, где сигнал соответствует самой задержанной версии. Для большинства музыкальных нот первый такой пик соответствует точно одному периоду тона, и поэтому вы можете вывести из него высоту тона (шаг или частота = обратная задержка).