互相关峰值

信息处理 fft 互相关 自相关 波形相似度
2022-02-07 12:23:03

如何获得互相关峰值并基于它计算两个音频样本相似度的相关分数。到目前为止我已经

  1. FFT 两个样本
  2. 复共轭秒
  3. 乘以结果
  4. IFFT
  5. 与自身互相关(自相关)

感谢您的任何建议

2个回答

正如马特所说,你应该使用相关系数

点 1 到 4 计算互相关。从中您必须找到最高峰(或最低,如果它具有更高的绝对值)。这个值就是提名人的值。

分母由两个自相关值组成。这些是通过使用两个信号相等的相同算法获得的。如welcomeungeon所述,此处的峰值应位于中间(t = 0)取两个自相关值的平方根并将它们相乘,得到分母。

编辑:也许这个描述更清楚:

max(abs(ifft(fft(x1)fft(x2))))sqrt(max(abs(ifft(fft(x1)fft(x1)))))sqrt(max(abs(ifft(fft(x2)fft(x2)))))

撇号表示共轭复合物。

编辑:两个带有 Matlab 代码的示例:

使用相同的信号:

x = rand(1000,1)-0.5;
max(abs(ifft(fft(x).*fft(x)')))/(sqrt(max(abs(ifft(fft(x).*fft(x)')))).*sqrt(max(abs(ifft(fft(x).*fft(x)')))));

1;

使用正弦和余弦,也应该给出1,因为它们是彼此的延迟版本:

x = sin([0:pi/100:10*pi]);
y = cos([0:pi/100:10*pi]);
max(abs(ifft(fft(x).*fft(y)')))/(sqrt(max(abs(ifft(fft(x).*fft(x)')))).*sqrt(max(abs(ifft(fft(y).*fft(y)')))))

大约给出1

在转换到频域之前使用窗口应该可以改善结果。

您的样本的自相关应该在 t=0 处有一个峰值。这个峰值的值应该让您对阈值有一个很好的了解。在实时数据中进行关键字搜索的最简单方法是将传入数据划分为帧,并保持将所需波形与帧进行交叉相关,并检查结果是否具有高于估计阈值的峰值......然而,这是一个粗略的由于传入数据的幅度变化,方法和容易出现假峰值