我必须使用梳状滤波器来检测声音文件的主频,如果是声音序列,则检测频率。我找了一下这个问题的实现方法或解释,可惜没有找到。
到目前为止,我得到了什么。我正在加载一个wav文件到我的java程序中 然后用FFT将其转换为频域
接下来我应该怎么做?以及如何实现这个梳状滤波器的频率检测?我不求代码,只求告诉我应该如何处理这个问题。我不允许使用外部库。谢谢大家的建议。
查找 "谐波积谱 "算法或方法。
你可以使用一个固定的梳子模板,并将其与FFT频谱宽度的不同重缩进行匹配,以获得最佳匹配,或者你可以将固定的频谱与一系列不同频率间隔的梳子 "牙齿 "进行匹配。 插值或滤波可以用于重新缩放(重采样的一种形式)。 连续的近似可以提高最佳滤波器匹配度,从而提高频率估计。 最佳匹配应该是对基本音高或周期频率的良好估计,或者可能是一个次谐波。
在我的频率检测方法中,我用以下方案生成了N个梳状滤波器。
filter1 -> 10-1010-1 ...
filter2 -> 100-100100-100...
filter3 -> 1000-10001000-1000...
filterN -> 1N0-1N0
我计算fft后的步骤:
这种方法并不完美,但对于基本声音的频率检测是有效的。