我正在尝试使用 Web Audio API 的带通滤波器功能,但我相信我的问题更笼统。我不明白带通滤波器的“Q”值。我希望能够配置滤波器以通过中频 X 赫兹的 Y 赫兹范围内的频率。
我对音频编程很陌生,所以我需要考虑其他变量来计算 Q 吗?
我正在尝试使用 Web Audio API 的带通滤波器功能,但我相信我的问题更笼统。我不明白带通滤波器的“Q”值。我希望能够配置滤波器以通过中频 X 赫兹的 Y 赫兹范围内的频率。
我对音频编程很陌生,所以我需要考虑其他变量来计算 Q 吗?
假设您有一个 1000Hz 的滤波器,并且您希望它以 500Hz 开始并以 2000Hz 结束。
首先,您会注意到它不会在每个方向上扩展相同数量的赫兹。这是因为滤波器带宽基于八度音程,而不是频率。所以在这种情况下,它向下扩展一个八度,向上扩展一个八度。换句话说,频率在低端被 2 分频,在高端被 2 倍 - 这使它的带宽为 2 个八度音程。
无论如何,假设您知道频率,这是计算它的方法:
Q = center_frequency / (top_frequency - bottom_frequency)
在这种情况下是1000 / ( 2000 - 500 )
, 或 0.667。
只要您有目标带宽(以八度为单位),您也可以在不知道顶部和底部频率的情况下计算它:
function getQ( bandwidth ){
return Math.sqrt( Math.pow(2, bandwidth) ) / ( Math.pow(2, bandwidth) - 1 )
}
同样,如果您2
作为带宽参数传递,您将得到相同的结果:Q = 0.667。
希望有帮助。