Algorithm 自相关教程?

Algorithm 自相关教程?,algorithm,signal-processing,correlation,Algorithm,Signal Processing,Correlation,我最近一直在考虑使用自相关来检测基音。然而,我发现很难找到学习自相关的好的来源,我指的是那些可以一步一步地理解自相关的来源 我还不是一个很好的程序员,而且对公式也不是很在行,所以我发现的源代码真的很难理解 基本上,我现在知道的是,自相关的概念就像是信号的比较和对比方法?但如果我能对自相关算法有更多的了解,我将不胜感激 多谢各位 更新:这是我从一个网站得到的示例代码。也许你可以把它作为参考。我测试了这段代码,它确实正确地返回了正确的音高(尽管这里和那里都有一些不正确的音高) maxOffset=s

我最近一直在考虑使用自相关来检测基音。然而,我发现很难找到学习自相关的好的来源,我指的是那些可以一步一步地理解自相关的来源

我还不是一个很好的程序员,而且对公式也不是很在行,所以我发现的源代码真的很难理解

基本上,我现在知道的是,自相关的概念就像是信号的比较和对比方法?但如果我能对自相关算法有更多的了解,我将不胜感激

多谢各位

更新:这是我从一个网站得到的示例代码。也许你可以把它作为参考。我测试了这段代码,它确实正确地返回了正确的音高(尽管这里和那里都有一些不正确的音高)

maxOffset=sampleRate/minFreq;
minOffset=取样器/maxFreq;
对于(int-lag=maxOffset;lag>=minOffset;lag--)
{
float corr=0;//计算为平方和
对于(int i=0;imaxCorr)
{
maxCorr=corr;
最大滞后=滞后;
}
}
返回采样器/最大滞后;

我希望这里有一个简单的解释

首先考虑声纳工作-你发出一个已知的信号,然后比较接收信号与原始信号-在一个可能的延迟范围内比较信号,最佳匹配对应于反射信号的往返时间。


好,现在想想一个周期性的信号,比如钢琴上持续的中间C音。如果您在不同延迟范围内将音符与自身进行比较,您将获得与音符音高周期对应的任何延迟的匹配。这就是自相关的本质:在可能的延迟范围内将信号与自身进行比较,并在信号与自身延迟版本匹配的地方获得峰值。对于大多数音符,第一个这样的峰值正好对应一个音高周期,因此你可以从中推断出音高(音高或频率=延迟的倒数)。

自相关不是检测音高的最佳方法-你确定这是你在开始了解细节之前想要使用的方法吗?是的,因为我读到,虽然这不是最好的方法,但它是除了FFT以外的简单方法之一。我不想深入研究FFT,因为它看起来更复杂。谢谢!当我再看一些我一直在读的东西时,我会尝试把这些结合起来。嗨!我用一个示例代码更新了我的问题,这样我也许可以学到更多。从代码中,我看到您所涉及的“延迟”是关于max/minoffset的,它构成了可能的延迟范围。然而,我对“在信号与自身延迟版本匹配的地方获得峰值”这一部分有困难。根据我的理解,这是基于两个信号的某一点彼此相等的时间?然而,在代码中,我看到两个点(一个来自原始点,另一个来自延迟点)的总和被使用。你能帮助我吗?非常感谢。是的,延迟和延迟是一样的——这是代码示例中的外循环。对于每个给定的滞后,求和所有相应样本的乘积。如果有很强的相关性,那么这个总和将是一个很大的正值。如果存在显著的负相关,则会得到一个较大的负相关值。否则,如果在这个滞后时相关性很小或没有相关性,那么您将得到接近于零的值,谢谢!我现在感觉好多了。非常感谢你的帮助!