如何配置带通滤波器?

Mik*_*zer 5 audio web-audio-api

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

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

Kev*_*nis 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 )
}
Run Code Online (Sandbox Code Playgroud)

同样,如果您2作为带宽参数传递,您将得到相同的结果:Q = 0.667.

希望有所帮助.