Учебник по автокорреляции?
Недавно я рассматривал возможность использования автокорреляции для определения высоты тона. Тем не менее, мне трудно найти хорошие источники, где можно изучить автокорреляцию, и я имею в виду источники, которые позволяют легко понять автокорреляцию шаг за шагом.
Я не очень хороший программист, но и не очень большой по формулам, поэтому источники, которые я нахожу, действительно трудно понять.
В принципе, что я знаю сейчас, понятие автокорреляции похоже на сравнительный и контрастный метод сигнала? Но я был бы очень признателен, если бы мог лучше понять алгоритм автокорреляции.
Большое спасибо!
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 на фортепиано. Если вы сравните записку с самим собой при различных задержках, вы получите соответствие для любой задержки, которая соответствует периоду основного тона примечания. По сути, это автокорреляция: сравнение сигнала с самим собой в диапазоне возможных задержек и получение пика везде, где сигнал соответствует самой задержанной версии. Для большинства музыкальных нот первый такой пик соответствует точно одному периоду тона, и поэтому вы можете вывести из него высоту тона (шаг или частота = обратная задержка).