BiQuadFilters 与 MyOwnFilter - Javascript WebAudio API

BiQuadFilters vs MyOwnFilter - Javascript WebAudio API

我正在将 48hkz 下采样到 16khz。为此,我需要一个过滤器来防止混叠。 WebAudio API 已经有 filters,这就是我要找的:

biquadFilter = context.createBiquadFilter();
biquadFilter.type = "lowpass";
biquadFilter.frequency.value = 12000;
biquadFilter.Q.value = 3;

但我可以用这个简单的算法做到这一点:

//Order 3 - Indirect form 2
var a_coef = [1.000000000000000,  -0.965779713179161,   0.582644165984302 , -0.106017056545330];
var b_coef = [0.063855924532476,   0.191567773597429,   0.191567773597429,   0.063855924532476];

var z1 = 0; var z2 = 0; var z3 = 0; var z0 = 0;
for (var i = 0; i < buffer.length; i++) {
  z0 = buffer[i] + a_coef[1] * z1-a_coef[2] * z2-a_coef[3] * z3;
  buffer[i] = b_coef[0] * z0 + b_coef[1] * z1+b_coef[2] * z2 + b_coef[3] * z3;
  z3 = z2; z2 = z1; z1 = z0;
};

哪种方式消耗资源更多? BiquadFilters 在本机代码中扭曲?是最有效的方法吗?

双二阶滤波器确实是用本机代码编写的,在 99.9% 的可能情况下,您最好使用它们。

JavaScript 引擎可以做一些惊人的优化,可以使 JS 与本机实现相媲美,但在这种情况下可能不会。您确实需要知道如何 "provide" 具有可优化代码的引擎以获得您需要的各种提升,这本身就是一门完整的科学(一个好的起点是永远不要在循环内声明 var ).