如何用梳状滤波器检测基本频率?

问题描述 投票:0回答:1

我必须使用梳状滤波器来检测声音文件的主频,如果是声音序列,则检测频率。我找了一下这个问题的实现方法或解释,可惜没有找到。

到目前为止,我得到了什么。我正在加载一个wav文件到我的java程序中 然后用FFT将其转换为频域

接下来我应该怎么做?以及如何实现这个梳状滤波器的频率检测?我不求代码,只求告诉我应该如何处理这个问题。我不允许使用外部库。谢谢大家的建议。

java filter fft audio-processing
1个回答
0
投票

查找 "谐波积谱 "算法或方法。

你可以使用一个固定的梳子模板,并将其与FFT频谱宽度的不同重缩进行匹配,以获得最佳匹配,或者你可以将固定的频谱与一系列不同频率间隔的梳子 "牙齿 "进行匹配。 插值或滤波可以用于重新缩放(重采样的一种形式)。 连续的近似可以提高最佳滤波器匹配度,从而提高频率估计。 最佳匹配应该是对基本音高或周期频率的良好估计,或者可能是一个次谐波。


0
投票

在我的频率检测方法中,我用以下方案生成了N个梳状滤波器。

filter1 -> 10-1010-1 ...
filter2 -> 100-100100-100...
filter3 -> 1000-10001000-1000...
filterN -> 1N0-1N0

我计算fft后的步骤:

  1. 从fft结果中得到幅度部分
  2. 在循环中计算每个梳状滤波器的和与fft结果的幅度。
  3. 如果当前总和大于前一个,则设sumMax为当前总和,通过每个梳子之间的乘法空间以及采样率和窗口大小的商来计算频率。

这种方法并不完美,但对于基本声音的频率检测是有效的。

© www.soinside.com 2019 - 2024. All rights reserved.