如何配置带通滤波器?

时间:2013-03-25 23:57:47

标签: audio web-audio

我正在尝试使用Web Audio API的带通滤波器功能,但我相信我的问题更为通用。我不明白带通滤波器的“Q”值。我希望能够配置滤波器以传递中频X赫兹的Y赫兹内的频率。

我对音频编程很新,所以我需要考虑其他变量来计算Q吗?

1 个答案:

答案 0 :(得分:11)

假设您有一个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。

希望有所帮助。