【发布时间】:2013-03-15 15:42:54
【问题描述】:
我正在尝试使用 Web Audio API 的带通滤波器功能,但我相信我的问题更笼统。我不明白带通滤波器的“Q”值。我希望能够配置滤波器以通过中频 X 赫兹的 Y 赫兹范围内的频率。
我对音频编程非常陌生,所以在计算 Q 时我需要考虑其他变量吗?
【问题讨论】:
标签: audio web-audio-api
我正在尝试使用 Web Audio API 的带通滤波器功能,但我相信我的问题更笼统。我不明白带通滤波器的“Q”值。我希望能够配置滤波器以通过中频 X 赫兹的 Y 赫兹范围内的频率。
我对音频编程非常陌生,所以在计算 Q 时我需要考虑其他变量吗?
【问题讨论】:
标签: audio web-audio-api
假设您有一个 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。
希望对您有所帮助。
【讨论】: