algorithm - 调谐器的自相关启发法

标签 algorithm audio signal-processing pitch

我已经针对一些音频样本实现了一个简单的自相关例程,速率为 44100.0, block 大小为 2048。

我遵循的一般公式如下所示:

r[k] = a[k] * b[k] = ∑ a[n] • b[n + k]

我已经在强力嵌套循环中实现了它,如下所示:

for k = 0 to N-1 do 
    for n = 0 to N-1 do
        if (n+k) < N 
            then r[k] := r[k] + a(n)a(n+k)
    else
        break;
    end for n; 
end for k;

我寻找 r 中的最大幅度并确定它有多少个样本并计算频率。

为了帮助调节调谐器的结果,我使用循环缓冲区并每次返回中值。

暴力计算有点慢 - 有没有一种众所周知的、更快的方法来完成它们?

有时,调谐器并没有达到所需的准确度。我可以在这里应用什么类型的启发法来帮助优化结果?

有时 Octave 音阶不正确 - 有没有办法更准确地磨练正确的 Octave 音阶?

最佳答案

进行自相关的有效方法是使用 FFT:

  • 对时域信号进行 FFT
  • 将复数 FFT 输出转换为幅度和零相位(即功率谱)
  • 进行逆 FFT

这是可行的,因为时域中的自相关相当于频域中的功率谱。

话虽如此,简单的自相关并不是实现(准确)的好方法pitch detection一般来说,因此您可能需要重新考虑您的整个方法。

关于algorithm - 调谐器的自相关启发法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489531/

相关文章:

c++ - 将 unsigned char 音频转换为 short

matlab - 如何使用 Matlab 提高 PSD 的分辨率

algorithm - 给定一个无向图G = (V, E),判断G是否是完全图

algorithm - Copyscape 使用什么算法进行文本比较?

algorithm - 测试集合的 k 个元素加起来是否等于某个数

确定数字音频数据是否正在剪辑的算法?

java - 汉宁(von Hann)窗

.net - 最小化网络图中的交叉线

Silverlight MediaElement 位置属性异常

file - Yii2上传的音频文件未保存在上传文件夹中