我必须使用梳状滤波器来检测声音文件的主频,如果是声音序列,则检测频率。我搜索了这个问题的任何实现或解释,但不幸的是没有找到任何东西。
到目前为止,我得到的是:我正在将一个wav文件加载到我的java应用程序中,然后使用FFT将其转换到频域。
我接下来该怎么办?如何实现这种用于频率检测的梳状滤波器?我不是要代码,只要告诉我该如何解决这个问题。我不允许使用外部库。谢谢你的建议。
发布于 2020-06-10 00:25:27
查找“谐波乘积谱”算法或方法。
您可以使用固定的梳子模板,并将其与FFT频谱宽度的变化重新缩放进行匹配,以获得最佳匹配,或者您也可以将固定频谱与频率间隔变化的梳子的范围进行匹配。插值或过滤可用于重新缩放(重采样的一种形式)。逐次逼近可以改善最佳滤波器匹配,从而改善频率估计。最佳匹配应该是基音高或周期性频率的良好估计,或者可能是次谐波。
发布于 2020-06-22 21:52:19
在我的频率检测方法中,我生成了N个梳状滤波器,方案如下:
filter1 -> 10-1010-1 ...
filter2 -> 100-100100-100...
filter3 -> 1000-10001000-1000...
filterN -> 1N0-1N0我在计算fft后的步骤:
如果当前result
相乘来计算频率
这种方法并不完美,但适用于基本声音的频率检测。
https://stackoverflow.com/questions/62272757
复制相似问题